Alertmanager配置

global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.163.com:25'
  smtp_from: 'cfgitlab_admin@163.com'
  smtp_auth_username: 'cfgitlab_admin@163.com'
  smtp_auth_password: '11111111'
  smtp_require_tls: false
templates:
  - '/root/prom/alertmanager-0.26.0.linux-amd64/email.tmpl'
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'dingding.webhook1'
  routes:
    - receiver: 'dingding.webhook1'
      continue: true
    - receiver: 'email.webhook1'
receivers:
  - name: 'email'
    email_configs:
      - to: '66666666@qq.com'
        html: '{{ template "email.to.html" . }}'
        send_resolved: true
  - name: 'dingding.webhook1'
    webhook_configs:
    - url: 'http://10.30.92.71:8060/dingtalk/webhook1/send'
      send_resolved: true
  - name: 'email.webhook1'
    webhook_configs:
    #自定义的web服务API地址 Alertmanager会自动把告警相关数据post到这个API地址
    - url: 'http://10.30.92.71:5000'  
      send_resolved: true

alertmanager.yml

 

自研组件开发

# -*- coding: utf-8 -*-
import os
import json
import requests
import arrow
from flask import Flask
from flask import request

import socks
import socket
import smtplib
from email.mime.text import MIMEText

app = Flask(__name__)


socks.set_default_proxy(socks.SOCKS5, "10.30.90.11", 1080)
socket.socket = socks.socksocket

smtp_server = "smtp.163.com"
smtp_port = "25"
sender_email = "cfgitlab_admin@163.com"
sender_password = "111111"

server = smtplib.SMTP(smtp_server, smtp_port)
server.login(sender_email, sender_password)


def makealertdata(data):
    data = json.loads(data)
    for output in data['alerts'][:]:
        try:
            message = output['annotations']['message']
        except KeyError:
            try:
                message = output['annotations']['description']
            except KeyError:
                message = 'null'
        if output['status'] == 'firing':
            status_zh = '报警'
            title = '【%s】 %s 有新的报警' % (status_zh, output['labels']['alertname'])
            send_data =f'''
                            {title}\n
                            **告警级别**: {output['labels']['severity']}
                            **告警类型**: {output['labels']['alertname']}
                            **告警主机**: {output['labels']['instance']}
                            **告警详情**: {message}
                            **告警状态**: {output['status']}
                            **触发时间**: {arrow.get(output['startsAt']).to('Asia/Shanghai').format(
                        'YYYY-MM-DD HH:mm:ss ZZ')}"
           '''
        elif output['status'] == 'resolved':
            status_zh = '恢复'
            title = '【%s】 %s 有新的报警' % (status_zh, output['labels']['alertname'])
            send_data = '''
                    "title": title,
                    "text": "## %s \n\n" %title +
                            ">**告警级别**: %s \n\n" % output['labels']['severity'] +
                            ">**告警类型**: %s \n\n" % output['labels']['alertname'] +
                            ">**告警主机**: %s \n\n" % output['labels']['instance'] +
                            ">**告警详情**: %s \n\n" % message +
                            ">**告警状态**: %s \n\n" % output['status'] +
                            ">**触发时间**: %s \n\n" % arrow.get(output['startsAt']).to('Asia/Shanghai').format(
                        'YYYY-MM-DD HH:mm:ss ZZ') +
                            "  **触发结束时间**: %s \n" % arrow.get(output['endsAt']).to('Asia/Shanghai').format(
                        'YYYY-MM-DD HH:mm:ss ZZ')
           '''
        return send_data

def send_alert(data):
    msg = MIMEText(makealertdata(data), _charset='utf-8')
    msg['Subject'] = '测试邮件主题'
    msg['From'] = sender_email
    msg['To'] = '22222222@qq.com'

    server.sendmail(sender_email, msg['To'], msg.as_string())
    print("邮件已成功发送!")


@app.route('/', methods=['POST', 'GET'])
def send():
    if request.method == 'POST':
        #接收alertmanager自动提交过来的数据
        post_data = request.get_data()
        print(post_data)
        send_alert(post_data)
        return 'success'
    else:
        return 'weclome to use prometheus alertmanager email webhook server!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

python-flask-web     

AlertManager集成自研组件_flask

接口联调

     

AlertManager集成自研组件_git_02

     

AlertManager集成自研组件_git_03

    

AlertManager集成自研组件_git_04

     

AlertManager集成自研组件_json_05

 

作者:不懂123