zoukankan      html  css  js  c++  java
  • python-自动化监控进程发钉钉报警

    #!/usr/bin/python3.7
    import psutil
    import time
    import os, requests
    import json
    
    monitor_name = {'nginx','supervisord'}
    monitor_map = {
        'httpd': 'systemctl start nginx',
        'supervisord': 'systemctl restart supervisord'
    }
    # 钉钉自己人hook_url
    url = 'https://oapi.dingtalk.com/robot/send?access_token=f4de0e432f10ec92d7ab59b09284f6a6e0c1785cfa6e17dc6604e70f92a33707'
    # 当前时间
    current_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
    while True:
        # 字典,无序
        proc_dict = {}
        # 集合,作用是去重,数据唯一,无序
        proc_name = set()
    
        for p in psutil.process_iter(attrs=['pid', 'name']):
            proc_dict[p.info['pid']] = p.info['name']
            proc_name.add(p.info['name'])
    
        print(proc_dict)
        print('
    
    ---------
    ')
        print(proc_name)
    
        # 网卡,可以得到网卡属性,连接数,当前流量等信息
        # net = psutil.net_io_counters()
        # bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
        # bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
        # print(u"网卡接收流量 %s 网卡发送流量 %s" % (bytes_rcvd, bytes_sent))
    
        # print('-----------------------------进程信息-------------------------------------')
        # 查看系统全部进程
        # for pnum in psutil.pids():
        #    p = psutil.Process(pnum)
        #    print(u"进程名 %-20s  内存利用率 %-18s 进程状态 %-10s 创建时间 %-10s " 
        #    % (p.name(), p.memory_percent(), p.status(), p.create_time()))
    
        proc_stop = monitor_name - proc_name
        if proc_stop:
                for p in proc_stop:
            # 取出每一个没启动的服务名
                    p_status = '停止'
                    p_name = p
                    data = {
                        "msgtype": "markdown",
                        "markdown": {
                        "title": "监控信息",
                        "text": "#### %s 
    " % current_time +
                        ">##### 服务名 %s 
    " % p_name +
                        ">##### 状态 %s 
    " % p_status +
                        "> ###### 正在尝试重新启动 
    "
                        }}
                    headers = {'Content-Type': 'application/json ;charset=utf-8'}
                    send_data = json.dumps(data).encode('utf-8')
                    # 把字典类型的数据变成json的数据类型,这样才能支持中文
                    requests.post(url=url, data=send_data, headers=headers)
                    os.system(monitor_map[p])
                    proc_name = set()
                    for p_new in psutil.process_iter(attrs=['pid', 'name']):
                        proc_name.add(p_new.info['name'])
                    if p in proc_name:
                        p_status = '启动'
                        data = {
                            "msgtype": "markdown",
                            "markdown": {
                                "title": "监控信息",
                                "text": "#### %s 
    " % current_time +
                                ">##### 服务名 %s 
    " % p_name +
                                ">##### 状态 %s 
    " % p_status +
                                " ###### 重启成功 
    "
                                }}
                        headers = {'Content-Type': 'application/json ;charset=utf-8'}
                        send_data = json.dumps(data).encode('utf-8')
                        # 把字典类型的数据变成json的数据类型,这样才能支持中文
                        requests.post(url=url, data=send_data, headers=headers)
                    else:
                        p_status = '停止'
                        data = {
                            "msgtype": "markdown",
                            "markdown": {
                                "title": "监控信息",
                                "text": "#### %s 
    " % current_time +
                                ">##### 服务名 %s 
    " % p_name +
                                ">##### 状态 %s 
    " % p_status +
                                " ###### 启动失败 
    "
                                }}
                        headers = {'Content-Type': 'application/json ;charset=utf-8'}
                        send_data = json.dumps(data).encode('utf-8')
                        # 把字典类型的数据变成json的数据类型,这样才能支持中文
                        requests.post(url=url, data=send_data, headers=headers)
    
        time.sleep(2)

    while 死循环,每2秒执行一次

    钉钉截图:

  • 相关阅读:
    babel的使用以及安装配置
    常见的浏览器兼容性问题与解决方案——CSS篇
    ES6入门——变量的解构赋值
    ES6入门——let和const命令
    第一个移动端项目
    向Github提交更改的代码
    MySQL安装配置
    HTTP 状态消息
    HTMl基础
    Shell 常用的命令
  • 原文地址:https://www.cnblogs.com/fuyuteng/p/14145323.html
Copyright © 2011-2022 走看看