珠海网站制作公司,传销网站开发系统维护,永兴网站开发,同城推广引流平台在prometheus的告警方案中#xff0c;alertmanager提供了邮件、Slack、webhook等多种通知方式的支持
本篇主要介绍如何通过webhook方式将告警消息发送到自己的告警媒介
首先#xff0c;部署alertmanager应用#xff0c;此处不再赘述
配置webhook_configs为我们搭建的web服…在prometheus的告警方案中alertmanager提供了邮件、Slack、webhook等多种通知方式的支持
本篇主要介绍如何通过webhook方式将告警消息发送到自己的告警媒介
首先部署alertmanager应用此处不再赘述
配置webhook_configs为我们搭建的web服务地址 在搭建web服务之前首先我们要先知道当prometheus监控异常项目告警时触发的推送异常信息内容是什么我们通过脚本调试获取到的报文内容为
{ustatus: ufiring, ugroupLabels: {ualertname: u\u5185\u5b58\u4f7f\u7528\u7387\u8fc7\u9ad8}, utruncatedAlerts: 0, ugroupKey: u{}:{alertname\u5185\u5b58\u4f7f\u7528\u7387\u8fc7\u9ad8}, ucommonAnnotations: {}, ualerts: [{ustatus: ufiring, ulabels: {unodename: umaster, uinstance: ulocalhost:9100, ujob: unode, urole: umaster, ualertname: u\u5185\u5b58\u4f7f\u7528\u7387\u8fc7\u9ad8, useverity: ucritical}, uendsAt: u0001-01-01T00:00:00Z, ugeneratorURL: uhttp://localhost.localdomain:9091/graph?g0.expr100-%28node_memory_MemFree_bytes%2Bnode_memory_Cached_bytes%2Bnode_memory_Buffers_bytes%29%2Fnode_memory_MemTotal_bytes%2A100%3E10g0.tab1, ufingerprint: u6a6579e7227b6cc5, ustartsAt: u2023-12-12T03:11:23.514Z, uannotations: {udescription: ulocalhost:9100\u5185\u5b58\u4f7f\u7528\u7387\u8d85\u8fc790%,\u5f53\u524d\u4f7f\u7528\u738716.70720108803758%., usummary: ulocalhost:9100 \u5185\u5b58\u4f7f\u7528\u7387\u8fc7\u9ad8\uff0c\u8bf7\u5c3d\u5feb\u5904\u7406\uff01}}], uversion: u4, ureceiver: uweb\\.hook, uexternalURL: uhttp://localhost.localdomain:9093, ucommonLabels: {ujob: unode, useverity: ucritical, ualertname: u\u5185\u5b58\u4f7f\u7528\u7387\u8fc7\u9ad8}} 拿到报文后我们就可以开始我们的内容改造之旅我们使用flask框架搭建一个简单的web服务在开始编码之前先预先装好flask模块
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright: (c) HUWJ Organization. https://huwen.blog.csdn.net
# Copyright: (c) huwjsunsharing.com.cn
# Released under the AGPL-3.0 License.from flask import Flask, request
from log import logger
from datetime import datetime, timedeltaapp Flask(__name__)app.route(/, methods[POST])
def send_message():接收alertmanager告警消息解析告警内容推送至自定义告警媒介req request.jsonresponse for alert in req[alerts]:status if alert[status] firing:status 告警触发elif alert[status] resolved:status 告警恢复else:passjob alert[labels][job] team alert[labels][team] severity alert[labels][severity] description alert[annotations][description] name alert[labels][alertname] time_obj datetime.strptime(alert[startsAt][:19], %Y-%m-%dT%H:%M:%S) timedelta(hours8)time datetime.strftime(time_obj, %Y-%m-%d %H:%M:%S)content {0}\n \告警名称{1}\n \告警类型{2}\n \告警级别{3}\n \告警小组{4}\n \告警时间{5}\n \告警内容{6}.format(status, name, job, severity, team, time, description)# 根据接口方法制定请求头类型header {Content-Type: application/json}# 设定body报文data [{sender: prometheus,content: content,sendDate: }]sendData json.dumps(data)sendData sendData.encode(utf-8)try:response requests.post(urlurl, datasendData, headersheader, verifyFalse)except:return jsonify({error: No message provided}), 400return jsonify(response.json()), response.status_codeif __name__ __main__:app.run(host127.0.0.1, port8080)将以上内容保存为 alertmessage.py 然后后台启动服务
nohup python ./alertmessage.py
验证是否正常触发推送我们手动修改一条告警规则使其告警从prometheus查看已触发告警 然后alertmanager端查看 可以看到 web.hook已经触发两条告警 查看我们的web服务日志消息已正常推送 至此我们搭建的自定义告警服务就已经成功了。