在zabbix上面自定义监控
文章目录
环境:
zabbix服务端 | 192.168.227.133 |
---|---|
zabbix客户端和MySQL从端 | 192.168.227.134 |
MySQL主端 | 192.168.227.137 |
1.自定义监控进程(也就是用zabbix监控服务,要是服务停止就报警)
第一步开启自定义监控:
在客户端开启
#192.168.227.134
#进入配置文件
[root@client tmp]# cd /usr/local/etc/
[root@client etc]# vim zabbix_agentd.conf
....省略....
UnsafeUserParameters=1
....省略....
#开启postfix服务用来监控
[root@client ~]# yum -y install postfix
[root@client ~]# systemctl start postfix
#开启之后创建一个目录来存放脚本,并创建脚本
[root@client ~]# mkdir /script
[root@client ~]# cd /script/
[root@client script]# vim showprocess.sh
#创建一个脚本$1是我要判断的服务名称,看服务名称存不存在,存在就为1,不存在就为0
[root@client script]# cat showprocess.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
#测试postfix服务开启的就等于0,httpd服务没有开启就等于0
[root@client script]# ./showprocess.sh postfix
0
[root@client script]# ./showprocess.sh httpd
1
[root@client script]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 127.0.0.1:25 0.0.0.0:*
LISTEN 0 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
#修改192.168.227.134的配置文件编写key
[root@client script]# cd /usr/local/etc/
[root@client etc]# ls
zabbix_agentd.conf zabbix_agentd.conf.d
#key等于show_process[*],调用脚本的,$1,是要查看运行的服务名称
[root@client etc]# vim zabbix_agentd.conf
UserParameter=show_process[*],/bin/bash /script/showprocess.sh $1
#重启服务
[root@client etc]# systemctl restart zabbix_agentd.service
192.168.227.133 服务机测试,等于0在运行,等于1停止状态
# -s [客户机的ip]
-k [key的名称] ['要传递给$1的值']
[root@service tmp]# zabbix_get -s 192.168.227.134 -k show_process['httpd']
1
[root@service tmp]# zabbix_get -s 192.168.227.134 -k show_process['postfix']
0
能获取到值,下一步开始创建监控项和触发器!!!
能获取到值,下一步开始创建监控项和触发器!!!
进入网页
触发器:
测试停止客户机上面的postfix看是否会报警
#192.168.227.134
[root@client etc]# systemctl stop postfix.service
查看报警消息:
查看邮箱报警:
报警成功!!!
2.自定义监控日志文件(要是日志文件里面有报错就好报警,就是查看你监控的日志文件里面有没有Errot这个关键字)
已经编写好了,脚本:网站网站:https://github.com/chendao2015/pyscripts
#192.168.227.134客户端
#下载下来上传到主机的服务器上面
[root@client ~]# ls
pyscripts-master.zip
#解压脚本
[root@client ~]# yum -y install unzip
[root@client ~]# 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@client ~]# cd pyscripts-master/
[root@client pyscripts-master]# ls
dmp4.py log.py mail_send.py README.md 定时发微信群消息.zip
#把脚本复制到脚本目录里面去
[root@client pyscripts-master]# cp log.py /script/
[root@client script]# chmod +x log.py
#安装python的脚本,运行脚本
[root@client script]# yum -y install python3
#手动创建一个日志文件,测试他是否可以监控成功
[root@client ~]# vim /tmp/test.log
[root@client ~]# cat /tmp/test.log
wdasd
wdasd
wd
asd
w
das
d
wdas
Error
jjyy
#调用python来test.log这个脚本进行查看,第一次为1证明检查到了Error错误,第二次检查是在上一次检查的位置后面,进行检查看有没有Error,有就报1,表示错误,没有就报0,表示正确。
#第一次检查有Error就报错1,第二次在第一次的检查到的位置后面检查发现没有Error就不报错
[root@client ~]# python3 /script/log.py /tmp/test.log
1
[root@client ~]# python3 /script/log.py /tmp/test.log
0
#这个文件里面记录了上一次读到的位置,下一次会往下面读
[root@client ~]# cat /tmp/logseek
43
#测试查看日志文件里面有没有failed,有failed就报1错误,没有就报0
#删除上一次读取的记录
[root@client ~]# rm -f /tmp/logseek
#/tmp/test.log这个文件里面没有failed就是0正确的
/tmp/test.log 为$1,就是要检查的日志文件
/tmp/logseek 为$2,就是记录上一次查询的位置
failed 为$3,就是你需要查询的关键字,有他就报错
[root@client ~]# python3 /script/log.py /tmp/test.log /tmp/logseek failed
0
[root@client ~]# cat /tmp/logseek
43[root@client ~]#
开始修改配置文件,然后去网页添加监控项和触发器
#192.168.227.134客户端
#删除刚刚的测试文件,让他重新读取
[root@client ~]# rm -f /tmp/logseek
#添加key
[root@client etc]# vim /usr/local/etc/zabbix_agentd.conf
UserParameter=check_logs[*],python3 /script/log.py $1 $2 $3
#重启服务
[root@client etc]# systemctl restart zabbix_agentd.service
#192.168.227.133服务端
#检查一下看能否使用
[root@service pyscripts-master]# zabbix_get -s 192.168.227.134 -k check_logs['/tmp/test.log']
1
#检查成功1表示这个日志文件里面有Error这个错误
进入网页开始配置监控项和触发器
触发器:
手动触发,往日志文件里面追加一个Error
[root@client tmp]# echo 'Error' >> /tmp/test.log
1.报警成功
2.邮箱发送成功
3.自定义监控MySQL主从状态(就是看是否显示两个yes)
环境:
zabbix服务端 | 192.168.227.133 |
---|---|
zabbix客户端和MySQL从端 | 192.168.227.134 |
MySQL主端 | 192.168.227.137 |
3.1 mysql安装
分别在主从两台服务器上安装mysql-5.7
版本,此处略过安装步骤,若有疑问请参考《mysql基础》与《mysql进阶》两篇文章。
我这里使用的mariadb来代替使用
3.2 mysql主从配置
#在配置之前一定要关闭防火墙和selinux
[root@master etc]# systemctl stop firewalld.service
[root@master etc]# setenforce 0
#安装服务
[root@master ~]# yum -y install mariadb*
#开启服务
[root@master ~]# systemctl start mariadb.service
设置密码:
[root@fw ~]# mysql -e "set password = password('123456')"
//先查看主库有哪些库
主:
[root@master ~]# mysql -uroot -p123456 -e 'show databases;'
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
备:
[root@slave ~]# mysql -uroot -p123456 -e 'show databases;'
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
#我这边主备数据一样,可以直接进行主从的配置,如果数据不一样需要先进行全备在,进行主从的配置
3.2.2 在主数据库里创建一个同步账号授权给从数据库使用
MariaDB [(none)]> CREATE USER 'dd'@'192.168.227.134' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'dd'@'192.168.227.134';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> flush privileges; #刷新权限
Query OK, 0 rows affected (0.000 sec)
3.2.3 配置主数据库
mysql的配置文件在/etc/my.cnf
mariadb的配置文件在/etc/my.cnf.d/mariadb-server.cnf
修改配置文件:
[root@kh2 etc]# vim /etc/my.cnf.d/mariadb-server.cnf
//在[mysqld]这段的后面加上如下内容
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
log-bin=mysql-bin //启用binlog日志
server-id=10 //数据库服务器唯一标识符,主库的server-id值必须比从库的小,一般我们用10
重启服务:
[root@kh2 etc]# systemctl restart mariadb.service
#开启日志功能,和在/var/lib/mysql/生产一个mysql-bin.000001的文件,用来存放日志
[root@kh2 etc]# ls /var/lib/mysql/
aria_log.00000001 ib_logfile1 mysql-bin.index
aria_log_control ibtmp1 mysql.sock
ib_buffer_pool multi-master.info mysql_upgrade_info
ibdata1 mysql performance_schema
ib_logfile0 mysql-bin.000001
//查看主库的状态
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 328 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
我们数据最新的位置在328,数据同步要从328开始
3.2.4 配置从数据库
[root@slave ~]# vim /etc/my.cnf.d/mariadb-server.cnf
添加数据
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
server-id=20 //设置从库的唯一标识符,从库的server-id值必须大于主库的该值
relay-log=mysql-relay-bin //启用中继日志relay-log
//重启从库的mysql服务
[root@slave ~]# systemctl restart mariadb.service
[root@slave ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 80 0.0.0.0:3306 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
//配置并启动主从复制
MariaDB [(none)]> change master to
-> master_host='192.168.227.137', #主的ip地址
-> master_user='dd', #创建的用户名
-> master_password='123456', #创建的密码
-> master_log_file='mysql-bin.000001', #日志文件
-> master_log_pos=328; #数据的最新位置
Query OK, 0 rows affected (0.016 sec)
MariaDB [(none)]> start slave; #开启奴隶模式
Query OK, 0 rows affected (0.001 sec)
//查看从服务器状态
MariaDB [(none)]> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.227.133
Master_User: dd
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 328
Relay_Log_File: mysql-relay-bin.000004
Relay_Log_Pos: 627
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes //此处必须为Yes
Slave_SQL_Running: Yes //此处必须为Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
3.2.5 测试验证
在主服务器的上创建sjk的库
MariaDB [(none)]> create database sjk;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sjk |
+--------------------+
4 rows in set (0.001 sec)
在从数据库中查看数据是否同步:
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sjk |
+--------------------+
4 rows in set (0.001 sec)
同步成功!!!
3.3开始监控MySQL主从状态
编写获取值的脚本
###192.168.227.134:
#这条命令是获取MySQL里面yes的值,有两个yes表示主从状态正常。
[root@client script]# mysql -uroot -p123456 -e 'show slave status\G' | grep 'Running:' | grep -c 'Yes'
2
#编写脚本,把上面那条命令的值赋予count,判断count,的值要是不等于2就报错结果就为1,否则就等于2,结果就是0。
[root@client script]# vim /script/mysql.sh
[root@client script]# cat /script/mysql.sh
#!/bin/bash
count=$(mysql -uroot -p123456 -e 'show slave status\G' | grep 'Running:' | grep -c 'Yes')
if [ $count -ne 2 ];then
echo '1'
else
echo '0'
fi
#编写配置文件
[root@client script]# vim /usr/local/etc/zabbix_agentd.conf
#key的值为check_mysql_status,配置报警的值是从/script/mysql.sh脚本来的
UserParameter=check_mysql_status,/bin/bash /script/mysql.sh
#重启服务
[root@client script]# systemctl restart zabbix_agentd.service
###192.168.227.133:
#在zabbix服务端上面测试是否可以获取到值,有两个yes所有是正确的取到的值为0。
[root@service pyscripts-master]# zabbix_get -s 192.168.227.134 -k check_mysql_status
0
#可以取到值就可以开始配置监控项和触发器了
监控项:
触发器:
触发看是否报警
192.168.227.137:
#msyql主上面开启防火墙
[root@node01 ~]# systemctl start firewalld.service #开启防火墙
#192.168.227.134:
mysql从上面测试:
[root@client script]# mysql -uroot -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 43
Server version: 10.3.28-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> stop slave; #关闭奴隶模式
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> start slave; #开启奴隶模式
Query OK, 0 rows affected (0.000 sec)
告警成功!!!
告警邮件成功!!!
4.自定义监控MySQL主从的延迟状态(延迟高于200就报警)
4.1我们要把之前开启的防火墙,关闭,并重启奴隶模式
#192.168.227.137
[root@node01 ~]# systemctl stop firewalld.service
#192.168.227.134
[root@client script]# mysql -uroot -p123456
MariaDB [(none)]> stop slave;
Query OK, 0 rows affected, 1 warning (0.000 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.001 sec)
4.2获取mysql延迟的值,看的是show slave status\G;中Seconds_Behind_Master:的值
编写获取show slave status\G;
中Seconds_Behind_Master:的值的脚本
#取出延迟的值,写入脚本里面
[root@client script]# mysql -uroot -p123456 -e 'show slave status\G' | grep 'Seconds_Behind_Master'
Seconds_Behind_Master: 0
[root@client script]# mysql -uroot -p123456 -e 'show slave status\G' | grep 'Seconds_Behind_Master' | awk '{print $NF}'
0
#编写脚本
[root@client script]# vim /script/mysql_delay.sh
[root@client script]# cat /script/mysql_delay.sh
#!/bin/bash
mysql -uroot -p123456 -e 'show slave status\G' | grep 'Seconds_Behind_Master:' | awk '{print $NF}'
[root@client script]# ./mysql_delay.sh
0
4.3编辑被监控端的配置文件
#192.168.227.134:
//创建自定义监控任务
[root@centos2 etc]# vim /usr/local/etc/zabbix_agentd.conf
[root@centos2 etc]# tail -1 zabbix_agentd.conf
UserParameter=check_mysql_delay,/bin/bash /script/mysql_delay.sh
//修改配置文件后需重启服务,重新读取配置文件
[root@centos2 etc]# systemctl restart zabbix_agentd.service
#192.168.227.133:
//创建自定义监控任务后,我们需要在server端测试一下是否能够接收到被监控端的值
[root@client ~]# zabbix_get -s 192.168.195.137 -k check_mysql_delay
0
4.4创建监控项和触发器
创建监控项
创建触发器