2018-4-26 Python实现对服务进程的监控,告警给钉钉机器人及重启任务

Posted yue-hong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-4-26 Python实现对服务进程的监控,告警给钉钉机器人及重启任务相关的知识,希望对你有一定的参考价值。

 

 

      最近看到一个钉钉软件机器人,觉得非常好,比起邮件、微信告警,舒服多了,特献上代码内容。

 

      [[email protected] ~]# nohup python test.py &      # 可以参考下篇文章,python进程构成一个systemd服务后台运行,每5秒监控更佳

 

 1 #coding: utf-8
 2 import psutil
 3 import requests
 4 import time
 5 import os
 6 import json
 7 
 8 monitor_name = set([httpd,cobblerd])  # 用户指定监控的服务进程名称
 9 
10 proc_dict = {}
11 proc_name = set()  # 系统检测的进程名称
12 monitor_map = {
13     httpd: systemctl restart httpd,
14     cobblerd: systemctl restart cobblerd  # 系统在进程down掉后,自动重启
15 }
16 
17 dingding_url = https://oapi.dingtalk.com/robot/send?access_token=b5258c4335ed8ab792075013c965efcbf4f8940f92e7bd936cdc7842d3bf9405
18 # 钉钉机器人token使用参考文档:http://www.pc6.com/infoview/Article_108931.html
19 
20 while True:
21     for proc in psutil.process_iter(attrs=[pid,name]):
22         proc_dict[proc.info[pid]] = proc.info[name]
23         proc_name.add(proc.info[name])
24 
25     proc_stop = monitor_name - proc_name  # 通过集合的形式来找出停掉的进程名,前者有但是后者没有的
26 
27     if proc_stop: # 如果确实有监控的进程停掉了,那么我们需要告警以及自动重启功能
28         for p in proc_stop:
29             p_status = 停止
30             p_name = p
31             data = {
32                 "msgtype": "markdown",
33                 "markdown": {
34                     "title": "监控信息",
35                     "text": "### %s\\n" % time.strftime("%Y-%m-%d %X") +
36                     "> #### 服务名:%s \\n\\n" % p_name +
37                     "> #### 状态:%s \\n\\n" % p_status +
38                     "> #### 正在尝试启动"
39                 },
40             }
41             headers = {Content-Type:application/json;charset=UTF-8}
42             send_data = json.dumps(data).encode(utf-8)
43             requests.post(url=dingding_url,data=send_data,headers=headers)
44 
45             os.system(monitor_map[p_name]) # 执行重启命令,然后判断是否重启成功
46             proc_set = set()
47             for proc_again in psutil.process_iter(attrs=[pid,name]):
48                 proc_set.add(proc_again.info[name])
49 
50             if p in proc_set: # 如果进程启动成功,p是以前停掉的进程,proc_set是已经重启过一次后的所有进程集合
51                 p_status = 成功
52                 p_name = p
53                 data = {
54                     "msgtype": "markdown",
55                     "markdown": {
56                         "title": "监控信息",
57                         "text": "### %s\\n" % time.strftime("%Y-%m-%d %X") +
58                         "> #### 服务名:%s \\n\\n" % p_name +
59                         "> #### 状态:%s \\n\\n" % p_status +
60                         "> #### 已经启动成功,服务正在运行!"
61                     },
62                 }
63                 headers = {Content-Type:application/json;charset=UTF-8}
64                 send_data = json.dumps(data).encode(utf-8)
65                 requests.post(url=dingding_url,data=send_data,headers=headers)
66             else:
67                 p_status = 重启失败
68                 p_name = p
69                 data = {
70                     "msgtype": "markdown",
71                     "markdown": {
72                         "title": "监控信息",
73                         "text": "### %s\\n" % time.strftime("%Y-%m-%d %X") +
74                         "> #### 服务名:%s \\n\\n" % p_name +
75                         "> #### 状态:%s \\n\\n" % p_status +
76                         "> #### Sorry,服务启动失败鸟!"
77                     },
78                 }
79                 headers = {Content-Type:application/json;charset=UTF-8}
80                 send_data = json.dumps(data).encode(utf-8)
81                 requests.post(url=dingding_url,data=send_data,headers=headers)
82     time.sleep(5)

 

 

                              钉钉软件结果图片

技术分享图片

 

以上是关于2018-4-26 Python实现对服务进程的监控,告警给钉钉机器人及重启任务的主要内容,如果未能解决你的问题,请参考以下文章

进程及Python实现

python并发编程之进程池,线程池concurrent.futures

进程队列补充socket实现服务器并发线程完结

Python笔记Python多线程进程如何正确响应Ctrl-C以实现优雅退出

Python笔记Python多线程进程如何正确响应Ctrl-C以实现优雅退出

实战:go语言实现被压服务进程监控