• 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
    " % time.strftime("%Y-%m-%d %X") +
    36                     "> #### 服务名:%s 
    
    " % p_name +
    37                     "> #### 状态:%s 
    
    " % 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
    " % time.strftime("%Y-%m-%d %X") +
    58                         "> #### 服务名:%s 
    
    " % p_name +
    59                         "> #### 状态:%s 
    
    " % 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
    " % time.strftime("%Y-%m-%d %X") +
    74                         "> #### 服务名:%s 
    
    " % p_name +
    75                         "> #### 状态:%s 
    
    " % 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)

     

                                  钉钉软件结果图片

  • 相关阅读:
    2017/4/14 afternoon
    2017/4/14 morning补
    2017/4/13 afternoon
    2017/4/13 morning
    2017/4/12 afternoon
    2017/4/12 morning
    4.17上午
    4.14上午
    4.13下午
    4.13上午
  • 原文地址:https://www.cnblogs.com/yue-hong/p/8955039.html
Copyright © 2020-2023  润新知