zabbix自定义监控(进程,日志,mysql主从状态,mysql主从延迟)

zabbix自定义监控(进程,日志,mysql主从状态,mysql主从延迟)

准备工作

准备三台主机:

主机名系统版本ip地址
controllerCentOS 8192.168.200.10
node1CentOS 8192.168.200.20
node2RedHat 8192.168.200.30

这里controller是服务端,node1是客户端。
node2将作为主从数据库中的主数据库
node1将作为主从数据库中的从数据库

自定义监控进程

在客户端开启自定义监控功能

[root@node1 ~]# cd /usr/local/etc/
[root@node1 etc]# ls
zabbix_agentd.conf  zabbix_agentd.conf.d
[root@node1 etc]# 
[root@node1 etc]# vi zabbix_agentd.conf
...
# UnsafeUserParameters=0
UnsafeUserParameters=1
[root@node1 etc]#

创建一个目录用来存放脚本,并查看被监控的进程行数,

[root@node1 ~]# mkdir /script 
[root@node1 ~]# cd /script/
[root@node1 script]# 
[root@node1 script]# ps -ef | grep 'postfix' | grep -v grep
root        7183       1  0 14:48 ?        00:00:00 /usr/libexec/postfix/master -w
postfix     7184    7183  0 14:48 ?        00:00:00 pickup -l -t unix -u
postfix     7185    7183  0 14:48 ?        00:00:00 qmgr -l -t unix -u
[root@node1 script]# 
[root@node1 script]# ps -ef | grep 'postfix' | grep -v grep | wc -l
3
[root@node1 script]# 

编辑脚本,并加上执行权限

[root@node1 script]# vi jc.sh 
[root@node1 script]# cat jc.sh 
#!/bin/bash

process=$(ps -ef | grep "$1" | grep -Ev "grep | $0" | wc -l)

if [ $process -eq 0 ];then
    echo "1"
else
    echo "0"
fi
[root@node1 script]# 
[root@node1 script]# ls
jc.sh
[root@node1 script]# chmod +x jc.sh

添加自定义监控项

[root@node1 ~]# cd /usr/local/etc/
[root@node1 etc]# ls
zabbix_agentd.conf  zabbix_agentd.conf.d
[root@node1 etc]# 
[root@node1 etc]# vi zabbix_agentd.conf
...
# ListenBacklog=
UserParameter=show_process_postfix,/bin/bash /script/jc.sh postfix
[root@node1 etc]#

重启zabbix_agentd服务

[root@node1 ~]# systemctl restart zabbix_agentd
[root@node1 ~]# 
[root@node1 ~]# systemctl status zabbix_agentd 
● zabbix_agentd.service - zabbix agentd
   Loaded: loaded (/usr/lib/systemd/system/zabbix_agentd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-09-26 15:13:28 CST; 8s ago
  Process: 7487 ExecStop=/usr/bin/pkill zabbix_agentd (code=exited, status=0/SUCCESS)
...
[root@node1 ~]#

在服务端获取客户端postfix的值

[root@controller ~]# zabbix_get -s 192.168.200.20 -k show_process_postfix               
0
[root@controller ~]# 
[root@node1 ~]# systemctl stop postfix
[root@node1 ~]# 
[root@controller ~]# zabbix_get -s 192.168.200.20 -k show_process_postfix
1
[root@controller ~]# 

postfix的值为0时说明postfix服务已开启,postfix的值为1时说明服务是停止状态。

添加show process of postfix监控项
创建监控项
在这里插入图片描述

name后面填写监控项名称
key后面选择监控类型
在这里插入图片描述

监控项添加成功
在这里插入图片描述

添加触发器
在这里插入图片描述

name后面填写触发报警后显示的内容
severity后面选择一个报警级别
点击add添加规则
在这里插入图片描述

Item后面点击select选择监控项目
设置result选择=1时触发报警
在这里插入图片描述

点击Add
在这里插入图片描述

触发器添加成功
在这里插入图片描述

手动触发并验证
停止postfix服务

[root@node1 ~]# systemctl stop postfix
[root@node1 ~]# 

报警已触发
在这里插入图片描述

编辑zabbix_agentd.conf文件,修改自定义监控项使其能传输多个参数

[root@node1 ~]# vi /usr/local/etc/zabbix_agentd.conf
...
# ListenBacklog=
UserParameter=show_process[*],/bin/bash /script/jc.sh $1           
[root@node1 ~]#
[root@node1 ~]# systemctl restart zabbix_agentd

重启zabbix_agentd服务

在服务端查看客户端多个服务状态

[root@controller ~]# zabbix_get -s 192.168.200.20 -k show_process['postfix']
1
[root@controller ~]# 
[root@controller ~]# zabbix_get -s 192.168.200.20 -k show_process['httpd']  
1
[root@controller ~]# 
[root@controller ~]# zabbix_get -s 192.168.200.20 -k show_process['mysql']
1
[root@controller ~]# 
[root@controller ~]# zabbix_get -s 192.168.200.20 -k show_process['zabbix']
0
[root@controller ~]# 

修改show process of postfix监控项
在这里插入图片描述

修改key后面的内容
在这里插入图片描述

查看监控项
在这里插入图片描述

添加httpd监控项
在这里插入图片描述

name后面填写监控项名称
key后面填写httpd监控类型
在这里插入图片描述

查看监控项
在这里插入图片描述

添加httpd触发器
在这里插入图片描述

name后面填写触发报警后显示的内容
severity后面选择一个报警级别
点击add添加规则
在这里插入图片描述

Item后面点击select选择监控项目
设置result选择=1时触发报警
在这里插入图片描述

点击Add
在这里插入图片描述

查看触发器
在这里插入图片描述

由于node1客户端没有httpd服务,等待触发报警就行
在这里插入图片描述

自定义监控日志

下载pyscripts包

下载地址:https://github.com/chendao2015/pyscripts

安装unzip解压工具,解压pyscripts-master.zip压缩包

[root@node1 ~]# ls
anaconda-ks.cfg  pyscripts-master.zip  zabbix-6.4.6  zabbix-6.4.6.tar.gz
[root@node1 ~]# 
[root@node1 ~]# yum -y install unzip
Last metadata expiration check: 2:15:16 ago on Tue 26 Sep 2023 02:02:02 PM CST.
Dependencies resolved.
...
Installed:
  unzip-6.0-45.el8_4.x86_64                                                                                         
Complete!
[root@node1 ~]# 
[root@node1 ~]# unzip pyscripts-master.zip 
Archive:  pyscripts-master.zip
67a2f27e90f1cb27d46bbe855d255b3e0d302cd7
   creating: pyscripts-master/
  inflating: pyscripts-master/README.md  
  inflating: pyscripts-master/dmp4.py  
  inflating: pyscripts-master/log.py  
  inflating: pyscripts-master/mail_send.py  
  inflating: pyscripts-master/定时发微信群消息.zip  
[root@node1 ~]# 
[root@node1 ~]# ls
anaconda-ks.cfg  pyscripts-master  pyscripts-master.zip  zabbix-6.4.6  zabbix-6.4.6.tar.gz
[root@node1 ~]# 

将pyscripts-master目录下的log.py文件移动到script目录下,并给log.py加上执行权限

[root@node1 ~]# cd pyscripts-master
[root@node1 pyscripts-master]# ls
dmp4.py  log.py  mail_send.py  README.md  定时发微信群消息.zip
[root@node1 pyscripts-master]# 
[root@node1 pyscripts-master]# mv log.py /script/
[root@node1 pyscripts-master]# 
[root@node1 pyscripts-master]# cd /script/
[root@node1 script]# ll
total 8
-rwxr-xr-x 1 root root  136 Sep 26 15:00 jc.sh
-rw-r--r-- 1 root root 1854 Mar 22  2020 log.py
[root@node1 script]# 
[root@node1 script]# chmod +x log.py 
[root@node1 script]# ll
total 8
-rwxr-xr-x 1 root root  136 Sep 26 15:00 jc.sh
-rwxr-xr-x 1 root root 1854 Mar 22  2020 log.py
[root@node1 script]# 

删除pyscripts压缩包和文件

[root@node1 script]# cd
[root@node1 ~]# 
[root@node1 ~]# ls
anaconda-ks.cfg  pyscripts-master  pyscripts-master.zip  zabbix-6.4.6  zabbix-6.4.6.tar.gz
[root@node1 ~]# 
[root@node1 ~]# rm -rf pyscripts*
[root@node1 ~]# ls
anaconda-ks.cfg  zabbix-6.4.6  zabbix-6.4.6.tar.gz
[root@node1 ~]# 

在客户端安装python3工具

[root@node1 ~]# yum -y install python3
Last metadata expiration check: 2:25:07 ago on Tue 26 Sep 2023 02:02:02 PM CST.
Dependencies resolved.
...
Installed:
  python3-pip-9.0.3-20.el8.noarch    python3-setuptools-39.2.0-6.el8.noarch    python36-3.6.8-38.module_el8.5.0+895+a459eca8.x86_64   
Complete!
[root@node1 ~]# 

在tmp目录下创建一个日志文件,往里面随便加入内容

[root@node1 ~]# vi /tmp/test.log
[root@node1 ~]# cat /tmp/test.log 
adsfvwwvaa

bbvbdgbylk
Error
bgavduaygd
mndaubdiuw
[root@node1 ~]# 

执行脚本

[root@node1 ~]# python3 /script/log.py /tmp/test.log 
1
[root@node1 ~]# python3 /script/log.py /tmp/test.log 
0
[root@node1 ~]# 

显示为1说明检索到了日志文件中的Error关键字

显示为0是应为第二次检索的时候是从上一次检索的最后位置开始检索,由于没有检索到关键字Error就显示为0。

编辑zabbix_agentd.conf配置文件添加自定义监控项

[root@node1 ~]# vi /usr/local/etc/zabbix_agentd.conf
...
# ListenBacklog=
UserParameter=show_process[*],/bin/bash /script/jc.sh $1
UserParameter=check_logs[*],python3 /script/log.py $1 $2 $3                                                         
"/usr/local/etc/zabbix_agentd.conf" 550L, 17166C written
[root@node1 ~]#

重启zabbix_agentd服务,删除logseek文件

[root@node1 ~]# systemctl restart zabbix_agentd
[root@node1 ~]# ls /tmp/
logseek  testfile  test.log  vmware-root_938-2689078411  vmware-root_941-4022177618  zabbix_agentd.log  zabbix_agentd.pid
[root@node1 ~]# 
[root@node1 ~]# rm -f /tmp/logseek 
[root@node1 ~]# 
[root@node1 ~]# ls /tmp/           
testfile  test.log  vmware-root_938-2689078411  vmware-root_941-4022177618  zabbix_agentd.log  zabbix_agentd.pid
[root@node1 ~]# 

由于客户端logseek文件属主为zabbix,在服务端测试时要先将logseek文件删除,否则无法查看。

在服务端测试客户端test.log文件

[root@controller ~]# zabbix_get -s 192.168.200.20 -k check_logs['/tmp/test.log']  
1
[root@controller ~]# 

创建check logs of /tmp/test.log 监控项
在这里插入图片描述

name后面填写监控项名称
key后面选择监控类型
在这里插入图片描述

查看监控项
在这里插入图片描述

添加触发器
在这里插入图片描述

name后面填写触发报警后显示的内容
severity后面选择一个报警级别
点击add添加规则
在这里插入图片描述

Item后面点击select选择监控项目
设置result选择=1时触发报警
在这里插入图片描述

点击Add
在这里插入图片描述

查看触发器
在这里插入图片描述

手动触发并验证

[root@node1 ~]# echo "Error" >> /tmp/test.log        
[root@node1 ~]# 

成功触发报警
在这里插入图片描述

自定义监控mysql主从状态

先在node1和node2上部署主从数据库

详细部署操作请参考:mysql主从数据库

创建mysql_status.sh脚本,查看从数据库状态,出现两个yes表示从数据库状态正常

[root@node1 ~]# cd /script/
[root@node1 script]# ls
jc.sh  log.py
[root@node1 script]# 
[root@node1 script]# vi mysql_status.sh
[root@node1 script]# cat mysql_status.sh 
#!/bin/bash

mysql -e 'show slave status\G' | grep -i 'running:'
[root@node1 script]# 
[root@node1 script]# chmod +x mysql_status.sh 
[root@node1 script]# ./mysql_status.sh 
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
[root@node1 script]# 
[root@node1 script]# vi mysql_status.sh  
[root@node1 script]# cat mysql_status.sh 
#!/bin/bash

mysql -e 'show slave status\G' | grep -i 'running:' | grep -c 'Yes'
[root@node1 script]# 
[root@node1 script]# ./mysql_status.sh 
2
[root@node1 script]# 

修改mysql_status.sh脚本,添加条件变量

[root@node1 script]# vi mysql_status.sh 
[root@node1 script]# cat mysql_status.sh 
#!/bin/bash

count=$(mysql -uroot -p'redhat123' -e 'show slave status\G' | grep -i 'running:' | grep -c 'Yes')

if [ $count -ne 2 ];then
    echo "1"
else
    echo "0"
fi
[root@node1 script]# 
[root@node1 script]# ./mysql_status.sh 
1
[root@node1 script]# 

当变量count不等于2输出为1时说明从数据库状态异常,相反输出为0时说明状态正常

编辑zabbix_agentd.conf配置文件添加自定义监控项

[root@node1 script]# vi /usr/local/etc/zabbix_agentd.conf
...
# ListenBacklog=
UserParameter=show_process[*],/bin/bash /script/jc.sh $1
UserParameter=check_mysql_status,/bin/bash /script/mysql_status.sh
UserParameter=check_logs[*],python3 /script/log.py $1 $2 $3
"/usr/local/etc/zabbix_agentd.conf" 551L, 17233C written
[root@node1 script]# 
[root@node1 script]# systemctl restart zabbix_agentd
[root@node1 script]# ./mysql_status.sh 
0
[root@node1 script]# 

重启zabbix_agentd服务后,执行脚本输出显示为0说明从数据库状态正常

在服务端测试

[root@controller ~]# zabbix_get -s 192.168.200.20 -k check_mysql_status
0
[root@controller ~]# 

添加mysql状态监控项
在这里插入图片描述

name后面填写监控项名称
key后面选择监控类型
在这里插入图片描述点击Add

查看监控项
在这里插入图片描述

添加mysql触发器
在这里插入图片描述

name后面填写触发告警后显示的内容
severity后面选择一个告警级别
点击add添加规则
在这里插入图片描述

Item后面点击select选择监控项目
设置result选择=1时触发报警
在这里插入图片描述

点击Add
在这里插入图片描述

查看触发器
在这里插入图片描述
手动触发并验证
打开防火墙

[root@node2 ~]# systemctl start firewalld 
[root@node2 ~]# 

[root@node1 script]# mysql -uroot -predhat123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 47
...
MariaDB [(none)]> stop slave;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> 
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> 
MariaDB [(none)]> quit;
Bye
[root@node1 script]# 

成功触发报警
在这里插入图片描述

自定义监控mysql主从延迟

关闭防火墙服务,查看主从数据库延迟

[root@node2 ~]# systemctl stop firewalld
[root@node2 ~]# 
[root@node1 script]# mysql -uroot -predhat123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 59
...
MariaDB [(none)]> 
MariaDB [(none)]> show slave status \G
...
                Master_SSL_Key: 
         Seconds_Behind_Master: 201
 Master_SSL_Verify_Server_Cert: No
...
1 row in set (0.000 sec)
MariaDB [(none)]> 
MariaDB [(none)]> quit;
Bye
[root@node1 script]# 

创建mysql_delay.sh脚本,将Seconds_Behind_Master后面的值取出来

[root@node1 script]# vi mysql_delay.sh
[root@node1 script]# cat mysql_delay.sh 
#!/bin/bash

mysql -uroot -p'redhat123' -e 'show slave status\G' | grep 'Seconds_Behind_Master' | awk '{print $NF}'
[root@node1 script]# 
[root@node1 script]# ls
jc.sh  log.py  mysql_delay.sh  mysql_status.sh

给脚本加上执行权限,并运行脚本

[root@node1 script]# chmod +x mysql_delay.sh 
[root@node1 script]# 
[root@node1 script]# ll
total 16
-rwxr-xr-x 1 root root  136 Sep 26 15:00 jc.sh
-rwxr-xr-x 1 root root 1854 Mar 22  2020 log.py
-rwxr-xr-x 1 root root  116 Sep 26 19:46 mysql_delay.sh
-rwxr-xr-x 1 root root  171 Sep 26 18:13 mysql_status.sh
[root@node1 script]# 
[root@node1 script]# ./mysql_delay.sh 
201
[root@node1 script]# 

延迟成功取出

编辑zabbix_agentd.conf配置文件添加自定义监控项

[root@node1 script]# vi /usr/local/etc/zabbix_agentd.conf
...
# ListenBacklog=
UserParameter=show_process[*],/bin/bash /script/jc.sh $1
UserParameter=check_mysql_status,/bin/bash /script/mysql_status.sh
UserParameter=check_mysql_delay,/bin/bash /script/mysql_delay.sh
UserParameter=check_logs[*],python3 /script/log.py $1 $2 $3                 
"/usr/local/etc/zabbix_agentd.conf" 552L, 17298C written
[root@node1 script]#
[root@node1 script]# systemctl restart zabbix_agentd

重启zabbix_agentd服务

在服务端测试

[root@controller ~]# zabbix_get -s 192.168.200.20 -k check_mysql_delay
201
[root@controller ~]# 

添加mysql延迟监控项
在这里插入图片描述

name后面填写监控项名称
key后面选择监控类型
在这里插入图片描述点击Add

查看监控项
在这里插入图片描述

添加mysql触发器
在这里插入图片描述

name后面填写触发告警后显示的内容
severity后面选择一个告警级别
点击add添加规则
在这里插入图片描述

Item后面点击select选择监控项目
设置result选择>200时触发报警
在这里插入图片描述

点击Add
在这里插入图片描述

查看触发器
在这里插入图片描述

触发报警
在这里插入图片描述

要在Zabbix中监视MySQL主从状态,需要执行以下步骤: 1. 确保MySQL主从复制已正确配置并正在运行。可以通过在主服务器上运行SHOW MASTER STATUS; 和在从服务器上运行SHOW SLAVE STATUS; 来检查复制状态。 2. 在MySQL主服务器上创建一个具有适当权限的MySQL用户以供Zabbix使用。可以使用以下命令创建用户: CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password'; GRANT REPLICATION CLIENT ON *.* TO 'zabbix'@'localhost'; 3. 在Zabbix服务器上安装MySQL监视器模板。该模板包含用于监视MySQL服务器的预定义项和触发器。 4. 在Zabbix服务器上创建一个MySQL主服务器主机,将其与MySQL监视器模板关联,并配置主机的连接参数。这些参数应包括MySQL主服务器的IP地址、端口和上一步中创建的MySQL用户的凭据。 5. 在Zabbix服务器上创建一个MySQL从服务器主机,将其与MySQL监视器模板关联,并配置主机的连接参数。这些参数应包括MySQL从服务器的IP地址、端口和上一步中创建的MySQL用户的凭据。 6. 等待一段时间,以便Zabbix收集有关MySQL主从复制状态的数据。可以通过查看Zabbix监视器模板中的图形和报告来检查这些数据。 7. 如果需要,可以根据需要创建自定义Zabbix触发器,以便在MySQL主从复制状态出现问题时接收警报。 请注意,这只是一个基本的概述。实际的实施可能因环境和要求的不同而有所不同。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这linux不学也罢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值