prometheus報警消息釘釘通知

設置prometheus 的web hook 爲對應服務:node

報警的配置以下,設置了web hook url,報警就會把消息發給web hookurl,可是這裏的數據格式和釘釘要求的格式不同,因此後面會加一層。python

因爲部署在k8s中,url 是 'http://dingding-alerts:80/'web

global:
  #已經解決
  resolve_timeout: 5m
route:
  group_by: ['job']
  group_wait: 30s
  #同一組間隔
  group_interval: 5m
  #相同報警內容間隔
  repeat_interval: 3h
  receiver: 'webhook'
receivers:
- name: 'webhook'
  webhook_configs:
  - url: 'http://dingding-alerts:80/'

 

以下python代理起一個轉發的服務:
json

若是部署在k8s,爲了能直接獲取連接,須要對應url的轉化,我這裏設置成nodePort模式,經過設置nodeporturl來替換內網的urlflask

# -*- coding: utf-8 -*-

from flask import Flask from flask import request import json import requests app = Flask(__name__) def transform(text): textMap = json.loads(text)
nodePorturl
= 'http://XXX:30027/' externalURL = textMap['externalURL'] print(externalURL) links =[] for alert in textMap['alerts']: print('-------------') time = alert['startsAt'] + ' -- ' + alert['endsAt'] generatorURL = alert['generatorURL']; generatorURL = nodePorturl+generatorURL[generatorURL.index('graph'):] summary = alert['annotations']['summary'] description = alert['annotations']['description'] status = alert['status'] title = alert['labels']['alertname'] link = {} link['title'] = title link['text'] = status + ': ' + description link['messageUrl'] = generatorURL link['picUrl'] = '' links.append(link) return links @app.route('/',methods=['POST']) def send(): if request.method == 'POST': post_data = request.get_data() alert_data(post_data) return "hello" def alert_data(data): url = 'https://oapi.dingtalk.com/robot/send?access_token=‘XXX' headers = {'Content-Type': 'application/json'} for link in transform(data): send_data = {"msgtype": "link", "link": link} print(send_data) r = requests.post(url, data=json.dumps(send_data), headers=headers) if __name__ == '__main__': app.run(host='0.0.0.0', port=80)
相關文章
相關標籤/搜索