• Python编写告警信息,整合Alertmanager告警


     Alertmanager告警 系统整合

    流程

    (1)监控端,可以使用Python 或者 shell 进行监控,把 相关的json数据推送到Alertmanager

    (2)Alertmanager端 进行 汇总,发送,后续可以静默,抑制等功能

    (3)把告警的数据发送到prometheusalert,进行钉钉的发送

    环境

    软件

    prometheusalert 告警系统 :主要是数据的各个渠道发送

    Alertmanager 告警处理:主要汇总数据,抑制,静默

    思路

    编写告警测试数据时,我们可以不用生成时间,仅生成相关的告警指标,时间程序会帮忙生成(待测试)

    步骤

    获取Alertmanager数据格式

    方法,通过flask 编写接口,Alertmanager配置,告警时回把数据发送到此接口 ,进行展示查看

    1. from flask import Flask, request
    2. import json
    3. app = Flask(__name__)
    4. @app.route("/send/", methods=["POST"])
    5. def send():
    6. try:
    7. data = json.loads(request.data)
    8. print(data)
    9. alerts = data['alerts']
    10. for i in alerts:
    11. print('SEND SMS: ' + str(i))
    12. except Exception as e:
    13. print(e)
    14. return 'ok'
    15. if __name__ == '__main__':
    16. app.run(host='0.0.0.0', port=8082)

    在Alertmanager配置

    1. [root@prometheus-server alertmanager-0.24.0.linux-amd64]# cat alertmanager.yml
    2. global:
    3. resolve_timeout: 5m
    4. route:
    5. group_by: ['instance']
    6. group_wait: 30s
    7. group_interval: 10s
    8. repeat_interval: 10m
    9. receiver: 'web.hook.prometheusalert'
    10. receivers:
    11. - name: 'web.hook.prometheusalert'
    12. webhook_configs:
    13. - url: http://192.168.96.19:8082/send/

    产生prometheus的测试数据

    关闭客户端,产生告警 

    告警数据

    1. {
    2. 'receiver': 'web\\.hook\\.prometheusalert',
    3. 'status': 'firing',
    4. 'alerts': [{
    5. 'status': 'firing',
    6. 'labels': {
    7. 'alertname': '主机存活状态警告!',
    8. 'cloud': '乘风-Dev环境',
    9. 'instance': '192.168.82.105:9100',
    10. 'job': 'node_exporter',
    11. 'severity': '非常严重',
    12. 'team': 'ops'
    13. },
    14. 'annotations': {
    15. 'description': '192.168.82.105:9100:服务器延时超过5分钟',
    16. 'summary': '192.168.82.105:9100:服务器宕机'
    17. },
    18. 'startsAt': '2022-07-05T05:54:37.452Z',
    19. 'endsAt': '0001-01-01T00:00:00Z',
    20. 'generatorURL': 'http://prometheus-server.0101101300.fjf:9090/graph?g0.expr=up+%3D%3D+0&g0.tab=1',
    21. 'fingerprint': '4a890f7c225c3bef'
    22. }],
    23. 'groupLabels': {
    24. 'instance': '192.168.82.105:9100'
    25. },
    26. 'commonLabels': {
    27. 'alertname': '主机存活状态警告!',
    28. 'cloud': '乘风-Dev环境',
    29. 'instance': '192.168.82.105:9100',
    30. 'job': 'node_exporter',
    31. 'severity': '非常严重',
    32. 'team': 'ops'
    33. },
    34. 'commonAnnotations': {
    35. 'description': '192.168.82.105:9100:服务器延时超过5分钟',
    36. 'summary': '192.168.82.105:9100:服务器宕机'
    37. },
    38. 'externalURL': 'http://prometheus-server.0101101300.fjf:9093',
    39. 'version': '4',
    40. 'groupKey': '{}:{instance="192.168.82.105:9100"}',
    41. 'truncatedAlerts': 0
    42. }

    有用的告警数据

    1. {
    2. 'status': 'firing',
    3. 'labels': {
    4. 'alertname': '主机存活状态警告!',
    5. 'cloud': '乘风-Dev环境',
    6. 'instance': '192.168.82.105:9100',
    7. 'job': 'node_exporter',
    8. 'severity': '非常严重',
    9. 'team': 'ops'
    10. },
    11. 'annotations': {
    12. 'description': '192.168.82.105:9100:服务器延时超过5分钟',
    13. 'summary': '192.168.82.105:9100:服务器宕机'
    14. },
    15. 'startsAt': '2022-07-05T05:54:37.452Z',
    16. 'endsAt': '0001-01-01T00:00:00Z',
    17. 'generatorURL': 'http://prometheus-server.0101101300.fjf:9090/graph?g0.expr=up+%3D%3D+0&g0.tab=1',
    18. 'fingerprint': '4a890f7c225c3bef'
    19. }

    恢复数据

    1. {
    2. 'receiver': 'web\\.hook\\.prometheusalert',
    3. 'status': 'resolved',
    4. 'alerts': [{
    5. 'status': 'resolved',
    6. 'labels': {
    7. 'alertname': '主机存活状态警告!',
    8. 'cloud': '乘风-Dev环境',
    9. 'instance': '192.168.82.105:9100',
    10. 'job': 'node_exporter',
    11. 'severity': '非常严重',
    12. 'team': 'ops'
    13. },
    14. 'annotations': {
    15. 'description': '192.168.82.105:9100:服务器延时超过5分钟',
    16. 'summary': '192.168.82.105:9100:服务器宕机'
    17. },
    18. 'startsAt': '2022-07-05T05:54:37.452Z',
    19. 'endsAt': '2022-07-05T05:56:52.452Z',
    20. 'generatorURL': 'http://prometheus-server.0101101300.fjf:9090/graph?g0.expr=up+%3D%3D+0&g0.tab=1',
    21. 'fingerprint': '4a890f7c225c3bef'
    22. }],
    23. 'groupLabels': {
    24. 'instance': '192.168.82.105:9100'
    25. },
    26. 'commonLabels': {
    27. 'alertname': '主机存活状态警告!',
    28. 'cloud': '乘风-Dev环境',
    29. 'instance': '192.168.82.105:9100',
    30. 'job': 'node_exporter',
    31. 'severity': '非常严重',
    32. 'team': 'ops'
    33. },
    34. 'commonAnnotations': {
    35. 'description': '192.168.82.105:9100:服务器延时超过5分钟',
    36. 'summary': '192.168.82.105:9100:服务器宕机'
    37. },
    38. 'externalURL': 'http://prometheus-server.0101101300.fjf:9093',
    39. 'version': '4',
    40. 'groupKey': '{}:{instance="192.168.82.105:9100"}',
    41. 'truncatedAlerts': 0
    42. }

    有用的恢复数据

    1. {
    2. 'status': 'resolved',
    3. 'labels': {
    4. 'alertname': '主机存活状态警告!',
    5. 'cloud': '乘风-Dev环境',
    6. 'instance': '192.168.82.105:9100',
    7. 'job': 'node_exporter',
    8. 'severity': '非常严重',
    9. 'team': 'ops'
    10. },
    11. 'annotations': {
    12. 'description': '192.168.82.105:9100:服务器延时超过5分钟',
    13. 'summary': '192.168.82.105:9100:服务器宕机'
    14. },
    15. 'startsAt': '2022-07-05T05:54:37.452Z',
    16. 'endsAt': '2022-07-05T05:56:52.452Z',
    17. 'generatorURL': 'http://prometheus-server.0101101300.fjf:9090/graph?g0.expr=up+%3D%3D+0&g0.tab=1',
    18. 'fingerprint': '4a890f7c225c3bef'
    19. }

    Python发送告警数据

    发送告警信息

    1. import json
    2. import requests
    3. new_packinf = [{
    4. 'status': 'firing',
    5. 'labels': {
    6. 'alertname': '主机存活状态警告!',
    7. 'cloud': '乘风小贷-Dev环境',
    8. 'instance': '192.168.82.105:9100',
    9. 'job': 'node_exporter',
    10. 'severity': '非常严重',
    11. 'team': 'ops'
    12. },
    13. 'annotations': {
    14. 'description': '192.168.82.105:9100:服务器延时超过5分钟',
    15. 'summary': '192.168.82.105:9100:服务器宕机'
    16. },
    17. 'startsAt': '2022-07-05T05:54:37.452Z',
    18. 'endsAt': '0001-01-01T00:00:00Z',
    19. 'generatorURL': 'http://prometheus-server.0101101300.fjf:9090/graph?g0.expr=up+%3D%3D+0&g0.tab=1',
    20. 'fingerprint': '4a890f7c225c3bef'
    21. }]
    22. jsons = json.dumps(new_packinf)
    23. url = "http://192.168.82.105:9093/api/v2/alerts"
    24. headers = {'Content-Type': 'application/json'}
    25. responses = requests.post(url=url, headers=headers, data=jsons)
    26. print(responses.status_code, responses.url)
    27. # print(responses.json())

     

     发送恢复告警信息

    1. import json
    2. import requests
    3. new_packinf = [{
    4. 'status': 'resolved',
    5. 'labels': {
    6. 'alertname': '主机存活状态警告!',
    7. 'cloud': '乘风-Dev环境',
    8. 'instance': '192.168.82.105:9100',
    9. 'job': 'node_exporter',
    10. 'severity': '非常严重',
    11. 'team': 'ops'
    12. },
    13. 'annotations': {
    14. 'description': '192.168.82.105:9100:服务器延时超过5分钟',
    15. 'summary': '192.168.82.105:9100:服务器宕机'
    16. },
    17. 'startsAt': '2022-07-05T05:54:37.452Z',
    18. 'endsAt': '2022-07-05T05:56:52.452Z',
    19. 'generatorURL': 'http://prometheus-server.0101101300.fjf:9090/graph?g0.expr=up+%3D%3D+0&g0.tab=1',
    20. 'fingerprint': '4a890f7c225c3bef'
    21. }]
    22. jsons = json.dumps(new_packinf)
    23. url = "http://192.168.82.105:9093/api/v2/alerts"
    24. headers = {'Content-Type': 'application/json'}
    25. responses = requests.post(url=url, headers=headers, data=jsons)
    26. print(responses.status_code, responses.url)
    27. # print(responses.json())

     

     

    钉钉告警模板

    1. {{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
    2. {{if eq $v.status "resolved"}}
    3. #### [Prometheus恢复信息]({{$v.generatorURL}})
    4. ##### <font color="#02b340">告警名称</font>:[{{$v.labels.alertname}}]({{$var}})
    5. ##### <font color="#02b340">告警级别</font>:{{$v.labels.severity}}
    6. ##### <font color="#02b340">开始时间</font>:{{GetCSTtime $v.startsAt}}
    7. ##### <font color="#02b340">结束时间</font>:{{GetCSTtime $v.endsAt}}
    8. ##### <font color="#02b340">实例地址</font>:{{$v.labels.instance}}
    9. ##### <font color="#02b340">主机名称</font>:{{$v.labels.hostname}}
    10. **{{$v.annotations.description}}**
    11. {{else}}
    12. #### [Prometheus告警信息]({{$v.generatorURL}})
    13. ##### <font color="#FF0000">告警名称</font>:[{{$v.labels.alertname}}]({{$var}})
    14. ##### <font color="#FF0000">告警级别</font>:{{$v.labels.severity}}
    15. ##### <font color="#FF0000">开始时间</font>:{{GetCSTtime $v.startsAt}}
    16. ##### <font color="#FF0000">结束时间</font>:{{GetCSTtime $v.endsAt}}
    17. ##### <font color="#FF0000">实例地址</font>:{{$v.labels.instance}}
    18. ##### <font color="#FF0000">主机名称</font>:{{$v.labels.hostname}}
    19. **{{$v.annotations.description}}**
    20. {{end}}
    21. {{ end }}
    22. {{ $urimsg:=""}}{{ range $key,$value:=.commonLabels }}{{$urimsg = print $urimsg $key "%3D%22" $value "%22%2C" }}{{end}}[*** 点我屏蔽该告警]({{$var}}/#/silences/new?filter=%7B{{SplitString $urimsg 0 -3}}%7D)

  • 相关阅读:
    计算机毕业设计Java中医药院校科研会议系统(源码+系统+mysql数据库+Lw文档)
    【SpringMVC笔记14】SpringMVC集成Jackson和FastJson两种方式处理json数据
    JCMSuite应用:等离子波导
    当我点击桌面App的图标时发生了什么-浅析Activity启动流程(代码基于Android-12)
    AI在创造还是毁掉音乐?
    多校联测11 THUSC
    地图相关坐标转换及说明
    win11右键改回win10风格方法
    移动端适配vue小练习
    报错:java.sql.SQLSyntaxErrorException: Table ‘examsys.Teacher’ doesn’t exist
  • 原文地址:https://blog.csdn.net/heian_99/article/details/125618555