0
点赞
收藏
分享

微信扫一扫

zabbix整合supervisorctl status进程状态监控

需求背景:

后台那边反馈数据上报有点问题,经过排查发现是跑数据的进程挂掉了,跑数据的php进程使用supervisor管控的

zabbix整合supervisorctl status进程状态监控_配置文件

虽然我们在supervisor配置中配置了autorestart=true,能自动重启,但是启动失败重试次数默认是3次,3次后没有成功supervisor 进程状态转成失败退出状态。

因此后台那边要求我们能监控supervisor进程状态并且如果supervisor状态如果是失败退出状态的话能通知到人,或者当检测到supervisor进程状态如果有失败状态的话能重新启动成功,这里我选择第一种方案,做supervisortcl status进程状态监控,将其整合到zabbix上。


思路:

了解到supervisord失败状态有BACKOFF,EXITED ,FATAL这几种状态那么我需要执行shell命令supervisorctl status |grep 进程名字 |awk -F '{print $2}'获取到状态,然后判断该状态如果是BACKOFF,EXITED ,FATAL其中一个的话那么就报警,否则认为改进程是正常状态,也就说认为STOPPED也是正常状态,因为这算是正常的关闭状态,具体场景可以根据要求灵活去判定状态


实施步骤:

在zabbix agent端上操作

1,在zabbix agent配置文件末尾加上UnsafeUserParameters=1

这个配置项允许zabbix agent执行用户定义的自定义参数

2,编写zabbix agent子配置文件

因为我在zabbix agent配置文件上有填写Include=/etc/zabbix/zabbix_agentd.d/

加载子配置文件选项,那么进入/etc/zabbix/zabbix_agentd.d/这个目录

填写子配置文件xxx.conf

UserParameter=check_process_status[*],sudo /usr/bin/python3 /etc/zabbix/scripts/check_process.py $1

3,创建自定义脚本文件

进入/etc/zabbix/scripts/目录,如果没有就创建,然后填写check_process.py的内容

# -*- coding:UTF-8 -*-
import os
import  time
import sys
import subprocess

def check(proc):
    proc_state1 = os.popen("sudo /usr/bin/supervisorctl status | grep -w %s |awk  '{print $2}'"% proc).read().strip()
    time.sleep(1)
    proc_state2=os.popen("sudo /usr/bin/supervisorctl status | grep -w %s |awk  '{print $2}'"% proc).read().strip()
    if (proc_state1 in ("EXITED", "FATAL", "BACKOFF") and proc_state2 in ("EXITED", "FATAL", "BACKOFF")):
        return 0
    else:
        return 1
p = sys.argv[1]
print(check(p))

可以看到这里通过执行sudo /usr/bin/supervisorctl status |grep "进程名"来获取进程状态的

为什么需要sudo权限呢?

因为我的supervisord使用root用户启动的,而这个自定义脚本是通过zabbix-agent执行的,zabbix-agent是zabbix用户启动,如果不添加sudo权限,这个命令是无法执行,会报如下错误:

zabbix整合supervisorctl status进程状态监控_zabbix_02

要让zabbix用户能够执行sudo命令,需要在sudoers文件中添加一行配置

zabbix ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl status

确保路径'/usr/bin/supervisorctl'与实际的supervisorctl可执行文件路径匹配.


给check_process.py这个文件赋予执行权限

chmod +x check_process.py


4,重启zabbix agent服务使子配置服务生效

systemctl restart zabbix-agent



在zabbix Server端上操作

测试客户端自定义监控项是否生效

zabbix_get -s zabbix客户端ip  -p 10050 -k check_process_status[进程名]

zabbix整合supervisorctl status进程状态监控_supervisor_03

值1代表进程状态正常,0代表进程状态异常。


在zabbix web页面上为监控主机添加监控项和触发器

zabbix整合supervisorctl status进程状态监控_配置文件_04


zabbix整合supervisorctl status进程状态监控_zabbix_05

接下来就是配置报警媒介,媒介关联到用户,配置动作触发器中加入配置这个就不细说了

举报

相关推荐

0 条评论