前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 进程监控告警脚本

python 进程监控告警脚本

作者头像
葫芦
发布2019-04-17 16:13:48
1.5K0
发布2019-04-17 16:13:48
举报
文章被收录于专栏:葫芦

业务上的一个需求:

监控进程是否存在,如果检测时不存在则发送告警短信,如果连续10次检测都不存在则发送告警电话。

最近一直在学前端vue.js,今天试着拿python练下,以免手生。

里面的一些参数可能需要根据自身需求作相应调整。

代码语言:javascript
复制
#!/usr/bin/env python
# coding=utf-8
# author: wz
# mail: 277215243@qq.com
# datetime:2019/1/26 22:34 PM
# web: https://www.bthlt.com

"""
SYNOPSIS
    ./procmonitor.py <sms_id> <uwork_id>
DESCRIPTION
    解析进程xml,监控进程标示符,不存在sms告警,不存在uwork电话告警
DEMO
    ./procmonitor.py 123456 654321
NOTE
   None
"""

import re
import os
import sys


class procmonitor(object):
    def __init__(self, parse_xml, path, sms_id, uwork_id, threshold):
        """
        parse_xml:要解析的进程文件
        path:存放proc计数的路径
        sms_id:短信告警id
        uwork_id:电话告警id
        threshold:阈值
        """
        self.parse_xml = parse_xml
        self.path = path
        self.sms_id = sms_id
        self.uwork_id = uwork_id
        self.threshold = threshold

    def parse_proc_xml(self):
        proc_list = list()
        tag = 1
        with open(self.parse_xml) as procfile:
            lines = procfile.readlines()
            for line in lines:
                if 'Address' in line:
                    if line and tag == 2:
                        proc_list += re.findall(r'>(.*)<', line)
                        tag = 1
                    else:
                        tag = 2
        return set(proc_list)

    def write_proc_count(self, proc_file, tag_number):
        if not os.path.exists(self.path + proc_file):
            tag_file = open(self.path + proc_file, 'w')
            tag_file.write('0')
            tag_file.close()
        else:
            tag_file = open(self.path + proc_file, 'w')
            tag_file.write(tag_number)
            tag_file.close()

    def read_proc_count(self, proc_file):
        count = os.popen('cat {0}{1}'.format(self.path, proc_file)).read()
        return int(count)

    def alarm_sms(self, proc):
        print os.popen('/gentRep {0} '
                       '"{1} proc not exist!"'.format(self.sms_id, proc)).read()

    def alarm_uwork(self, proc):
        print os.popen('/gentRep {0} '
                       '"{1} check 10 times proc not exist!"'.format(self.uwork_id, proc)).read()

    def run_alarm(self):
        alarm_string = 'no proc alarm!'
        try:
            proc_set = self.parse_proc_xml()
            for proc in proc_set:
                if os.popen('ps -ef | grep {0}|grep -v grep'.format(proc)).read() == '':
                    alarm_string = 'have proc alarm'
                    try:
                        count = self.read_proc_count(proc)
                    except Exception, ex:
                        self.write_proc_count(proc, '0')
                        count = self.read_proc_count(proc)
                    count += 1
                    self.write_proc_count(proc, count)
                    self.alarm_sms(proc)
                    if count > self.threshold:
                        self.alarm_uwork(proc)
                        self.write_proc_count(proc, '0')
                        continue
                    continue
                else:
                    proc_monitor.write_proc_count(proc, '0')
                    continue
            return alarm_string
        except Exception, ex:
            print ex


def usage():
    print sys.modules[__name__].__doc__


if __name__ == '__main__':

    if len(sys.argv) == 3:

        proc_monitor = procmonitor(parse_xml='/data/proc.xml',
                                   path='/data/monitor/proc/',
                                   sms_id=sys.argv[1],
                                   uwork_id=sys.argv[2],
                                   threshold=10)
        result = proc_monitor.run_alarm()
        if result is not None:
            print result
        sys.exit(0)
    else:
        print 'Error: illegal args.'
        usage()
        sys.exit(-1)
代码语言:javascript
复制
[test@test ~]$ vim a.py
[test@test ~]$ python a.py
Error: illegal args.

SYNOPSIS
    ./procmonitor.py <sms_id> <uwork_id>
DESCRIPTION
    解析进程xml,监控进程是否存在,不存在sms告警,不存在此uwork告警
DEMO
    ./procmonitor.py 123456 654321
NOTE
   None

[test@test ~]$ python a.py testnumber testnumber
no proc alarm!
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/01/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档