返回列表 发帖

Zabbix调用Python3脚本监控Linux进程/内存使用率/分区使用率

笺注:
被监控主机的Agent的安装可参考 Zabbix使用Agent监控CentOS6/Redhat6
这是在 LNMP一键安装包(lamp_Apache2.4用户验证+phpMyAdmin) 的基础上进行的。



在被监控主机上创建脚本,监控Apache的进程httpd的运行状态:
[root@zabbix_client ~]# mkdir -p /etc/zabbix/scripts
[root@zabbix_client ~]#
[root@zabbix_client ~]# cd /etc/zabbix/scripts
[root@zabbix_client scripts]# cat check_process_httpd.py
#coding=utf-8
import os
def func1(process_name):
        Key_1 = 'ps -ef |grep ' + process_name + ' |grep -v grep'
        process = os.popen(Key_1).readlines()
        process_len = len(process)
        print(process_len)
       
if __name__ == "__main__":

        func1('httpd')


设置脚本权限:
[root@zabbix_client ~]# chmod a+x /etc/zabbix/scripts/check_process_httpd.py
[root@zabbix_client ~]#


测试脚本:
[root@zabbix_client ~]# service httpd stop
stop apache...  done
[root@zabbix_client ~]#
[root@zabbix_client ~]# python3 /etc/zabbix/scripts/check_process_httpd.py
1
[root@zabbix_client ~]#

[root@zabbix_client ~]# service httpd start
start apache...  done
[root@zabbix_client ~]#
[root@zabbix_client ~]# python3 /etc/zabbix/scripts/check_process_httpd.py
7
[root@zabbix_client ~]#



######

在被监控主机上创建脚本,监控MySQL的进程mysql的运行状态:
[root@zabbix_client ~]# cd /etc/zabbix/scripts
[root@zabbix_client scripts]# cat check_process_mysql.py
#coding=utf-8
import os
def func1(process_name):
        Key_1 = 'ps aux |grep ' + process_name + ' |grep -v grep'
        process = os.popen(Key_1).readlines()
        process_len = len(process)
        print(process_len)
       
if __name__ == "__main__":

        func1('mysql')


设置脚本权限:
[root@zabbix_client ~]# chmod a+x /etc/zabbix/scripts/check_process_mysql.py
[root@zabbix_client ~]#


测试脚本:
[root@zabbix_client ~]# service mysql stop
Shutting down MySQL... SUCCESS!
[root@zabbix_client ~]#
[root@zabbix_client ~]# python3 /etc/zabbix/scripts/check_process_mysql.py
1
[root@zabbix_client ~]#

[root@zabbix_client ~]# service mysql start
Starting MySQL.. SUCCESS!
[root@zabbix_client ~]#
[root@zabbix_client ~]# python3 /etc/zabbix/scripts/check_process_mysql.py
3
[root@zabbix_client ~]#





############

被监控主机安装第三方库(psutil),可参考 Linux使用第三方库psutil

列出当前环境所有已经安装的第三方库的名称和其版本号:
[root@zabbix_client ~]# pip3 freeze
psutil==5.7.3
[root@zabbix_client ~]#



监控CPU使用率:
[root@zabbix_client ~]# cd /etc/zabbix/scripts
[root@zabbix_client scripts]# cat check_CPU_utilization.py
#coding=utf-8
import psutil
def func1():
        CPU_utilization = psutil.cpu_percent(interval=2)
        print(CPU_utilization)
        #print(type(CPU_utilization)) #<class 'float'>
       
if __name__ == "__main__":

        func1()


设置脚本权限:
[root@zabbix_client ~]# chmod a+x /etc/zabbix/scripts/check_CPU_utilization.py
[root@zabbix_client ~]#

脚本运行的结果:
[root@zabbix_client ~]# python3 /etc/zabbix/scripts/check_CPU_utilization.py
0.5
[root@zabbix_client ~]#



######

监控内存使用率:
[root@zabbix_client ~]# cd /etc/zabbix/scripts
[root@zabbix_client scripts]# cat check_Mem_utilization.py
#coding=utf-8
import psutil
def func1():
        Mem_utilization = psutil.virtual_memory().percent
        print(Mem_utilization)
        #print(type(Mem_utilization)) #<class 'float'>
       
if __name__ == "__main__":

        func1()


设置脚本权限:
[root@zabbix_client ~]# chmod a+x /etc/zabbix/scripts/check_Mem_utilization.py
[root@zabbix_client ~]#

脚本运行的结果:
[root@zabbix_client ~]# python3 /etc/zabbix/scripts/check_Mem_utilization.py
33.1
[root@zabbix_client ~]#



######

监控分区/boot的使用率:
[root@zabbix_client ~]# cd /etc/zabbix/scripts
[root@zabbix_client scripts]# cat check_boot_utilization.py
#coding=utf-8
import psutil
def func1():
        boot_utilization = psutil.disk_usage("/boot")[3]
        print(boot_utilization)
        #print(type(boot_utilization)) #<class 'float'>
       
if __name__ == "__main__":

        func1()


设置脚本权限:
[root@zabbix_client ~]# chmod a+x /etc/zabbix/scripts/check_boot_utilization.py
[root@zabbix_client ~]#

脚本运行的结果:
[root@zabbix_client ~]# python3 /etc/zabbix/scripts/check_boot_utilization.py
7.5
[root@zabbix_client ~]#



######

监控根分区使用率:
[root@zabbix_client ~]# cd /etc/zabbix/scripts
[root@zabbix_client scripts]# cat check_Root_utilization.py
#coding=utf-8
import psutil
def func1():
        Root_utilization = psutil.disk_usage("/")[3]
        print(Root_utilization)
        #print(type(Root_utilization)) #<class 'float'>
       
if __name__ == "__main__":

        func1()


设置脚本权限:
[root@zabbix_client ~]# chmod a+x /etc/zabbix/scripts/check_Root_utilization.py
[root@zabbix_client ~]#

脚本运行的结果:
[root@zabbix_client ~]# python3 /etc/zabbix/scripts/check_Root_utilization.py
4.8
[root@zabbix_client ~]#



######

监控根分区空闲量:
[root@zabbix_client ~]# cd /etc/zabbix/scripts
[root@zabbix_client scripts]# cat check_Root_free.py
#coding=utf-8
import psutil
def func1():
        Root_free = psutil.disk_usage("/")[2]
        print(Root_free)
        #print(type(Root_free)) #<class 'int'>
       
if __name__ == "__main__":

        func1()


设置脚本权限:
[root@zabbix_client ~]# chmod a+x /etc/zabbix/scripts/check_Root_free.py
[root@zabbix_client ~]#

脚本运行的结果:
[root@zabbix_client ~]# python3 /etc/zabbix/scripts/check_Root_free.py
91121348608
[root@zabbix_client ~]#



############

修改被监控主机的Agent配置文件:
[root@zabbix_client ~]# vi /etc/zabbix/zabbix_agentd.conf

# UnsafeUserParameters=0
修改为:(启用该功能)
UnsafeUserParameters=1

接着插入:
UserParameter=check_process_httpd,/usr/bin/python3 /etc/zabbix/scripts/check_process_httpd.py

UserParameter=check_Mem_utilization,/usr/bin/python3 /etc/zabbix/scripts/check_Mem_utilization.py

UserParameter=check_Root_utilization,/usr/bin/python3 /etc/zabbix/scripts/check_Root_utilization.py

UserParameter=check_Root_free,/usr/bin/python3 /etc/zabbix/scripts/check_Root_free.py

如下图:
图片1.png


保存好配置文件后,重启zabbix-agent:
[root@zabbix_client ~]# service zabbix-agent restart
Shutting down Zabbix agent: [确定]
Starting Zabbix agent: [确定]
[root@zabbix_client ~]#





############

在Zabbix服务器测试,验证能否获取被监控主机(192.168.168.130)的键值:
[root@centos8 ~]# zabbix_get
-bash: zabbix_get: 未找到命令
[root@centos8 ~]#

[root@centos8 ~]# find / -name zabbix_get
/root/zabbix-4.4.5/src/zabbix_get
/root/zabbix-4.4.5/src/zabbix_get/zabbix_get
/usr/local/zabbix/bin/zabbix_get
[root@centos8 ~]#

做个软链接:
[root@centos8 ~]# ln -s /usr/local/zabbix/bin/zabbix_get /usr/sbin
[root@centos8 ~]#
[root@centos8 ~]# ll /usr/sbin/zabbix_get
lrwxrwxrwx 1 root root 32 9月  11 10:16 /usr/sbin/zabbix_get -> /usr/local/zabbix/bin/zabbix_get
[root@centos8 ~]#


[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.130 -k check_process_httpd
7
[root@centos8 ~]#

[root@centos8 ~]# zabbix_get -s 192.168.168.130 -k check_process_httpd
7
[root@centos8 ~]#


[root@centos8 ~]# zabbix_get -s 192.168.168.130 -k check_Mem_utilization
30.0
[root@centos8 ~]#

[root@centos8 ~]# zabbix_get -s 192.168.168.130 -k check_Root_utilization
4.8
[root@centos8 ~]#

[root@centos8 ~]# zabbix_get -s 192.168.168.130 -k check_Root_free
91121348608
[root@centos8 ~]#



##################Zabbix添加被监控主机:

配置》主机》创建主机:(主机名称无需与被监控主机的真实主机名一致;群组可以随便选;IP地址那里要输入被监控主机的IP地址;端口为10050)
图片2.png
注释:
使用agent代理程序的接口。
使用 TCP 10050 端口。


主机Linux_server_1添加成功:(主机可以不用模板的)
图片3.png



######

给“Apache的进程httpd的运行状态”创建监控项:
自定义名称: httpd is running
键值: check_process_httpd
信息类型: 数字(无正负)
图片4.png
备注:其他地方保持默认,点击底下的“添加”按键。



给“内存使用率”创建监控项:
自定义名称: New Mem utilization
键值: check_Mem_utilization
信息类型: 浮点数
单位: %
图片5.png
备注:其他地方保持默认,点击底下的“添加”按键。



给“根分区使用率”创建监控项:
自定义名称: New Root utilization
键值: check_Root_utilization
信息类型: 浮点数
单位: %
图片6.png
备注:其他地方保持默认,点击底下的“添加”按键。



给“根分区空闲量”创建监控项:
自定义名称: New Root free
键值: check_Root_free
信息类型: 数字(无正负)
单位: B
图片7.png
备注:
使用单位“B”时,结果在单位换算时会每超过1024就除以1024,保留两位小数,是四舍五入;



######

给监控项“httpd is running”创建图形:
图片8.png
监控项:
图片9.png



给监控项“New Mem utilization”创建图形:
图片10.png
监控项:
图片11.png



给监控项“New Root utilization”创建图形:
图片12.png
监控项:
图片13.png



给监控项“New Root free”创建图形:
图片14.png
监控项:
图片15.png



######

查看图形:

监测》图形:
图片16.png

图片17.png

图片18.png


图片19.png

图片20.png

图片21.png


图片22.png

图片23.png

图片24.png


图片25.png

图片26.png

图片27.png





############

给监控项“httpd is running”创建触发器:(返回值小于或等于1就告警)
自定义名称: httpd is down.
严重性: 警告
图片28.png

插入表达式:(监控项: Linux_server_1: httpd is running
图片29.png

自动生成的表达式:(触发器的表达式要用到监控项中的键值)
{Linux_server_1:check_process_httpd.last()}<=1
图片30.png

本页拖下去:
图片31.png



给监控项“httpd is running”添加了触发器“httpd is down.”后,对应图形“httpd is running image”会自动发生改变:(多了一条告警线,多了一个触发器)
图片32.png



测试触发器“httpd is down.”:

被监控主机:
[root@zabbix_client ~]# service httpd stop
stop apache...  done
[root@zabbix_client ~]#


在被监控主机上本地测试:
[root@zabbix_client ~]# python3 /etc/zabbix/scripts/check_process_httpd.py
1
[root@zabbix_client ~]#


在Zabbix服务器上远程测试:
[root@centos8 ~]# zabbix_get -s 192.168.168.130 -k check_process_httpd
1
[root@centos8 ~]#


监控项“httpd is running”的返回值小于或等于1时,仪表板会如下图显示:(显示对应触发器的名称)
httpd is down.
图片33.png

图片34.png


对应图形“httpd is running image”会自动发生改变:
图片35.png
注释:图形中的数据线是从右往左延伸的。

图片36.png
注释:“最新”值小于或等于1



被监控主机:
[root@zabbix_client ~]# service httpd start
start apache...  done
[root@zabbix_client ~]#


在被监控主机上本地测试:
[root@zabbix_client ~]# python3 /etc/zabbix/scripts/check_process_httpd.py
7
[root@zabbix_client ~]#


在Zabbix服务器上远程测试:
[root@centos8 ~]# zabbix_get -s 192.168.168.130 -k check_process_httpd
7
[root@centos8 ~]#


仪表板的告警自动消失:
图片38.png


图形“httpd is running image”也会自动发生改变:
图片39.png
注释:图形中的数据线是从右往左延伸的。

图片40.png
注释:“最新”值大于1





############

给根分区使用率创建触发器:(返回值大于6就告警)
自定义名称: One Root utilization is bigger than 6%
严重性: 一般严重
表达式: {Linux_server_1:check_Root_utilization.last()}>6
图片41.png
注释:触发器的表达式要用到监控项中的键值。


######

给根分区使用率创建触发器:(持续5分钟,返回值大于6就告警)
自定义名称: Two Root utilization is bigger than 6% for 5m
严重性: 严重
表达式: {Linux_server_1:check_Root_utilization.min(5m)}>6
图片42.png
注释:
min(5m) 即持续5分钟



给监控项“New Root utilization”添加了触发器“One Root utilization is bigger than 6%”、“Two Root utilization is bigger than 6% for 5m”后,对应图形“New Root utilization image”会自动发生改变:
图片43.png



监控项“New Root utilization”的返回值大于6时,仪表板会如下图显示:(显示对应触发器的名称)
图片44.png

图片45.png
注释:
触发器“One Root utilization is bigger than 6%”会马上告警;
触发器“Two Root utilization is bigger than 6% for 5m”会在持续5分钟后再告警;



对应图形“New Root utilization image”也会自动发生改变:
图片46.png

图片47.png





相关文章:
Zabbix调用Python3脚本监控MySQL主从同步状态
Zabbix创建模板监控Windows下的MariaDB

返回列表