示例:监控httpd进程
[root@136 ~]# vim /usr/local/etc/zabbix_agentd.conf
UnsafeUserParameters=1 取消注释,并将0改成1
UserParameter=, 配置文件最后添加此行
#key是要和web界面的监控项的key是一致的,shell comand是取出监控的指标
[root@136 ~]# cd /scripts/
[root@136 scripts]# touch check_process.sh
[root@136 scripts]# chmod +x check_process.sh
[root@136 scripts]# vim check_process.sh
#!/bin/bash
count=$(ps -ef|grep -Ev "grep|$0"|grep $1|wc -l)
if [ $count -eq 0 ];then
echo '1'
else
echo '0'
fi
[root@136 scripts]# ss -antl 此时httpd和vsftpd服务已经起来了
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 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 32 *:21 *:*
LISTEN 0 128 [::]:22 [::]:*
[root@136 scripts]# ./check_process.sh vsftpd 结果为0表示正常运行
0
[root@136 scripts]# ./check_process.sh httpd123 结果为1表示有问题
1
[root@136 scripts]# ./check_process.sh httpd
0
[root@136 ~]# vim /usr/local/etc/zabbix_agentd.conf
UserParameter=check_process[*],/bin/bash /scripts/check_process.sh $1 选择要监控的脚本,后面用$1是因为当要监控多个服务时不需要写多个脚本,只需要在web界面添加要监控的东西
[root@136 ~]# pkill zabbix
[root@136 ~]# 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 128 *:80 *:*
LISTEN 0 32 *:21 *:*
LISTEN 0 128 [::]:22 [::]:*
[root@136 ~]# zabbix_agentd
[root@136 ~]# 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 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 32 *:21 *:*
LISTEN 0 128 [::]:22 [::]:*
[root@136 ~]# chown -R zabbix.zabbix /scripts/
[root@136 ~]# ll /scripts/
total 8
-rwxr-xr-x 1 zabbix zabbix 119 Nov 7 09:34 chech_procrss.sh
-rwxr-xr-x 1 zabbix zabbix 121 Nov 9 14:28 check_process.sh
#客户端httpd服务已经启动
[root@136 ~]# 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 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 32 *:21 *:*
LISTEN 0 128 [::]:22 [::]:*
#在服务端监控到客户端的httpd服务显示为0则没问题
[root@zabbix ~]# zabbix_get -s 192.168.50.136 -k check_process[httpd]
0
客户端关闭httpd服务
[root@136 ~]# apachectl stop
[root@136 ~]# 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 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 32 *:21 *:*
LISTEN 0 128 [::]:22 [::]:*
在客户端开启自定义监控功能
创建脚本文件 监控日志的脚本
[root@136 scripts]# ls
chech_procrss.sh check_process.sh log.py 把这个脚本文件弄到该目录下
#弄一个python
[root@136 scripts]# pyvenv-3.6 /usr/local/python36
WARNING: the pyenv script is deprecated in favour of `platform-python -m venv`
[root@136 scripts]# cd /usr/local/python36/bin/
[root@136 bin]# ls
activate easy_install pip3 python
activate.csh easy_install-3.6 pip3.6 python3
activate.fish pip platform-python
[root@136 bin]# vim /usr/local/etc/zabbix_agentd.conf
UserParameter=check_log[*],/usr/local/python36/bin/python3 /scripts/log.py $1 $2 $3 添加此行
[root@136 bin]# pkill zabbix
[root@136 bin]# zabbix_agentd
[root@136 ~]# setfacl -m u:zabbix:rx /var/log/httpd
[root@136 ~]# getfacl /var/log/httpd
getfacl: Removing leading '/' from absolute path names
# file: var/log/httpd
# owner: root
# group: root
user::rwx
user:zabbix:r-x
group::---
mask::r-x
other::---
#客户端追加错误参数
[root@136 log]# echo 'failed' >> httpd/error_log
[root@136 log]# echo 'nzckzn' >> httpd/error_log
[root@136 log]# echo 'nxckj' >> httpd/error_log
#服务端测试1表示有错误,0表示正常
[root@zabbix ~]# zabbix_get -s 192.168.50.136 -k check_log[/var/log/httpd/error_log,/tmp/position,failed] #第一个为监控哪个文件;第二个为记录错误的文件放到哪去,这里最终会生成并放到position里;第三个参数为定义一个关键字,只有添加关键词才会有警告
1
#测试
[root@136 ~]# cat /tmp/position
4003[root@136 ~]# cat /tmp/position
4023[root@136 ~]#
客户端触发
[root@136 log]# echo 'error' >> httpd/error_log
服务端显示为1,可以触发警告
[root@zabbix ~]# zabbix_get -s 192.168.50.136 -k check_log[/var/log/httpd/error_log,/tmp/seek,error]
1
环境说明:
环境 | IP | 要安装的应用 |
---|---|---|
zabbix服务端 | 192.168.50.138 | lamp架构 zabbix server zabbix agent |
主 | 192.168.50.136 | mariadb* |
从 | 192.168.50.132 | mariadb* agentd |
创建用户
[root@slave ~]# useradd -r -M -s /sbin/nologin zabbix
[root@slave ~]# ls
anaconda-ks.cfg zabbix-5.2.0.tar.gz
[root@slave ~]# tar xf zabbix-5.2.0.tar.gz
[root@slave ~]# cd zabbix-5.2.0
安装编译安装软件
[root@slave zabbix-5.2.0]# yum -y install gcc gcc-c++ make
[root@slave zabbix-5.2.0]# yum -y install pcre-devel
编译安装
[root@slave zabbix-5.2.0]# ./configure --enable-agent
[root@slave zabbix-5.2.0]# make install
修改配置文件
[root@slave zabbix-5.2.0]# cd /usr/local/etc
[root@slave etc]# ls
zabbix_agentd.conf zabbix_agentd.conf.d
[root@slave etc]# vim zabbix_agentd.conf
Server=192.168.50.138 都写zabbix服务端ip
ServerActive=192.168.50.138
Hostname=mysql_slave1 命名mysql服务端主机名
启动
[root@slave etc]# zabbix_agentd
[root@slave etc]# 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 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@slave ~]# mkdir /scripts
[root@slave ~]# cd /scripts/
[root@slave scripts]# vim mysql_msstatus.sh
#!/bin/bash
yes_count=$(mysql -e 'show slave status\G'|grep -E 'IO_Running:|SQL_Running:'|grep -c 'Yes')
if [ $yes_count -ne 2 ];then
echo '1'
else
echo '0'
fi
给脚本执行权限
[root@slave scripts]# chmod +x mysql_msstatus.sh
修改目录属主属组
[root@slave ~]# chown -R zabbix.zabbix /scripts/
[root@slave ~]# ll /scripts/
total 4
-rwxr-xr-x. 1 zabbix zabbix 172 Nov 10 10:50 mysql_msstatus.sh
在从主机里进入mysl停掉服务
MariaDB [(none)]> stop slave;
Query OK, 0 rows affected (0.003 sec)
在从主机上执行脚本结果为1
[root@slave scripts]# ./mysql_msstatus.sh
1
在从主机里进入mysql开启服务
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.001 sec)
在从主机上执行脚本结果为0
[root@slave scripts]# ./mysql_msstatus.sh
0
[root@slave ~]# vim /usr/local/etc/zabbix_agentd.conf
UnsafeUserParameters=1 取消注释,并将0改为1
UserParameter=show_master_slave_status,/bin/bash /scripts/mysql_msstatus.sh 第一个地段为名字,可以自己命名,第二个字段为路径脚本
[root@slave ~]# pkill zabbix
[root@slave ~]# zabbix_agentd
[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 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
在从主机上停掉
MariaDB [(none)]> stop slave;
Query OK, 0 rows affected (0.001 sec)
在zabbix服务端查看结果为1
[root@zabbix ~]# zabbix_get -s 192.168.50.132 -k show_master_slave_status
1
在从主机上开启
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.001 sec)
在zabbix服务端查看结果为0
[root@zabbix ~]# zabbix_get -s 192.168.50.132 -k show_master_slave_status
0
在主主机上停掉,那么从主机就连不上只会显示一个yes,所以zabbix服务端那边就结果为1
[root@master ~]# systemctl stop mariadb
[root@master ~]# 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 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 32 *:21 *:*
LISTEN 0 128 [::]:22 [::]:*
从主机上查看Slave_IO_Running连不上
MariaDB [(none)]> show slave status\G
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
在zabbix上查看为1
[root@zabbix ~]# zabbix_get -s 192.168.50.132 -k show_master_slave_status
1
停掉主主机的服务
[root@master ~]# systemctl stop mariadb
[root@master ~]# 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 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 32 *:21 *:*
LISTEN 0 128 [::]:22 [::]:*
或者停掉从主机的服务
MariaDB [(none)]> stop slave;
Query OK, 0 rows affected (0.001 sec)
zabbix服务端结果显示为1
[root@zabbix ~]# zabbix_get -s 192.168.50.132 -k show_master_slave_status
1
[root@slave ~]# cd /scripts/
[root@slave scripts]# ls
mysql_msstatus.sh
[root@slave scripts]# vim mysql_delay.sh
#!/bin/bash
delay=$(mysql -e 'show slave status\G'|grep 'Seconds_Behind_Master'|awk '{print $2}')
echo $delay
[root@slave scripts]# chmod +x mysql_delay.sh
[root@slave scripts]# ll
total 8
-rwxr-xr-x. 1 root root 111 Nov 10 13:46 mysql_delay.sh
-rwxr-xr-x. 1 zabbix zabbix 172 Nov 10 10:50 mysql_msstatus.sh
[root@slave scripts]# ./mysql_delay.sh
0
[root@slave scripts]# vim /usr/local/etc/zabbix_agentd.conf
UserParameter=show_mysql_delay,/bin/bash /scripts/mysql_delay.sh
[root@slave scripts]# pkill zabbix
[root@slave scripts]# zabbix_agentd
[root@zabbix ~]# zabbix_get -s 192.168.50.132 -k show_mysql_delay
0
[root@zabbix ~]# zabbix_get -s 192.168.50.132 -k show_mysql_delay
0