首页 > 其他分享 >AlertManager集成自研组件

AlertManager集成自研组件

时间:2024-02-02 17:22:06浏览次数:26  
标签:AlertManager 自研 send import 组件 output 告警 data email

Alertmanager配置

global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.163.com:25'
  smtp_from: '[email protected]'
  smtp_auth_username: '[email protected]'
  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: '[email protected]'
        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 = "[email protected]"
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'] = '[email protected]'

    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,自研,send,import,组件,output,告警,data,email
From: https://www.cnblogs.com/yxh168/p/18003477

相关文章

  • react antd 组件取值的方法
    在React中使用AntDesign(antd)组件,可以通过不同的方式获取组件的值,具体取决于所使用的AntDesign组件和其相关的API。一般来说,大部分AntDesign组件都有value属性或onChange事件,可用于获取或监听组件的值。以下是几个常见的AntDesign组件的取值方法示例:1、Input输入框组件:......
  • 在K8S中,calico有哪些组件?
    在Kubernetes(简称K8S)中,Calico作为网络插件提供了容器网络解决方案和网络策略管理。以下是Calico的主要组件:FelixFelix是Calico的核心守护进程,在每个节点上运行,负责配置和维护本地网络策略、路由规则以及ARP表项等。CalicoCNI插件Calico的CNI(ContainerNetworkInterfa......
  • 第17天:信息打点-语言框架&开发组件&FastJson&Shiro&Log4j&SpringBoot等
    框架:简单代码的一个整合库,如果使用框架就只需要学习使用框架调用即可如:文件上传功能是需要很多代码来实现的,框架把这个代码进行封封装,调用即可影响:如果采用框架开发,代码的安全性是取决于框架的过滤机制 #Python-开发框架-Django&FlaskDjango1、识别插件2、Set-Cookie:expi......
  • UniGUI使用ADO组件、调用数据库的存储过程、生成EXECL表的例子
    UniGUI使用ADO组件、调用数据库的存储过程、生成EXECL表的例子(自己学习记录一下,不一定合理,仅供参考)本例子是使用ADO等组件连接一个云服务器的一个数据库,调用GetOrg存储过程,把机构信息展现把结果导出的一个EXECL表里,并下载把显示的HSate的值进行替换1表示正常,其他表示暂停......
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件
    鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件一、操作环境操作系统: Windows10专业版、IDE:DevEcoStudio3.1、SDK:HarmonyOS3.1+编辑二、TextClock组件TextClock组件通过文本将当前系统时间显示在设备上。支持不同时区的时间显示,最高精度到秒级。子组件无。接口TextClock......
  • OpenHarmony 定义扩展组件样式:@Extend 装饰器
    说明:从APIversion9开始,该装饰器支持在ArkTS卡片中使用。装饰器使用说明语法@Extend(UIComponentName)functionfunctionName{...}使用规则●和@Styles不同,@Extend仅支持定义在全局,不支持在组件内部定义。●和@Styles不同,@Extend支持封装指定的组件的私有属性......
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextPicker组件
    鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextPicker组件一、操作环境操作系统: Windows10专业版、IDE:DevEcoStudio3.1、SDK:HarmonyOS3.1+编辑二、TextPicker组件TextClock组件通过文本将当前系统时间显示在设备上。支持不同时区的时间显示,最高精度到秒级。子组件无。接口TextPic......
  • 最新中国数据库排行出炉:阿里自研PolarDB首次登顶!
    今天,数据库社区“墨天轮”发布了最新的一期中国数据库流行度排行榜,阿里云自研云原生数据库PolarDB首次登顶,并刷新了榜单总分纪录。该榜单根据搜索引擎数据、核心案例数、资质数量、专利数、论文数等标准,对目前主流的国产数据库进行综合评比,体现了数据库在互联网上的流行度。在20......
  • Prometheus部署+Alertmanager邮件告警
    选型我们单位自己开发的软件平台,需要自己来运维,正所谓不监控无运维,等着甲方来通知你服务挂了是一件很尴尬的事情。在软件选型方面,监控工具简直是太多了,每个软件都有自己的领地,有的是偏向跟踪分析、有的是报警的、有的是日志收集、有的只监控硬件。Prometheus、Nagios、Datadog......
  • AI生成前端组件的价值思考
    想法来源这个想法来源于我自己的需求,我自己首先就是最精准的目标用户,在这个AI时代,我希望AI可以帮我尽量多地干活。结合自己的日常独立开发情况,发现花在调前端组件样式上的时间很多,因此思考能不能让AI把这部分活接过去,或者能提高一些效率也行。适合用户外行或刚入门的前端开发......