python如何监控程序运行状态_Python监控进程状态并实现告警

公司的应用程序有时候会莫名其妙地挂掉,如果我们经常去登录服务器看是不是程序挂了,挂了再拉起,那样是非常耗时和麻烦的事情。

后来我们通过使用 supervisor 去守护启动,实现方法如下:

那什么是 supervisor了?

Supervisor是用 Python 开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便地监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,或者是意外被停止(系统负载过高,cpu占用率很高等),supervisor 监听到进程死后,会自动将它重新拉起来,很方便地做到进程自动恢复的功能,不再需要自己写shell脚本来控制。一般情况下,yum直接安装即可。yum install supervisor

首先我们需要首先注意的一个地方是配置文件的后缀。

vim /etc/supervisord.conf

[include]

files = supervisord.d/*.ini

如果你想配置文件为其他格式,比如 conf 格式的话, 需要更改 iles = supervisord.d/*.conf 。

比如我们需要守护启动一个进程,我们就以守护Prometheus 为例:

vim /etc/supervisord.d/proms.ini

[program:proms]

command=/opt/prometheus/server/prometheus/prometheus

directory=/opt/prometheus/server/prometheus

stdout_logfile=/home/data/logs/prometheus/sever.log

autostart=true

autorestart=true

redirect_stderr=true

user=root

startsecs=3

supervisor配置文件详解:

program: 指定的守护进程名

command: 命令

stdout_logfile: 日志路径

autostart: supervisor启动的时候是否随着同时启动,默认为 true

autorestart: 是否挂了自动重启

redirect_stderr:标准错误重定向

startsecs: 子进程启动多少秒之后,此时的状态是running

启动supervisor--(yum方式安装的)

/usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf

或者

systemctl start supervisord.service

因此 我们可以使用如下的命令进行进程的停止,启动,重启等操作。

supervisorctl status # 查看应用启动状态

supervisorctl stop proms # 停止prometheus应用

supervisorctl start proms # 启动prometheus应用

supervisorctl restart proms # 重启prometheus应用

虽然使用上面的策略 supervisor, 可以实现进程的守护启动,如果进程挂了,会自动拉起,但是并没有告警通知的功能。所以我们需要监控进程的状态并实现告警 通知到对应的开发人员以及运维人员。对于这样的场景,我们如何去实现了?

分析

对于这种情况,我们可以使用如下的方案去实现:

方案一:使用 Zabbix/Prometheus监控系统,对Java应用程序做 TCP 端口检测。如果检测端口不通,就设置检测失败的触发器。然后实现告警.

方案二: 使用 Zabbix的自定义Key去实现告警,自定义key 的内容是执行一个shell脚本,Shell脚本用来检测进程是否存在࿰

你可能感兴趣的:(python如何监控程序运行状态_Python监控进程状态并实现告警)