dm从上游mysql同步数据到tidb,如果报错就会导致同步中止。上篇文章写了zabbix 监控ticdc同步,本篇与上篇会有稍许的不同
1,允许自定义参数
# vim /etc/zabbix/zabbix_agent2.conf UnsafeUserParameters=1 //0改成1,允许自定义参数 # systemctl restart zabbix-agent2 //重启
2,创建dm同步发现脚本
$ cat /etc/zabbix/script/dm-discover.php
<?php
# Discovery dm.
# Example:
# php ./dm-discover.php msg
# Return Json:
# [
# {
# "{#DMID}":"mariadb20-task",
# "{#DMMES}":"[ddl:8200]Unsupported modify column: type varchar(4) not match origin int(4), and tidb_enable_change_column_type is false"
# },
# {
# "{#DMID}":"mysql57-task",
# "{#DMMES}":""
# }
# ]
# Example:
# php ./dm-discover.php id
# Return Json:
# [
# {
# "{#DMID}":"mariadb20-task"
# },
# {
# "{#DMID}":"mysql57-task"
# }
# ]
$result = [];
$command = "/home/tidb/.tiup/bin/tiup dmctl --master-addr 10.0.10.18:8261 query-status";
$res = shell_exec($command);
preg_match('/\{.*\s+.*\}/is',$res,$match);
if(!empty($match[0])){
$dm_list = json_decode($match[0],true);
if(empty($dm_list)){
exit(json_encode($result));
}
foreach($dm_list['tasks'] as $k=>$v) {
$result[$k]["{#DMID}"] = $v['taskName'];
if(!empty($argv[1]) && $argv[1] == 'msg'){
if($v['taskStatus'] != "Running"){
$dm_task_detail = "/home/tidb/.tiup/bin/tiup dmctl --master-addr 10.0.10.18:8261 query-status ".$v['taskName'];
$detail_res = shell_exec($dm_task_detail);
preg_match('/"RawCause":\s+\"(.*)\"/i',$detail_res,$detail_match);
$result[$k]["{#DMMES}"] = $detail_match[1];
}else{
$result[$k]["{#DMMES}"] = "Running";
}
}
}
}
echo json_encode($result);
注意:自定义的变量最好不要重名,不然收邮件时,会没有值
3,创建dm检查脚本
# cat /etc/zabbix/script/dm-check.php
<?php
# dm check
# Example:
# dmid mariadb20-task status:
# php dm-check.php mariadb20-task
# Return:
# - UP(success),
# - Down(error msg)
$command = "/home/tidb/.tiup/bin/tiup dmctl --master-addr 10.0.10.18:8261 query-status ".$argv[1];
$res = shell_exec($command);
if(stripos($res,"errors")){
preg_match('/"RawCause":\s+\"(.*)\"/i',$res,$detail_match);
echo $detail_match[1];
}else if(preg_match('/"result":\s+false/i',$res)){
echo "dm ".$argv[1]." stop by plan";
}else{
echo "success";
}
注意:上面文章监控ticdc时,返回的数据类型,这次返回的是字符
4,配置脚本执行权限
# chown tidb.tidb -R /etc/zabbix/script/
5,配置zabbix-agent2
$ vim /etc/zabbix/zabbix_agent2.d/ticdc-status.conf UserParameter=ticdc-discover[*],sudo -u tidb php /etc/zabbix/script/ticdc-discover.php $1 UserParameter=ticdc.check[*],sudo -u tidb php /etc/zabbix/script/ticdc-check.php $1 UserParameter=dm-discover[*],sudo -u tidb php /etc/zabbix/script/dm-discover.php $1 UserParameter=dm.check[*],sudo -u tidb php /etc/zabbix/script/dm-check.php $1 # systemctl restart zabbix-agent2 //重启客户端
6,zabbix_get检测配置
$ zabbix_get -s 127.0.0.1 -p 10050 -k "dm-discover[id]"
[{"{#DMID}":"mariadb20-task"},{"{#DMID}":"mysql57-task"}]
$ zabbix_get -s 127.0.0.1 -p 10050 -k "dm-discover[msg]"
[{"{#DMID}":"mariadb20-task","{#DMMES}":"Running"},{"{#DMID}":"mysql57-task","{#DMMES}":"[ddl:8200]Unsupported modify column: type varchar(4) not match origin int(4), and tidb_enable_change_column_type is false"}]
$ zabbix_get -s 127.0.0.1 -p 10050 -k "dm.check[mysql57-task]"
[ddl:8200]Unsupported modify column: type varchar(10) not match origin int(10), and tidb_enable_change_column_type is false
$ zabbix_get -s 127.0.0.1 -p 10050 -k "dm.check[mariadb20-task]"
success
7,配置自动发现,监控原型项,触发器等
创建模板参考上篇文章,监控ticdc,dm用了相同的模板
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/server/2489.html



