2018-4-26 Python實現對服務進程的監控,告警給釘釘機器人及重啟任務


 

 

      最近看到一個釘釘軟件機器人,覺得非常好,比起郵件、微信告警,舒服多了,特獻上代碼內容。

 

      [root@k8s-master ~]# 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)

 

 

                              釘釘軟件結果圖片

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM