• ELK日志检索并邮件微信通知


    简介

    脚本为通过api检索日志内容,并通过邮件或者微信发送出来。
    

    脚本

    index检索脚本

    #!/usr/bin/env python
    # coding:utf-8
    
    from elasticsearch import  Elasticsearch
    import re
    import time
    import datetime
    
    now = time.localtime()
    data1 = datetime.datetime(now[0], now[1], now[2])
    
    es=Elasticsearch("http://172.20.10.16:9200",http_auth=('Goun', r'fangjipu1314@'))
    
    
    res = es.cat.indices()
    
    l = res.strip().split()
    def dindex(day=30):
        index = []
        for i in l:
            if re.search('d+.d+.d+$', i):
                itime = time.strptime(re.findall('d+.d+.d+$', i)[0], "%Y.%m.%d")
                data2 = datetime.datetime(itime[0], itime[1], itime[2])
                d = (data1-data2).days
                if int(d) > int(day):
                    index.append(i)
        return index
    
    if __name__ == '__main__':
        print dindex()
    

    邮件报警脚本

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import smtplib
    from email.mime.text import MIMEText
    
    # 定义邮件信息
    User=["收件人"]
    mail_host="服务器"
    mail_user="用户"
    mail_pass="密码"
    mail_postfix="后缀"
    
    def send_mail(to_list,sub,content):
        # 定义邮件header信息
        me="方记普"+"<"+mail_user+"@"+mail_postfix+">"
        msg = MIMEText(content,_subtype='plain',_charset='utf-8')
        msg['Subject'] = sub
        msg['From'] = me
        msg['To'] = ";".join(to_list)
        try:
            server = smtplib.SMTP()
            server.connect(mail_host)
            server.login(mail_user,mail_pass)
            server.sendmail(me, to_list, msg.as_string())
            server.close()
            return True
        except Exception, e:
            print str(e)
            return False
    
    if __name__ == '__main__':
        if send_mail(User,"售后回复","真的好好"):
            print "发送成功"
        else:
            print "发送失败"
    
    

    微信报警脚本

    # -*- coding:utf-8 -*-
    
    import requests
    import json
    import sys
    import re
    
    # 微信api
    class Send_Message():
        def __init__(self, text):
            self.text = text
        def Token(self):
            url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'
            params = {'corpid':'id',
            'corpsecret': r'应用id'
            }
            url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'
            r = requests.get(url=url, params=params)
            token=json.loads(r.text)['access_token']
            return token
    
        def send_message(self):
            data={"touser": "@all",
            "toparty": " PartyID1 | PartyID2 ",
            "totag": " TagID1 | TagID2 ",
            "msgtype": "text",
            "agentid": '1000003',
            "text": {
                "content": r"%s" %(self.text)
            },
            "safe":0
            }
            value = json.dumps(data, ensure_ascii=False,sort_keys=True, indent=2).replace('\\', '\')
            print value
            token = self.Token()
            url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' %(token)
            r = requests.post(url, data=value)
            return r.text
    
    if __name__ == '__main__':
        #v = sys.argv[1]
        s = Send_Message(str("你好"))
        s.send_message()
    

    检索发送脚本

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import requests
    import json
    import time
    from multiprocessing.dummy import Pool as ThreadPool
    import  re
    import commands
    from mail import send_mail
    
    User = ["JipuFang@huatongsilver.com"]
    
    
    # request API
    class ES_API:
        def __init__(self, url, data, headers):
            self.url=url
            self.data=data
            self.headers=headers
    
        def get(self):
            r = requests.post(url=self.url, data=json.dumps(self.data), headers=self.headers)
            v=json.loads(r.text)
            return v
    
    
        def process(self):
            v = self.get()
            if v.get('status'):
                pass
            else:
                return (v['hits']['hits'])
    
    
    def get_data(index):
        date = time.strftime('%Y.%m.%d', time.localtime(time.time()))
        url="http://172.20.10.16:9200/%s-%s/_search" %(index, date)
        headers={'Content-Type':'application/json'}
        # 添加监控关键字
        data={
             "query": {
                 "match": {
                     "message": {
                        "query": "400007"
                    }
                }
            }
        }
        C=ES_API(url, data, headers)
        return C.process()
    
    def data():
        indexs=['rapp', 'rweb']
        pool = ThreadPool(len(indexs))
        results = pool.map(get_data, indexs)
        pool.close()
        pool.join()
        return  results
    
    def returnData():
        value = {}
        for i in data():
            if i:
                for x in i:
                    ff = 0
                    t = x['_source']['@timestamp']
                    tt = re.search(r'^([0-9]{4}-[0-9]{2}-[0-9]{2})[a-zA-Z]+([0-9]{2}:[0-9]{2}:[0-9]{2}).*$', t)
                    realtime = str(tt.group(1)) + str(tt.group(2))
                    timeArray = time.strptime(realtime, "%Y-%m-%d%H:%M:%S")
                    timeDiff = time.time() - time.mktime(timeArray)
                    if int(timeDiff) < 300:
                        v = {}
                        v['time'] = str(tt.group(1)) + ' ' + str(tt.group(2))
                        v['message'] = x['_source']['message']
                        value[ff] = v
                        ff = ff + 1
        return value
    
    def if_null():
        if returnData():
            print "准备报警发送!"
            send_mail(User, "ELK日志报警", json.dumps(returnData(), ensure_ascii=False,sort_keys=True, indent=2).replace('\\', '\'))
            print "报警发送成功!"
            print "#################################分割线#######################################"
        else:
            pass
    
    if __name__ == '__main__':
        while True:
           if_null()
           time.sleep(300)
    
  • 相关阅读:
    swift-教你如何实现导航上的UISearchController动画效果。
    swift-自动计算字符串的宽高
    值得收藏--GitHub Top 20 开源项目
    swift-通知的基本使用
    swift-UITableView的基本使用
    绝对好用的浏览器json解析网址
    swift-正则验证手机号码
    swift-计算字符串长度
    swift-导航栏添加自定义返回按钮
    swift-UITextfield控件的基本属性设置
  • 原文地址:https://www.cnblogs.com/GXLo/p/7602694.html
Copyright © 2020-2023  润新知