在zabbix上面自定义监控

在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创建监控项和触发器

创建监控项

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

创建触发器

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值