zoukankan      html  css  js  c++  java
  • k8s全方位监控 -prometheus实现短信告警接口编写(python)

    1、prometheus短信告警接口实现(python)源码如下:

    import subprocess
    from flask import Flask
    from flask import request
    import json
    import logging
    import requests
    
    logging.basicConfig(filename='/log/phone-hook-log.log',
                        format='%(asctime)s -%(name)s-%(levelname)s-%(module)s:%(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S %p',
                        level=logging.DEBUG)
    
    app = Flask(__name__)
    
    @app.route('/', methods=['GET', 'POST'])
    def home():
        msg = ""
        msg1 = ""
        msg2 = ""
        data = json.loads(request.data)
        alerts = data['alerts']
        for itm in alerts:
            logging.info('------------------------itm info------------------
    ' + str(itm))
            alert_status = itm['status']
            alert_level = itm['labels']['severity']
            alert_name = itm['labels']['alertname']
            alert_summary = itm['annotations']['summary']
            alert_value = itm['annotations']['value']
            alert_start = itm['startsAt'].split('.')[0].replace('T', ' ')
            alert_end = itm['endsAt'].split('.')[0].replace('T', ' ')
    
            # 告警触发
            if alert_status == "firing":
                msg1 = msg1 + "【告警触发】
    " + "告警级别: " + alert_level + "
    告警类型: " + alert_name + "
    监控项目: " + alert_summary + "
    触发时间: " + alert_start + "
    当前数值: " + alert_value + "
    
    "
            # 告警恢复
            elif alert_status == "resolved":
                msg2 = msg2 + "【告警恢复】
    " + "告警级别: " + alert_level + "
    告警类型: " + alert_name + "
    监控项目: " + alert_summary + "
    触发时间: " + alert_start + "
    恢复时间: " + alert_end + "
    当前数值: " + alert_value+ "
    
    "
    
    
    # 手机短信告警配置
        if msg1 == "":
            msg = msg2
        elif msg2 == "":
            msg = msg1
        else:
            msg = msg1 + "
    " + msg2
    
        logging.info('------------------------alert msg-------------------
    ' + msg)
        smsuser = '111111'
        smspass = '1HsbJ3YHe'
        extno = '10000'
        phones_f = open("/app/phones.txt", 'r')
        phones = phones_f.read()
        phones_f.close()
        logging.info("---------------------phones------------------------
    " + phones)
        values = {'account': smsuser,
                  'password': smspass,
                  'mobile': phones,
                  'content': msg,
                  'extno': extno}
    
        '''
        post_url = 'http://127.0.0.1:8080/sms?action=send'
        try:
            req = requests.get(post_url, values)
            print (req.text)
        except Exception as e:
            print (e)
        '''
        return '<h1>Home</h1>'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)
    

      

    2、构建dockerfile镜像

    FROM python:3.6.4
    
    RUN mkdir -p /app /log
    
    WORKDIR /app
    
    ADD . /app 
    
    # install requirements
    RUN pip install -r requirements.txt
    
    # run server
    CMD python sendPhone.py
    cat  requirements.txt
    Flask==1.0.2
    requests==2.20.1

    3、推送到镜像仓库

     docker  push 172.19.0.14/prom/py-hook:v0.0.1 

    4、部署

    [root@VM_0_48_centos prometheus_hook]# cat phone-hook.yaml
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: phone-hook
      namespace: monitoring
    spec:
      template:
        metadata:
          labels:
            app: phone-hook
        spec:
          containers:
          - name: phone-hook
            image: 172.19.0.14/prom/py-hook:v0.0.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 5000
              name: http
        
            volumeMounts:
              - name: phone-hook-config-volume
                mountPath: /app
              - name: phone-hook-volume
                mountPath: /log
              - name: localtime
                mountPath: /etc/localtime
      
            resources:
              requests:
                cpu: 100m
                memory: 100Mi
              limits:
                cpu: 200m
                memory: 200Mi
          
          volumes:
            - name: phone-hook-config-volume
              configMap:
                name: phone-hook-config
            - name: phone-hook-volume
              persistentVolumeClaim:  ##此处使用了永久存储券
                claimName: web-hook
            - name: localtime
              hostPath:
                path: /etc/localtime
          imagePullSecrets:
          - name: registrysecret
      
                
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: phone-hook
      namespace: monitoring
    spec:
      selector:
        app: phone-hook
      ports:
      - name: hook
        port: 5000
        targetPort: http      

    5、补充

    kubectl create cm phone-hook-config --from-file=./conf -n monitoring
    [root@VM_0_48_centos prometheus_hook]# cat conf/phones.txt 
    18125012766

    6、配置告警规则

  • 相关阅读:
    使用Notepad++进行php开发所必需的插件
    jquery操作复选框(checkbox)的12个小技巧总结
    深入理解拆箱
    史上最全UML的详细解析
    我理解的invoke和begininvoke
    java中的冒泡排序算法
    java中的选择排序算法
    Java实现将json中的数值插入到mysql中
    Java实现对mysql中的数值进行读取、插入、更新、删除
    Java连接MySQL数据库
  • 原文地址:https://www.cnblogs.com/xiajq/p/11354074.html
Copyright © 2011-2022 走看看