AlertManager 钉钉报警

AlertManager Dingtalk 简介

用于接收AlertManager服务通知并通过钉钉机器人报警

prometheus-operator 安装请参考往期文章

AlertManager 钉钉报警服务示例

项目地址

https://github.com/yangpeng14/alertmanager-dingtalk-hook

主要代码

import os
import json
import requests
import arrow

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route(‘/‘, methods=[‘POST‘, ‘GET‘])
def send():
    if request.method == ‘POST‘:
        post_data = request.get_data()
        send_alert(bytes2json(post_data))
        return ‘success‘
    else:
        return ‘weclome to use prometheus alertmanager dingtalk webhook server!‘

def bytes2json(data_bytes):
    data = data_bytes.decode(‘utf8‘).replace("‘", ‘"‘)
    return json.loads(data)

def send_alert(data):
    token = os.getenv(‘ROBOT_TOKEN‘)
    if not token:
        print(‘you must set ROBOT_TOKEN env‘)
        return
    url = ‘https://oapi.dingtalk.com/robot/send?access_token=%s‘ % token
    for output in data[‘alerts‘][:]:
        try:
            pod_name = output[‘labels‘][‘pod‘]
        except KeyError:
            try:
                pod_name = output[‘labels‘][‘pod_name‘]
            except KeyError:
                pod_name = ‘null‘

        try:
            namespace = output[‘labels‘][‘namespace‘]
        except KeyError:
            namespace = ‘null‘

        try:
            message = output[‘annotations‘][‘message‘]
        except KeyError:
            try:
                message = output[‘annotations‘][‘description‘]
            except KeyError:
                message = ‘null‘

        send_data = {
            "msgtype": "markdown",
            "markdown": {
                "title": "prometheus_alert",
                "text": "## 告警程序: prometheus_alert \n" +
                        "**告警级别**: %s \n\n" % output[‘labels‘][‘severity‘] +
                        "**告警类型**: %s \n\n" % output[‘labels‘][‘alertname‘] +
                        "**故障pod**: %s \n\n" % pod_name +
                        "**故障namespace**: %s \n\n" % namespace +
                        "**告警详情**: %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‘)
            }
        }
        req = requests.post(url, json=send_data)
        result = req.json()
        if result[‘errcode‘] != 0:
            print(‘notify dingtalk error: %s‘ % result[‘errcode‘])

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

使用 Docker 部署

$ docker run -p 5000:5000 --name -e ROBOT_TOKEN=<钉钉机器人TOKEN> dingtalk-hook -d yangpeng2468/alertmanager-dingtalk-hook:v1

使用 Kubernetes 部署

  • 第一步 创建kube-ops namespace,建议将钉钉机器人TOKEN创建成Secret资源对象
$ kubectl create namespace kube-ops

$ kubectl create secret generic dingtalk-secret --from-literal=token=<钉钉群聊的机器人TOKEN> -n kube-ops

secret "dingtalk-secret" created
  • 第二步 定义 DeploymentService 资源对象:dingtalk-hook.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: dingtalk-hook
  namespace: kube-ops
spec:
  template:
    metadata:
      labels:
        app: dingtalk-hook
    spec:
      containers:
      - name: dingtalk-hook
        image: yangpeng2468/alertmanager-dingtalk-hook:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5000
          name: http
        env:
        - name: ROBOT_TOKEN
          valueFrom:
            secretKeyRef:
              name: dingtalk-secret
              key: token
        resources:
          requests:
            cpu: 50m
            memory: 100Mi
          limits:
            cpu: 50m
            memory: 100Mi

---
apiVersion: v1
kind: Service
metadata:
  name: dingtalk-hook
  namespace: kube-ops
spec:
  selector:
    app: dingtalk-hook
  ports:
  - name: hook
    port: 5000
    targetPort: http
  • 第三步 创建上面的资源对象即可
$ kubectl create -f dingtalk-hook.yaml

deployment.extensions "dingtalk-hook" created
service "dingtalk-hook" created

$ kubectl get pods -n kube-ops

NAME                            READY     STATUS      RESTARTS   AGE
dingtalk-hook-c4fcd8cd6-6r2b6   1/1       Running     0          45m
......
  • 最后 AlertManagerwebhook 地址直接通过 DNS 形式访问即可
receivers:
- name: ‘webhook‘
  webhook_configs:
  - url: ‘http://dingtalk-hook.kube-ops.svc.cluster.local:5000‘
    send_resolved: true

参考文档

钉钉自定义机器人文档 https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

AlertManager的使用 https://www.qikqiak.com/k8s-book/docs/57.AlertManager%E7%9A%84%E4%BD%BF%E7%94%A8.html

关注我

欢迎大家关注交流,定期分享自动化运维、DevOps、Kubernetes、Service Mesh和Cloud Native

原文地址:https://blog.51cto.com/yangpeng14/2453427

时间: 2024-11-12 17:38:23

AlertManager 钉钉报警的相关文章

Prometheus+Altermanager钉钉报警

Prometheus+Altermanager钉钉报警 一.添加钉钉机器人 参考钉钉官方文档:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq 二.在k8s上部署钉钉告警deployment,这里我们引用第三方的插件. [[email protected] webhook-dingtalk]# cat webhook-dingtalk.yaml apiVersion: apps/v1beta2 kind: Deployment metada

zabbix 使用机器人报警到钉钉群聊

钉钉机器人接口脚本下载:https://www.appgao.com/files/192.html 钉钉机器人接口地址(可以点击机器人查看):webhook地址,https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx 配置报警媒介类型 配置用户报警媒介 配置用户 赋予golang-zabbix-robot-64脚本所属主组和可执行权限 配置动作 默认信息: <?xml version="1.0" encoding=&q

使用钉钉自定义应用的方式实现zabbix报警

先给大家展示一下完成后的效果图 下面我们就按照下面的步骤来实现我们想要的效果 首先去钉钉后台管理添加自定义应用,关于如何创建自定义应用可以咨询钉钉客服或者查看钉钉相关文档,创建好应用后我们需要获取三个信息: AgentID:创建好应用后再点击应用进去就可以查看 CorpId:管理员才可以查看 CorpSecret:需要最高管员才可以查看 然后在附件中下载我们对应的程序到我们的zabbbix server的AlertScriptsPath目录,可以通过以下命令查看目录所在位置 grep "Aler

调用钉钉群组机器人在当前群组发送Zabbix报警信息

关于钉钉机器人的创建,基本用法详见我另一篇文章<创建自定义机器人> 本实验测试zabbix版本为3.4 接下来我们将直接通过下面的操作完成zabbix报警往我们的钉钉机器人所在群组发送: 首先在附件中下载对应的程序到我们的zabbix server的AlertScriptsPath目录,可以通过以下命令查看目录所在位置 grep "AlertScriptsPath" zabbix_server.conf 更改文件的权限为运行zabbix的用户,并给执行权限 chmod 75

zabbix 配合钉钉群机器人(webhook) 报警

首先建钉钉群,添加一个自定义机器人拿到webhook zabbix添加一个报警媒介 搞一个shell脚本来启动Python脚本(直接用zabbix调Python脚本不行,不知道什么原因) vim dingding.sh echo "$1" > /tmp/dingding.log python /etc/zabbix/alertscripts/dingding.py "$1" #!/usr/bin/env python #coding: utf-8 import

Zabbix 3.4.3通过钉钉机器人报警

一.钉钉配置 1.添加钉钉机器人 关于钉钉的注册我这里不再过多介绍. 2.选择添加机器人 3.选择自定义机器人 4.创建完成之后记住webhook,后面用于发送消息 二.Zabbix配置 1.创建脚本 # vim /usr/local/zabbix/alertscripts/dingding_text.py #!/usr/bin/python # -*- coding: utf-8 -*- import requests import json import sys import os head

Zabbix 钉钉报警

话不多说,咱们直接进入正题 钉钉报警时基于zabbix,访问钉钉应用接口去推送的报警消息,所以我们需要一个在钉钉创建一个报警应用 1.  我做的钉钉报警是基于钉钉自定义应用进行推送的所以需要登录钉钉管理后台进行创建(zabbix自定义应用) 添加自建应用 配置 完成之后直接提交即可 2.创建完毕之后需要查看此应用的agentid 并进行复制(一会在zabbix服务端配置会用到) 3.点击à应用开发,复制corpid,和corpSecret 记住这两个ID一会配置zabbixserver端需要使用

centos7 yum 安装zabbix设置钉钉机器人报警

原文地址 网上有很多zabbix使用钉钉触发告警信息的攻略, 需要注意的是zabbix3.2不能使用那些攻略进行触发报警. 至于监控内容啥的不在这篇文章里谈及, 我们这里只谈报警部分. 作者这里的环境基本都是centos 7.4 以及zabbix3.2 yum 安装,如果读者用的其他系统, 或安装方式不同, 此文章仅供参考. 搭建好zabbix3.2环境,然后: 从网上下载一下钉钉的zabbix机器人: 钉钉-zabbix-robot 解压缩并放在你的任意位置,改名为dingding.sh并放到

Ubuntu16.04和Centos7 Yum部署zabbix3.4 结合钉钉智能报警

Ubuntu16.04和Centos7.4两种操作系统部署zabbix3.4及zabbix功能介绍和各种小问题解决办法,分享最新,最潮流,最干的干活,解决最实在的问题,此博客也是本人在对zabbix懵懂时期各种摸索排坑到正式上线,最后到生产中检测200多台生产机,至今为止为出现任何误报警,不报警等情况 首先我们了解下zabbix监控的基础概念,以及工作原理和框架:什么是zabbix:Zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各