栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

AlertManager 钉钉报警

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

AlertManager 钉钉报警

1、部署webhook程序

alertManager 支持很多种报警接收器,比如 slack、微信之类的,其中最为灵活的方式是 webhook ,我们可以定义一个 webhook 来接收报警信息,然后在 webhook 里面去进行处理,可以自定义发送怎样的报警信息,这里实现了一个简单的dingtalk 的 webhook 程序,代码仓库地址:github.com/cnych/alertmanager-dingtalk-hook,现在将这个服务部署到集群中来:

将源码拉取到本地,打包这个服务镜像:

#镜像打包
$ ls
app.py  Dockerfile  requirements.txt
$ docker build -t dingtalk-hook:v1 .

#这里将镜像推送到AWS ECR上,先创建一个ecr存储库,然后使用以下命令将镜像打tag并推送过去:
$ aws ecr get-login-password --region cn-north-1 | docker login --username AWS --password-stdin xxxxxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn
$ docker tag dingtalk-hook:v1 xxxxxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/dingtalk-hook:v1
$ docker push xxxxxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/dingtalk-hook:v1
$  docker images | grep dingtalk
xxxxxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/dingtalk-hook        v1                  d5a82c1f0ab7        3 hours ago         700MB         

使用刚打包好的镜像将服务部署到K8S集群中来,对应的资源清单如下:

$ cat dingtalk-hook.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dingtalk-hook
  namespace: kube-mon
spec:
  selector:
    matchLabels:
      app: dingtalk-hook
  template:
    metadata:
      labels:
        app: dingtalk-hook
    spec:
      containers:
      - name: dingtalk-hook
        image: xxxxxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/dingtalk-hook:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5000
          name: http
        env:
        - name: PROME_URL
          value: 10.20.30.40:30219
        - name: LOG_LEVEL
          value: debug
        - name: ROBOT_TOKEN
          valueFrom:
            secretKeyRef:
              name: dingtalk-secret
              key: token
        - name: ROBOT_SECRET
          valueFrom:
            secretKeyRef:
              name: dingtalk-secret
              key: secret
        resources:
          requests:
            cpu: 50m
            memory: 100Mi
          limits:
            cpu: 50m
            memory: 100Mi
---
apiVersion: v1
kind: Service
metadata:
  name: dingtalk-hook
  namespace: kube-mon
spec:
  selector:
    app: dingtalk-hook
  ports:
  - name: hook
    port: 5000
    targetPort: http

对于上面的一些环境变量配置:

ROBOT_TOKEN:    钉钉机器人 TOKEN
PROME_URL:        手动指定跳转后的 Promethues 地址,默认会是 Pod 的地址
LOG_LEVEL:          日志级别,建议设置成 debug
ROBOT_SECRET: 为钉钉机器人的安全设置密钥,机器人安全设置页面,加签一栏下面显示的 SEC 开头的字符串

上面声明的 ROBOT_TOKEN 和 ROBOT_SECRET 环境变量,由于这是一个相对于私密的信息,所以这里从一个 Secret 对象中去获取,通过如下命令创建一个名为 dingtalk-secret 的 Secret:

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

#部署上面的dingtalk-hook
$ kubectl apply -f dingtalk-hook.yaml
2、添加alertManager接收器

webhook部署成功后,现在就可以给 alertManager 配置一个 webhook 接收器了,在alertManager的配置中增加一个路由接收器,如下报警信息包含team=node 标签的,将会被路由到 webhook 这个接收器中:

  routes:
  - receiver: webhook
    match:
      team: node
receivers:
- name: 'webhook'
  webhook_configs:
  - url: 'http://dingtalk-hook:5000'  #钉钉的 webhook 的 Service 地址
    send_resolved: true

修改 alertManager 配置文件后 ,执行 reload 操作使其更新生效:

$ curl -X POST http://alertnamager的地址/-/reload
3、测试报警通知

添加一条Prometheus告警规则,触发告警,测试是否能正常发送报警通知,如下规则节点内存使用率大于10%时触发告警:

- alert: Node_MemoryUsage_Above_10%
  expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 > 10
  for: 2m
  labels:
   team: node
  annotations:
    summary: "{{$labels.instance}}: High Memory usage detected"
    description: "{{$labels.instance}}: Memory usage is above 86% (current value is: {{ $value }}"

添加报警规则后,更新Prometheus配置,到Prometheus dashboard的 alert 下查看告警信息,可以看到下图,已成功触发报警:

 正常钉钉也会收到相关的告警信息通知:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/740648.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号