Zabbix рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ MySQL рдорд╛рд╕реНрдЯрд░-рдорд╛рд╕реНрдЯрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛

MySQL рдорд╛рд╕реНрдЯрд░-рдорд╛рд╕реНрдЯрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдЧрд▓рд╛ рддрд╛рд░реНрдХрд┐рдХ рдХрджрдо рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкрдврд╝рдирд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдРрд╕реА рдкреНрд░рддрд┐рдХреГрддрд┐ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдорд╛рдорд▓рд╛ рд╣реИ, рдФрд░ рдпрд╣ рджреЛ рд╕реЗ рддреАрди рдХреЗ рдХрд╛рд░рдХ рд╕реЗ рдЙрдбрд╝рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЪреЗрдХ рдбрд╛рд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдХреНрдпрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЕрднреА рднреА рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ, рдпрд╛ рдЕрдЧрд░ рдХреБрдЫ рд╣реБрдЖ рдФрд░ рд╕рдм рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ред
Google рдХреЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдкреНрд░рд╢реНрдиреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЖрдк "SHOW SLAVE STATUS \ G" рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ: рдмрд╛рдд рдЕрдЪреНрдЫреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рдХреБрдЫ рдЭреВрда рд╣реИред рдереЛрдбрд╝рд╛ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдкрд░ рдЖрдпрд╛:

* рджреЛ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рдкреНрд▓реЗрдЯ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░ рддрд╛рдЬ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рд░реНрд╡рд░ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
* рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдХреБрдЯ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
* рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдкреНрд▓реЗрдЯ рдФрд░ рдШрдбрд╝рд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рддреА рд╣реИ рдЬрдм "рдЕрдиреНрдп" рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдЕрдВрддрд┐рдо рдмрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рд╕рдм рдареАрдХ рд╣реИ - 1 рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдпрджрд┐ рдирд╣реАрдВ - 0 (рдпрд╣ рд╕реНрдерд┐рддрд┐ zabbiks рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реИ)
* рдЖрдкрдХрд╛ UserParameter zabbix рдПрдЬреЗрдВрдЯ рдХреЗ рдХреЙрдиреНтАНрдлрд╝рд┐рдЧрд░ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рдЯреНрд░рд┐рдЧрд░ zabbiks рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ
* рдХреЙрдлрд╝реА

рдЯреНрд░реЗрдирд┐рдВрдЧ

рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╣рдо рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЯреЗрдмрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ:

create database repl_check;
use repl_check;
create table repl_status(s_id int, server_time TIMESTAMP);
insert into repl_status values(1,NOW());


рдкреНрд░рддрд┐рдХреГрддрд┐ рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, /etc/my.cnf рдореЗрдВ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ
binlog-do-db=repl_check

рд╣рдо рджреЛрдиреЛрдВ mysql рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЬреАрд╡рди рдХреЗ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ

рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдХрд╛ рдЕрдкрдирд╛ рдХреЙрдиреНрдлрд┐рдЧ, рдФрд░ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕рд░реНрд╡рд░_рдЖрдИрдбреА рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ @@ server_id рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд▓рд┐рдП my.cnf рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдЗрдирд░реА рд▓реЙрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдорд╛рдВрдб рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдПрдХ рдЕрд▓рдЧ рд╕рд░реНрд╡рд░_рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, (рдпрд╛рдиреА, рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЬрд╣рд╛рдВ рд╕рд░реНрд╡рд░_рдЖрдИрдбреА = 1 рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЬрд╣рд╛рдВ рд╕рд░реНрд╡рд░_рдЖрдИрдбреАред = 2), рдФрд░ рдореИрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдкреАрдбрд╝рд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЕрдиреВрдареЗ рд╕рд░реНрд╡рд░_рдЖрдИрдбреА рджрд░реНрдЬ рдХрд░реЗрдВред
max_seconds_diff рдЕрдзрд┐рдХрддрдо рдЕрдВрддрд░ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХ рдЫреЛрдЯрд╛ рдореВрд▓реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрдЯреНрдЯрд░рддрд╛ рдореЗрдВ рдирд╣реАрдВ рдЖрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЕрдЧрд░ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ 3 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж рдкрддрд╛ рд▓рдЧрд╛рдКрдВрдЧрд╛ред

config.php
<?php
$username="root";
$password="";
$dbname="repl_check";
$server_id=1;
$max_seconds_diff = 130;
?>


repl_update.php
<?php
include('config.php');

$sql_conn = mysql_connect("localhost",$username,$password);
if ($sql_conn == NULL)
die("failed connecting");
mysql_select_db($dbname);

$sql_query = "update repl_status set server_time=NOW() where s_id like " . intval($server_id);
mysql_query($sql_query,$sql_conn);

mysql_close($sql_conn);
?>


рдЗрд╕реЗ рдореБрдХреБрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЕрдм, рд╣рд░ рдорд┐рдирдЯ, рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ, рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрди рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ server_id рдХреЗ рд╕рд╛рде
crontab -e
* * * * * php /home/myuser/scripts/check_repl/repl_update.php

рд╕рдм рдХреБрдЫ, рдЯреИрдмрд▓реЗрдЯ рдХреЛ рд╣рд░ рдорд┐рдирдЯ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬреАрд╡рди рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдиреЛред

check_repl.php
<?php
include('config.php');

$sql_conn = mysql_connect("localhost",$username,$password);
if ($sql_conn == NULL)
die("failed connecting");
mysql_select_db($dbname);

$time_result = mysql_query("select time_to_sec(timediff(NOW(), max(server_time))) as serv_time_diff from repl_status where s_id != " . intval($server_id));
$result_row = mysql_fetch_array($time_result, MYSQL_ASSOC);
$seconds_diff = intval($result_row["serv_time_diff"]);

mysql_free_result($time_result);
mysql_close($sql_conn);

if ($seconds_diff > $max_seconds_diff)
print "0"; //bad
else
print "1"; //good!
?>


рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд╛рд╕ рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреА рдЬреЛрдбрд╝реА:

check_repl.sh
#!/bin/sh
php /home/myuser/scripts/check_repl/check_repl.php


рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдЖрдкрдХреЛ "рд╕реНрд▓реЗрд╡ рд╕реНрдЯреЙрдк" рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, 2-3 рдорд┐рдирдЯ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдФрд░ check_repl.sh рдЪрд▓рд╛рдПрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдореЗрдВ 0. рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк "рд╕реНрд▓реЗрд╡ рд╕реНрдЯрд╛рд░реНрдЯ" рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж рд╕реНрдерд┐рддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрд░реЗрдЦрд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

Zabbiks

рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ /etc/zabbix/zabbix_agentd.conf (рдпрд╛ рдЬрд╣рд╛рдБ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
UserParameter=mysql_repl.check,/home/myuser/scripts/check_repl/check_repl.sh

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ zabbix (рдпрд╛ zabbix_get) mysql_repl.check рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЖрдЗрдЯрдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓реЗрдЧреА рдФрд░ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдорд┐рд▓реЗрдЧрд╛ (0 рдпрд╛ 1)

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЬрд╝реИрдмрд┐рдХреНрд╕ рдПрдЬреЗрдВрдЯ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЖрдЗрдЯрдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╝реИрдмрд┐рдХреНрд╕ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдЯрдо рдореЗрдВ, рджрд┐рдЦрд╛рдПрдБ рдорд╛рди рдлрд╝реАрд▓реНрдб рдореЗрдВ, рд╕реЗрд╡рд╛ рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░реЗрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, 0 рдиреАрдЪреЗ рд╣реИ, 1 рдЕрдк)
mysql_repl.check
рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рдЯреНрд░рд┐рдЧрд░: {MyHost: mysql_repl.check.last (0)} <1

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдЗрдЯрдо рдФрд░ рдЯреНрд░рд┐рдЧрд░ рджреЛрдиреЛрдВ рдореЗрдЬрдмрд╛рдиреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд╣рд╛рдВ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЙрдбрд╝рддреА рд╣реИ, рдЯреНрд░рд┐рдЧрд░ рд╡рд╣рд╛рдВ рд░реЛрд╢рдиреА рдХрд░рддрд╛ рд╣реИред

рд╡рд╣ рд╕рдм рд╣реИред
рдореИрдВ рдЖрдкрдХреЗ mysql рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВред

Source: https://habr.com/ru/post/In136353/


All Articles