Prometheus + alermanager + webhook-dingtalk 告警

news2024/11/16 11:34:28

 添加钉钉机器人

1. 部署 alermanager

1.1 下载软件包

wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz

网址 :Releases · prometheus/alertmanager (github.com)

1.2 解压软件包

mkdir -pv /app/tools/
tar xf alertmanager-0.26.0.linux-amd64.tar.gz  -C /app/tools/

1.3 创建符号链接

cd /app/tools/ && ln -svf alertmanager-0.26.0.linux-amd64 alertmanager

1.4 修改 alermanager 的配置文件

vim alertmanager.yml

global:
  resolve_timeout: 5m
  
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 2m
  receiver: 'web.hook'
receivers:
  - name: 'web.hook'
    webhook_configs:
      # prometheus-webhook-dingtalk的地址
      #这里只需要修改IP地址及端口号即可
      #也可以第一次启动webhook-dingtalk的时候胡hi有提示这个地址(需要直接使用webhook命令执行)
      - url: 'http://localhost:8060/dingtalk/webhook1/send'
        send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

1.5 启动alermanager

vim /usr/lib/systemd/system/alertmanager.service

[Unit]
Description=The prometheus webhook dingtalk
After=network.target

[Service]
WorkingDirectory=/app/tools/alertmanager-0.26.0.linux-amd64/
ExecStart=/app/tools/alertmanager-0.26.0.linux-amd64/alertmanager \
--config.file=/app/tools/alertmanager-0.26.0.linux-amd64/alertmanager.yml 


[Install]
WantedBy=multi-user.target


systemctl daemon-reload
systemctl enable --now alertmanager.service

1.6 登录WebUI

http://192.168.99.181:9093/

有页面则部署完成

2. 部署 prometheus-webhook-dingtalk

2.1 下载 prometheus-webhook-dingtalk 软件包

wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz

2.2 解压软件包

tar xf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz -C /app/tools

2.3 编写配置文件

cat config.example.yml 

## Targets, previously was known as "profiles"
#指定告警模板配置文件
templates:
      # - /root/prometheus-webhook-dingtalk-2.1.0.linux-amd64/templates/default.tmpl
      - /app/tools/prometheus-webhook-dingtalk-2.1.0.linux-amd64/templates/test.tmpl
targets:
  webhook1:
    #机器人的地址
    url: https://oapi.dingtalk.com/robot/send?access_token=1859e97456bdcb436f87f8e27147cfe07557901bdc4691c1836e30640f33c60b
    # secret for signature
    #机器人的认证标签
    secret: SEC13a35ec382cbce1b46f4275ce640aedce28610b8026ceecd50ef59eb74002f8d
    message:
      ## 指定了消息的标题,使用模板 `ding.link.title` 来生成。
      title: '{{ template "ding.link.title" . }}'
      # 指定了消息的正文内容,使用模板 `ding.link.content` 来生成。
      text: '{{ template "ding.link.content" . }}'

2.4 编写告警模板

cat templates/test.tmpl 

{{ define "__subject" }}
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
{{ end }}

{{ define "__alert_list" }}{{ range . }}
---

{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
---

   **告警名称**: {{ .Labels.alertname }}

   **告警主机**: {{ .Labels.instance }} 

   **告警级别**: {{ .Labels.severity }} 
   #description 这里引用的是ruels文件中的字段
   **告警描述**: {{ index .Annotations "description" }} 
   #时间不要动
   **告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}
   #可填写查看详情的网址
   **查看详情**: http://192.168.99.181:9093
{{ end }}{{ end }}

{{ define "__resolved_list" }}{{ range . }}
---

   **告警名称**: {{ .Labels.alertname }}

   **告警主机**: {{ .Labels.instance }}

   **告警级别**: {{ .Labels.severity }}

   **告警描述**: {{ index .Annotations "description" }}

   **告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}

   **恢复时间**: {{ dateInZone "2006.01.02 15:04:05" (.EndsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}

{{ define "default.title" }}
{{ template "__subject" . }}
{{ end }}

{{ define "default.content" }}
{{ if gt (len .Alerts.Firing) 0 }}
**<font color="#FF0000">======侦测到{{ .Alerts.Firing | len  }}个告警======</font>**

{{ template "__alert_list" .Alerts.Firing }}
---

{{ end }}

{{ if gt (len .Alerts.Resolved) 0 }}
**<font color="green">======恢复{{ .Alerts.Resolved | len  }}个故障======</font>**
{{ template "__resolved_list" .Alerts.Resolved }}
{{ end }}
{{ end }}

{{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}
{{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
{{ template "default.title" . }}
{{ template "default.content" . }}

2.5 启动webhook-dingtalk

cat /usr/lib/systemd/system/webhook-dingtalk.service

[Unit]
Description=The prometheus webhook dingtalk
After=network.target

[Service]
WorkingDirectory=/app/tools/prometheus-webhook-dingtalk-2.1.0.linux-amd64/
ExecStart=/app/tools/prometheus-webhook-dingtalk-2.1.0.linux-amd64/prometheus-webhook-dingtalk \
--config.file=config.example.yml \
--web.enable-lifecycle \
--web.enable-ui

[Install]
WantedBy=multi-user.target


systemctl daemon-reload
systemctl enabled --now webhook-dingtalk.service

3. Promtheus

3.1 配置rules规则文件

[root@prometheus-server31 /app/tools/prometheus]# cat rules/test.yaml 
# 相关的规则设置定义在一个group下。在每一个group中我们可以定义多个告警规则(rule)
groups:
  # 组名,报警规则组名称
- name: 内存告警
  rules:
  - alert: 内存使用率超过80%告警
    # expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
    #expr: floor(100 * (1 - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes) / node_memory_MemTotal_bytes)) > 80
    expr: floor(100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))) > 80
    # for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。
    # for语句会使 Prometheus 服务等待指定的时间, 然后执行查询表达式。(for 表示告警持续的时长,若持续时长小于该时间就不发给alertmanager了,大于该时间再发。for的值不要小于prometheus中的scrape_interval,例如scrape_interval为30s,for为15s,如果触发告警规则,则再经过for时长后也一定会告警,这是因为最新的度量指标还没有拉取,在15s时仍会用原来值进行计算。另外,要注意的是只有在第一次触发告警时才会等待(for)时长。)
    for: 1m
    # labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
    labels:
      # severity: 指定告警级别,有三种等级,分别为:警告、严重、紧急,严重等级依次递增。
      severity: '<font color="#0000FF">警告</font>'
    # annotations: 附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
    annotations:
      servername: "{{ $labels.server_name }}"
      server_ip: "{{ $labels.server_ip }}"
      value: "{{ $value }}"
      description: "**{{ $labels.server_name }}**内存使用率持续1分钟超过**80%**, 请及时处理! 当前值**{{ $value }}%**。"

  - alert: 内存使用率超过90%告警
    expr: floor(100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))) > 90
    for: 1m
    labels:
      severity: '<font color="#FFA500">严重</font>'
    annotations:
      servername: "{{ $labels.server_name }}"
      server_ip: "{{ $labels.server_ip }}"
      value: "{{ $value }}"
      description: "**{{ $labels.server_name }}**内存使用率持续1分钟超过**90%**, 请马上处理! 当前值**{{ $value }}%**。"

- name: CPU告警
  rules:
  - alert: CPU使用率超过80%告警
    expr: floor(100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)) > 80
    for: 1m
    labels:
      severity: '<font color="#0000FF">警告</font>'
    annotations:
      servername: "{{ $labels.server_name }}"
      server_ip: "{{ $labels.server_ip }}"
      value: "{{ $value }}"
      description: "**{{ $labels.server_name }}**CPU使用率持续1分钟超过**80%**, 请及时处理! 当前值**{{ $value }}%**。"

  - alert: CPU使用率超过90%告警
    expr: floor(100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)) > 90
    for: 1m
    labels:
      severity: '<font color="#FFA500">严重</font>'
    annotations:
      servername: "{{ $labels.server_name }}"
      server_ip: "{{ $labels.server_ip }}"
      value: "{{ $value }}"
      description: "**{{ $labels.server_name }}**CPU使用率持续1分钟超过**90%**, 请马上处理! 当前值**{{ $value }}%**。"

- name: 磁盘告警
  rules:
  - alert: 磁盘 **/** 目录使用率超过90%告警
    expr: floor(100 * ((node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"})) >90
    for: 30m
    labels:
      severity: '<font color="#0000FF">警告</font>'
    annotations:
      servername: "{{ $labels.server_name }}"
      server_ip: "{{ $labels.server_ip }}"
      value: "{{ $value }}"
      description: "**{{ $labels.server_name }}**磁盘 **/** 目录使用率已经超过阈值**90%**, 请及时处理! 当前值**{{ $value }}%**。"

  - alert: 磁盘 **/home** 目录使用率超过90%告警
    expr: floor(100 * ((node_filesystem_size_bytes{mountpoint="/home"} - node_filesystem_avail_bytes{mountpoint="/home"}) / node_filesystem_size_bytes{mountpoint="/home"})) >90
    for: 30m
    labels:
      severity: '<font color="#0000FF">警告</font>'
    annotations:
      servername: "{{ $labels.server_name }}"
      server_ip: "{{ $labels.server_ip }}"
      value: "{{ $value }}"
      description: "**{{ $labels.server_name }}**磁盘 **/home** 目录使用率已经超过阈值**90%**, 请及时处理! 当前值**{{ $value }}%**。"

  - alert: 磁盘 **/data** 目录使用率超过90%告警
    expr: floor(100 * ((node_filesystem_size_bytes{mountpoint="/data"} - node_filesystem_avail_bytes{mountpoint="/data"}) / node_filesystem_size_bytes{mountpoint="/data"})) >90
    for: 30m
    labels:
      severity: '<font color="#0000FF">警告</font>'
    annotations:
      servername: "{{ $labels.server_name }}"
      server_ip: "{{ $labels.server_ip }}"
      value: "{{ $value }}"
      description: "**{{ $labels.server_name }}**磁盘 **/data** 目录使用率已经超过阈值**90%**, 请及时处理! 当前值**{{ $value }}%**。"

  - alert: 磁盘 **/data1** 目录使用率超过90%告警
    expr: floor(100 * ((node_filesystem_size_bytes{mountpoint="/data1"} - node_filesystem_avail_bytes{mountpoint="/data1"}) / node_filesystem_size_bytes{mountpoint="/data1"})) >90
    for: 30m
    labels:
      severity: '<font color="#0000FF">警告</font>'
    annotations:
      servername: "{{ $labels.server_name }}"
      server_ip: "{{ $labels.server_ip }}"
      value: "{{ $value }}"
      description: "**{{ $labels.server_name }}**磁盘 **/data1** 目录使用率已经超过阈值**90%**, 请及时处理! 当前值**{{ $value }}%**。"

  - alert: 磁盘 **/postgres** 目录使用率超过90%告警
    expr: floor(100 * ((node_filesystem_size_bytes{mountpoint="/postgres"} - node_filesystem_avail_bytes{mountpoint="/postgres"}) / node_filesystem_size_bytes{mountpoint="/postgres"})) >90
    for: 30m
    labels:
      severity: '<font color="#0000FF">警告</font>'
    annotations:
      servername: "{{ $labels.server_name }}"
      server_ip: "{{ $labels.server_ip }}"
      value: "{{ $value }}"
      description: "**{{ $labels.server_name }}**磁盘 **/postgres** 目录使用率已经超过阈值**90%**, 请及时处理! 当前值**{{ $value }}%**。"

- name: 离线告警
  rules:
  - alert: 服务器离线告警
    expr: up{instance =~ ".*:(9100|9200)"} == 0
    for: 30s
    labels:
      severity: '<font color="#FF0000">紧急</font>'
    annotations:
      servername: "{{ $labels.server_name }}"
      server_ip: "{{ $labels.server_ip }}"
      value: "{{ $value }}"
      description: "**{{ $labels.server_name }}**离线了,可能出现宕机情况, 请立即检查处理! "

3.2 配置 prometheus.yml 文件

vim /app/tools/prometheus/prometheus.yml
....
#指定alermanager
alerting:
  alertmanagers:
    - static_configs:
        - targets:
            - 192.168.99.181:9093
.....
rule_files:
  #指定 rules 配置文件
  - "/app/tools/prometheus/rules/test.yaml"
.....

3.3 重启prometheus

systemctl reload prometheus.server

4. 测试

根据自己定义的规则关闭一个监控的节点,查看钉钉是否有收到消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1923433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用 Kotlin 编写四则运算计算器:从零开始的简单教程

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

电-气阀门定位器YT-1000系列产品说明

电-气阀门定位器YT-1000系列 使用注意事项 • 搬运安装或使用中对产品过大的震动或撞击会成为产品故障的原因。 • 超过规定参数范围使用也会成为产品故陷的原因。 • 不使用的气路接口要用堵塞堵住。 • 不使用产品而长时间放悝在室外时,要盖上产品外壳以免雨水进入产品…

八款主流电脑监控软件推荐|2024年最佳电脑监控软件排行榜

在现代社会中&#xff0c;电脑监控软件已经成为企业和家庭不可或缺的工具。无论是为了确保员工的工作效率&#xff0c;还是保护孩子在互联网上的安全&#xff0c;这些软件都能提供有力的支持。本文将为大家介绍2024年最受欢迎的八款电脑监控软件。 1. 固信软件 固信软件是一款综…

服务重启时容器未自动启动

1、容器重启策略 通过设置容器的重启策略&#xff0c;‌可以决定在容器退出时Docker守护进程是否重启该容器。‌常见的重启策略包括&#xff1a;‌ no&#xff1a;‌不重启容器&#xff0c;‌默认策略。‌always&#xff1a;‌无论容器是如何退出的&#xff0c;‌总是重启容器…

2024年公共文化与社会服务国际会议(ICPCSS 2024)

2024年公共文化与社会服务国际会议 2024 International Conference on Public Culture and Social Services 【1】会议简介 2024年公共文化与社会服务国际会议是一个集学术性、实践性和国际性于一体的盛会。我们期待与您共同探讨公共文化与社会服务的未来发展方向&#xff0c;为…

【公益案例展】华为云X《无尽攀登》——攀登不停,向上而行

‍ 华为云公益案例 本项目案例由华为云投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2024中国数据智能产业最具社会责任感企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 夏伯渝&#xff0c;中国无腿登珠峰第一人&#xff0c;一生43年…

基于GIS矿产勘查靶区优选技术

定义&#xff1a; 找矿远景区(ore-finding prospect)&#xff1a; 一般将中小比例尺&#xff08;小于等于1&#xff1a;10万&#xff09;成矿预测所圈定的找矿有利地段&#xff08;preferable ore-finding area&#xff09;成为找矿远景区 找矿靶区&#xff08;ore-finding t…

IPD流程学习笔记

一、前言 互联网行业讲究的是快速试错&#xff0c;所以IPD流程的应用并不多&#xff0c;但是传统企业数字化转型中&#xff0c;怎么确保项目投入可以切合市场需求&#xff0c;有较好的ROI及落地性&#xff0c;轻量级的IPD还是很有必要了解下的&#xff0c;特别是重资产类的业务…

LAMP万字详解(概念、构建步骤)

目录 LAMP Apache 起源 主要特点 软件版本 编译安装httpd服务器 编译安装的优点 操作步骤 准备工作 编译 安装 优化执行路径 添加服务 守护进程 配置httpd 查看 Web 站点的访问情况 虚拟主机 类型 部署基于域名的虚拟主机 为虚拟主机提供域名解析&#xff…

原料药合成偶联反应中钯残留去除

摘要&#xff1a;海普开发的HP214 是一种具有螯合硫脲基团的大孔树脂&#xff0c;专为选择性去除汞、铂族贵金属、金和银而设计。同时还特别适用于从有机工艺流程中回收钯催化剂。 #原料药合成偶联反应中钯残留去除 在有机合成中&#xff0c;以过渡金属络合物催化进行高选择性…

博士论文 | 神经网络的结构与表示 147页

由于神经网络在人工智能领域占据主导地位&#xff0c;一个试图了解其内部工作原理的研究分支领域应运而生。这个子领域的一个标准方法是将神经网络主要理解为代表人类可理解的特征。另一种探索较少的可能性是将它们理解为多步骤的计算机程序。这样做的一个先决条件似乎是某种形…

中霖教育:税务师和中级会计师哪个难?

税务师和中级会计师是财会专业的两个比较常见的证书&#xff0c;二者之间哪个更难? 税务师考试包含五个不同的科目&#xff1a;包括《税法一》、《税法二》、《涉税服务实务》、《涉税服务相关法律》以及《财务与会计》&#xff0c;考生在连续五个年度内通过即可。 中级会计…

【人工智能】-- 迁移学习

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a; 专业知识 文章目录 &#x1f349;引言 &#x1f349;迁移学习 &#x1f348;基本概念 &#x1f34d;定义 &#x1f34c;归纳迁移学习&#xff08;Induct…

[IDEA插件] JarEditor 编辑jar包(直接新增、修改、删除jar包内的class文件)

文章目录 1. 安装插件 JarEditor2. 在IDEA中添加外部JAR包3. JarEditor 使用介绍 之前我们需要修改jar内文件的时候需要解压jar包&#xff0c;反编译class&#xff0c;新建java源文件&#xff0c;修改代码&#xff0c;再编译成class&#xff0c;替换jar包内的class文件。 现在…

亚马逊IP关联是什么?要怎么解决呢?

亚马逊不仅提供了广泛的商品和服务&#xff0c;也是许多企业和个人选择的电子商务平台。然而&#xff0c;与亚马逊相关的IP关联问题&#xff0c;特别是在网络安全和运营管理方面&#xff0c;经常成为使用亚马逊服务的用户和商家关注的焦点。通过了解亚马逊IP关联的含义、可能的…

ensp防火墙综合实验作业+实验报告

实验目的要求及拓扑图&#xff1a; 我的拓扑&#xff1a; 更改防火墙和交换机&#xff1a; [USG6000V1-GigabitEthernet0/0/0]ip address 192.168.110.5 24 [USG6000V1-GigabitEthernet0/0/0]service-manage all permit [Huawei]vlan batch 10 20 [Huawei]int g0/0/2 [Huawei-…

【网络安全】APDCL:IDOR + 账户接管

未经许可&#xff0c;不得转载。 文章目录 正文漏洞1&#xff1a;IDOR漏洞2&#xff1a;账户接管 正文 APDCL &#xff0c;即印度阿萨姆邦电力分销公司&#xff08;Assam Power Distribution Company Limited&#xff09;&#xff0c;是印度阿萨姆邦政府控制的公共部门企业&am…

题四次

大家好&#xff0c;我是小王同学&#xff0c;这是我参加2024年4月破局行动营“AI提示词”实战手册 学习笔记。个人理解。 相信在接下来的日子里&#xff0c;大家都能学有所成 课程安排 【DAY1】起航&#xff1a;生成14天学习打卡计划 根据您提供的课程大纲&#xff0c;我为您制…

C++基础入门(上)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 C基础入门(上) 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. C发展历史 2. C版本…

oslo_i18n学习小结

背景 代码均为开源代码 基于yoga版本&#xff0c;需要对openstack某服务做翻译&#xff0c;了解到oslo_i18n有翻译功能&#xff0c;配置oslo_i18n来给组件进行翻译 用法 用法 每个服务自己会带一个i18n.py的文件&#xff0c;如果要对日志进行翻译&#xff0c;从i18n导入_&…