• 【无标题】


    欢迎关注个人微信公众号  singless
    1 介绍

    prometheus相信大家都接触的比较多,prometheus天然的适合云原生场景,并且也有一套成熟的告警体系。通过alertmanger可以将告警信息发送到钉钉、企业微信等常用的办公软件。不过alertmanger的告警内容比较单一,在某些场景下,我们可能在接收到告警的同时获取到更多的信息,比如某个服务当前的状态,或是某个命令执行的结果。通过这些信息有一些基本的判断后,可能就不需要再打开电脑去检查业务的状态了。

    图片

    本文主要介绍如何配置webhook,再产生告警时,由webhook执行已经写好的脚本,在脚本中我们会发送业务当前的状态检查结果到企业微信机器人

    告警机制这边先放个图

    图片

    prometheus从exporter中采集指标,并根据配置好的rule.yaml中的规则去判断指标值是否正常,如果指标值异常,会将告警推送到alertmanager。altermanger再发送消息给webhook。

    2 部署webhook

    webhook官网地址如下

    https://github.com/adnanh/webhook

    ubuntu系列可以直接通过apt安装webhook,其他系列可以参考官方文档通过go对源码进行编译安装。webhook默认使用9000端口。

    首先安装webhook

    root@ceph-4:~# apt install webhook

    安装后我们通过一个小例子来体验webhook的功能。编辑webhook配置文件,配置文件格式参考

    https://github.com/adnanh/webhook/blob/master/docs/Hook-Definition.md

    https://github.com/adnanh/webhook/blob/master/docs/Hook-Examples.md

    root@ceph-4:~# cat /etc/webhook.conf
    - id: singless-webhook  ##hook名,访问时需要用到
    execute-command: "/root/test.sh"  ##webhook被访问时执行的脚本
    command-working-directory: "/var/webhook"  ##webhook的工作目录,可以自己新建一个
    root@ceph-4:~#
    root@ceph-4:~# cat /root/test.sh ##脚本内容如下,注意一定要写明解释器,比如bash或python,或者脚本会无法执行
    #!/bin/bash
    /usr/bin/echo webhook >> /root/webhook

    配置完成后重启webhook,并尝试触发webhook。访问方式为http://{webhook_ip}:{port}/hooks/{webhook_id}

    其中端口默认使用9000端口,webhook_id为上面在配置文件中指定的id,通过下图可以看到,访问webhook后,/root/webhook文件被写入了内容,说明/root/test.sh脚本成功执行。

    root@ceph-4:~# systemctl restart webhook.service
    root@ceph-4:~# curl http://192.168.85.151:9000/hooks/singless-webhook
    root@ceph-4:~# cat /root/webhook
    webhook

    图片

    3 修改webhook的默认端口

    某些情况下,9000端口我们可能已经由其他业务使用了,这种情况下,可以修改webhook的端口。可以直接修改webhook的service文件,添加一个-port参数。比如下图,我修改端口为9001,修改后重启服务生效。

    root@ceph-4:~# cat /lib/systemd/system/webhook.service
    [Unit]
    Description=Small server for creating HTTP endpoints (hooks)
    Documentation=https://github.com/adnanh/webhook/
    ConditionPathExists=/etc/webhook.conf
    
    [Service]
    ExecStart=/usr/bin/webhook -nopanic -hooks /etc/webhook.conf -port 9001
    
    [Install]
    WantedBy=multi-user.target
    root@ceph-4:~#
    root@ceph-4:~# systemctl daemon-reload
    root@ceph-4:~# systemctl restart webhook.service

    图片

    4 发送自定义告警内容到企业微信机器人

    现在我们已经知道webhook的基本功能,下来来一个例子,当ceph状态异常时,将ceph health detail命令的执行结果发送到企业微信群。

    prometheus和alertmanger的部署和对接这边不在赘述。

    prometheus的告警规则如下,当ceph状态为warn时会推送告警到alertmanger

    root@ceph-4:~# cat /usr/local/prometheus/rules/ceph_rules.yml
    groups:
    - name: ceph.rules
    rules:
     - alert: CephErrorState
      expr: ceph_health_status > 0
       for: 5m
      labels:
        severity: critical
      annotations:
        description: Ceph is in Warring state longer than 5m, please check status of pools and OSDs
        summary: CEPH in WARN

    alertmanger配置如下,当接收到prometheus的告警时,会发送消息给webhook

    root@ceph-4:~# cat /usr/local/alertmanager/alertmanager.yml
    route:
    group_by: ['alertname']
    group_wait: 30s
    group_interval: 1m
    repeat_interval: 1h
    receiver: 'wechat.hook'   ##指定告警接收者,和下面的name保持一致
    receivers:
     - name: 'wechat.hook'
      webhook_configs:
         - url: 'http://192.168.85.151:9001/hooks/singless-webhook'   ##webhook地址
    inhibit_rules:
     - source_match:
        severity: 'critical'
      target_match:
        severity: 'warning'
      equal: ['alertname', 'dev', 'instance']

    webhook配置如下,当webhook被访问时会执行/root/trigger.sh脚本

    root@ceph-4:~# cat /etc/webhook.conf
    - id: singless-webhook
    execute-command: "/root/trigger.sh"
    command-working-directory: "/var/webhook"

    trigger.sh脚本内容如下

    root@ceph-4:~# cat /root/trigger.sh
    #!/bin/bash
    wechat_webhook=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=3b0a40d5-1c1a-4d67-87ac-a40584f217b8
    ceph_health_detail=$(ceph health detail)
    date=$(date)
    
    curl $wechat_webhook \
    -H 'Content-Type: application/json' \
    -d '{ "msgtype": "text","text": {"content": "'"$date"' \n '"$ceph_health_detail"'"}}'

    解释一下脚本中一些变量的作用

    • wechat_webhook:企业微信机器人的webhook地址,企业微信机器人可以参考网上教程创建

    • ceph_health_detail:记录ceph health detail命令的执行结果

    • date:记录当前时间

    这个脚本的作用就是将当前时间和ceph health detail命令的执行结果发送给企业微信机器人

    现在我模拟一下业务故障,看下效果

    停止掉ceph的osd服务,这时候ceph状态会变为WARN,触发prometheus告警。

    图片

    检查可以发现,收到了企业微信机器人发送的消息,且消息内容也是我们想要的。

    图片

    我们再将ceph环境恢复,恢复后prometheus也会触发恢复告警。因此机器人也可以收到恢复的告警

    图片

    总结,webhook让我们在接收到告警后上环境检查前可以做更多的事情。比如可以在产生告警时通过脚本抓取告警时的一些进程信息,服务信息。或是在告警产生时执行一些预定义的检查脚本等。总之该工具可以根据自身需要做很多定制化的内容,应用广泛。

  • 相关阅读:
    Sobel算子详解及例程
    金仓数据库KingbaseES客户端应用参考手册--3. createdb
    sql跨表查询的三种方案
    红黑树B树B+树区别及其适用场景
    请问如何用pandas库完成下面这个
    使用MLC-LLM将RWKV 3B模型跑在Android手机上
    scratch大鱼吃小鱼 电子学会图形化编程scratch等级考试二级真题和答案解析2022年6月
    centos7.9安装postgresql12
    想要精通算法和SQL的成长之路 - 课程表II
    快速将多个txt文档合并为一个文档
  • 原文地址:https://blog.csdn.net/ensp1/article/details/134044506