最近看到一個釘釘軟件機器人,以爲很是好,比起郵件、微信告警,舒服多了,特獻上代碼內容。html
[root@k8s-master ~]# nohup python test.py & # 能夠參考下篇文章,python進程構成一個systemd服務後臺運行,每5秒監控更佳python
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)
釘釘軟件結果圖片json