接上篇基于Alertmanager 配置钉钉告警

Alertmanager 是一个用于处理和管理 Prometheus 警报的开源工具。它负责接收来自 Prometheus 服务器的警报,进行去重、分组、静默、抑制等操作,并通过电子邮件、PagerDuty、Slack 等多种渠道发送通知。

主要功能

  1. 去重:合并相同或相似的警报,避免重复通知。

  2. 分组:将相关警报合并为一个通知,减少信息过载。

  3. 静默:临时屏蔽特定警报,避免干扰。

  4. 抑制:在特定条件下阻止某些警报的发送。

  5. 路由:根据标签将警报分发到不同的接收者或渠道。

  6. 通知:支持通过多种方式发送警报通知。

核心概念

  • Alert:由 Prometheus 生成的警报,包含标签、注解和状态。

  • Receiver:警报的接收者,如电子邮件或 Slack 频道。

  • Route:定义警报如何路由到接收者。

  • Silence:临时屏蔽特定警报的机制。

下载安装包:
地址:https://prometheus.io/download/#alertmanager

将安装包alertmanager-0.24.0.linux-amd64.tar.gz上传服务器

tar zxf alertmanager-0.24.0.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/alertmanager-0.24.0.linux-amd64/ /usr/local/alertmanager

接下来再安装一个插件prometheus-webhook-dingtalk 

由于 Alertmanager 没有内置钉钉的支持,因此需要通过 Webhook 的方式将告警信息发送到钉钉。prometheus-webhook-dingtalk 就是这样一个工具,它充当了 Alertmanager 和钉钉之间的桥梁:

  1. Alertmanager 将告警信息通过 Webhook 发送到 prometheus-webhook-dingtalk

  2. prometheus-webhook-dingtalk 将告警信息格式化为钉钉支持的格式(如 Markdown),并通过钉钉的 Webhook API 推送到指定的群聊。

下载安装包:
地址:https://github.com/timonwong/prometheus-webhook-dingtalk/releases/

上传到服务器进行解压安装

tar zxvf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/prometheus-webhook-dingtalk-2.1.0.linux-amd64/ /usr/local/prometheus-webhook-dingtalk

创建钉钉机器人:

【电脑端钉钉 】-【群聊】-【群设置】-【智能群助手】-【添加更多】-【添加机器人】-【自定义】-【添加】,编辑机器人名称和选择添加的群组,勾选加签,将生成的秘钥复制出来。

修改prometheus-webhook-dingtalk配置,将以上信息填到文件中:

新建/usr/local/prometheus-webhook-dingtalk/config.yml,添加以下配置

targets:
  ding_webhook:
    # 钉钉webhook地址,根据自己的来填
    url: https://oapXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    # 创建机器人时获取到的加签秘钥,根据自己的来填
    secret: SECXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

启动prometheus-webhook-dingtalk服务

nohup /usr/local/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk --config.file=/usr/local/prome                                                        theus-webhook-dingtalk/config.yml &

查看插件提供的webhook地址:这个记好待会有用

编辑alertmanager.yml配置文件,添加路由和接受者配置,注意url填写钉钉插件提供的webhook地址,就是上图圈起来那个,根据自己的情况来,而不是钉钉直接提供的那个webhook。

vim /usr/local/alertmanager/alertmanager.yml
route:
  #接收人
  receiver: 'webhook'
  #同组内告警等待时间。也就是告警产生后等待5s,如果有同组告警一起发出
  group_wait: 5s
  #两个组告警的间隔时间
  group_interval: 10s
  #重复告警的间隔时间,减少相同钉钉告警的发送频率
  repeat_interval: 30s
  #采用哪个标签来作为分组依据
  group_by: [alertname]
  routes:
  - receiver: webhook
    #配置告警消息接受者信息,常用的有 邮箱、wechat、webhook 等消息通知方式
receivers:
- name: 'webhook'
  webhook_configs:
  #钉钉插件提供的webhook地址
  - url: http://localhost:8060/dingtalk/ding_webhook/send
  #警报被解决之后是否通知
    send_resolved: true

接下来编辑prometheus配置文件:

增加和修改prometheus.yml的alertmanager部分,让alertmanger能与Prometheus通信。

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          ##修改成alertmanager服务器的ip和端口
           - 192.168.158.183:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
# 指定告警规则的配置路径
rule_files:
  - "/usr/local/prometheus/rules/*.yml"
    # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ["192.168.158.183:9090"]
  - job_name: 'linux'
    file_sd_configs:
      - files:
          - /usr/local/prometheus/node_exporter_targets.json
  #接收alertmanager的数据
  - job_name: 'alertmanager'
    static_configs:
      - targets: ['192.168.158.183:9093']

在/usr/local/prometheus/路径建立rules文件夹

在rules文件夹中创建node_rules.yml用来配置主机节点的告警

[root@prometheus prometheus]# cat  rules/node_rules.yml
groups:
  - name: node_alerts
    rules:
      # 规则 1: CPU 使用率过高
      - alert: HighCPUUsage
        expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "High CPU usage on {{ $labels.instance }}"
          description: "CPU usage is above 80% for more than 5 minutes on {{ $labels.instance }}."

      # 规则 2: 内存使用率过高
      - alert: HighMemoryUsage
        expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 80
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "High memory usage on {{ $labels.instance }}"
          description: "Memory usage is above 80% for more than 5 minutes on {{ $labels.instance }}."

      # 规则 3: 磁盘使用率过高
      - alert: HighDiskUsage
        expr: 100 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High disk usage on {{ $labels.instance }}"
          description: "Disk usage is above 80% for more than 5 minutes on {{ $labels.instance }}."

      # 规则 4: 节点宕机
      - alert: InstanceDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Instance {{ $labels.instance }} down"
          description: "{{ $labels.instance }} has been down for more than 1 minute."

在/usr/local/prometheus/node_exporter_targets.json文件中添加测试节点

重启prometheus

ps -ef |grep prometheus |grep -v grep |awk '{print $2}' |xargs kill -9
nohup /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml &

启动Alertmanager

nohup /usr/local/alertmanager/alertmanager --config.file /usr/local/alertmanager/alertmanager.yml &

启动钉钉插件prometheus-webhook-dingtalk

nohup /usr/local/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk --config.file=/usr/local/prometheus-webhook-dingtalk/config.yml &

查看grafana、alertmanager、prometheus端口都已经启动

接下来关闭刚才添加的测试机器

等了一会查看钉钉出现了告警

接下来优化告警消息:

1、使用中文发送告警信息

修改prometheus-webhook-dingtalk/config.yml文件添加以下字段

targets:
  ding_webhook:
    url: https://oapXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    secret: SEC6c2bf6d8XXXXXXXXXXXXXXXXXXXXXXX
    message:
      title: 'Prometheus - {{ if eq .Status "resolved" }}恢复通知{{ else }}告警通知{{ end }}'
      text: |
        - **告警名称**: {{ .CommonLabels.alertname }}
        - **当前状态**: {{ .Status }}
        {{ if eq .Status "resolved" }}
        - **描述**: 实例 {{ .CommonLabels.instance }} 已恢复正常。
        - **可能影响的服务**: 没有影响的服务
        {{ else }}
        - **描述**: {{ .CommonAnnotations.description }}
        - **可能影响的服务**: {{ .CommonAnnotations.impact }}
        {{ end }}

2、告知故障的影响范围

修改/usr/local/prometheus/rules/node_rules.yml配置文件,添加以下信息

.............

      # 规则 4: 节点宕机
      - alert: InstanceDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "实例 {{ $labels.instance }} 已宕机"
          description: "实例 {{ $labels.instance }} 已宕机。"
          impact: |
            {{- if eq $labels.instance "192.168.158.182:9900" }}
            K8S中pod调度,导致服务无法正常使用。
            {{- else if eq $labels.instance "192.168.158.183:9900" }}
            无法访问监控系统。
            {{- else }}
            可能影响的服务:未知。
            {{- end }}

重启/prometheus-webhook-dingtalk服务:

ps -ef |grep prometheus-we |grep -v grep |awk -F " " '{print $2}' |xargs kill -9

#为了区分nohup的启动日志,建议进入各自的目录执行
cd /usr/local/prometheus-webhook-dingtalk/
nohup /usr/local/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk --config.file=/usr/local/prometheus-webhook-dingtalk/config.yml &

重启prometheus服务:

ps -ef |grep prometheus |grep -v grep |awk '{print $2}' |xargs kill -9

cd /usr/local/prometheus

nohup /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml &

查看端口都已经启动

查看钉钉最新消息已经修改为中文提示和告知影响范围

启动故障机器再次查看消息

后续继续更新监控其他服务

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt应用之MDI(多文档设计)

qt creator 版本6.8.0 MinGW 64bit 由此模块可以扩展成设计一个qt文本编辑器。 界面如下 部分功能展示如下 新建文件 打开文件 mdi模式、级联模式和平铺模式 界面和程序构建过程。 1.如图所需.cpp和.h文件 2.mainwindow.ui和tformdoc.ui界面布局如下 不懂什么是Action如何…

软件授权管理中的软件激活向导示例

软件激活向导示例 在软件许可中&#xff0c;提供许可应该是简单和安全的。这适用于想要在中央许可证服务器上创建新许可证的软件开发人员&#xff0c;也适用于需要在其设备上获得许可证的最终用户。如果所讨论的系统有互联网连接&#xff0c;或是暂时的连接&#xff0c;就可以…

GB44495-2024 汽车整车信息安全技术要求 - V2X部分前置要求

背景 GB 44495-2024《汽车整车信息安全技术要求》中关于V2X&#xff08;车与外界通信&#xff09;的部分&#xff0c;主要关注于通信安全要求&#xff0c;旨在确保车辆在与外部设备进行数据交互时的信息安全。其测试大致可分为消息层&#xff08;数据无异常&#xff09;、应用…

phpstudy靶场搭建问题

前言&#xff1a; 靶场搭建遇到的问题&#xff0c;记录一下&#xff0c;可能是基础不牢吧&#xff0c;老是遇到奇奇怪怪的问题 思路&#xff1a; 跟着网上的搭建走一遍 内容&#xff1a; 目录 搭建pikachu遇到的问题 搭建pikachu遇到的问题 其实并不是第一次搭建&#x…

【Excel】【VBA】双列排序:坐标从Y从大到小排列之后相同Y坐标的行再对X从小到大排列

Excel VBA 双列排序 功能概述 这段VBA代码实现了Excel中的双列排序功能&#xff0c;具体是&#xff1a; 跳过前3行表头先按C列数据从大到小排序在C列值相同的情况下&#xff0c;按B列从大到小排序排序时保持整行数据的完整性 流程图 #mermaid-svg-XJERemQluZlM4K8l {font-fa…

Hive SQL必刷练习题:留存率问题

首次登录算作当天新增&#xff0c;第二天也登录了算作一日留存。可以理解为&#xff0c;在10月1号登陆了。在10月2号也登陆了&#xff0c;那这个人就可以算是在1号留存 今日留存率 &#xff08;今日登录且明天也登录的用户数&#xff09; / 今日登录的总用户数 * 100% 解决思…

C++基础入门(二)

目录 前言 一、重载 1.函数重载 2.运算符重载 二、构造函数 1.什么是构造函数 2.带参数的构造函数 3.使用初始化列表 4.this关键字 5.new关键字 三、析构函数 1.什么是析构函数 四、静态成员变量 1.静态成员的定义 2.静态成员变量的作用 五、继承 1.继承基本概…

Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)

目录 前言1. 基本知识2. Java代码 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 单纯学习Redis可以看我前言的Java基本知识路线&#xff01;&#xff01; 对于Java的基本知识推荐阅读&#xff1a; java框架…

基于unity的多人家装应用的设计与实现

摘要 本课题根据主流家装应用存在的问题和结合了Unity3D引擎所具有的优势&#xff0c;在主流家装应用的基础上弥补了常见的缺憾&#xff0c;实现了一种新型的交互更强的家装展示系统。 本系统主要通过将家具模型资源和材质等资源导入Unity3D平台中&#xff0c;通过C#代码开发&a…

Three.js+Vue3+Vite应用lil-GUI调试开发3D效果(三)

前期文章中我们完成了创建第一个场景、添加轨道控制器的功能&#xff0c;接下来我们继续阐述其他的功能&#xff0c;本篇文章中主要讲述如何应用lil-GUI调试开发3D效果&#xff0c;在开始具体流程和步骤之前&#xff0c;请先查看之前的内容&#xff0c;因为该功能必须在前期内容…

采用海豚调度器+Doris开发数仓保姆级教程(满满是踩坑干货细节,持续更新)

一、采用海豚调度器Doris开发平替CDH Hdfs Yarn Hive Oozie的理由。 海豚调度器Doris离线数仓方案与CDH Hive在多个方面存在显著差异&#xff0c;以下是对这两种方案的对比分析&#xff1a; 1. 架构复杂性 CDH Hive&#xff1a;基于Hadoop生态&#xff0c;组件众多&#…

50.【8】BUUCTF WEB HardSql

进入靶场 随便输输 上order by ????????&#xff0c;被过滤了,继续找其他也被过滤的关键字 #&#xff0c;-- -&#xff0c;-- 都不行&#xff0c;尝试其他特殊字符后发现and&#xff0c;union&#xff0c;select&#xff0c;空格&#xff0c;都被过滤了 如下 我就不知…

Redis 3.2.1在Win10系统上的安装教程

诸神缄默不语-个人CSDN博文目录 这个文件可以跟我要&#xff0c;也可以从官网下载&#xff1a;https://github.com/MicrosoftArchive/redis/releases 这个是微软以前维护的Windows版Redis安装包&#xff0c;如果想要比较新的版本可以从别人维护的项目里下&#xff08;https://…

mac配置 iTerm2 使用lrzsz与服务器传输文件

mac配置 1. 安装支持rz和sz命令的lrzsz brew install lrzsz2. 下载iterm2-send-zmodem.sh和iterm2-recv-zmodem.sh两个脚本 # 克隆仓库 git clone https://github.com/aikuyun/iterm2-zmodem ~/iterm2-zmodem# 进入到仓库目录 cd ~/iterm2-zmodem# 设置脚本文件可执行权限 c…

9.7 visual studio 搭建yolov10的onnx的预测(c++)

1.环境配置 在进行onnx预测前&#xff0c;需要搭建的环境如下: 1.opencv环境的配置&#xff0c;可参考博客:9.2 c搭建opencv环境-CSDN博客 2.libtorch环境的配置&#xff0c;可参考博客&#xff1a;9.4 visualStudio 2022 配置 cuda 和 torch (c)-CSDN博客 3.cuda环境的配置…

YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练

数据标注 前期准备 先打开Anaconda Navigator&#xff0c;点击Environment&#xff0c;再点击new(new是我下载anaconda的文件夹名称)&#xff0c;然后点击创建 点击绿色按钮&#xff0c;并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具&#xff0c;在上篇…

STM32-keil安装时遇到的一些问题以及解决方案

前言&#xff1a; 本人项目需要使用到STM32,故需配置keil 5&#xff0c;在配置时遇到了以下问题&#xff0c;并找到相应的解决方案&#xff0c;希望能够为遇到相同问题的道友提供一些解决思路 1、提示缺少&#xff08;missing&#xff09;version 5编译器 step1&#xff1a;找…

C语言结构体漫谈:从平凡中见不平凡

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文《1》 结构体的两种声明一、结构…

LabVIEW与WPS文件格式的兼容性

LabVIEW 本身并不原生支持将文件直接保存为 WPS 格式&#xff08;如 WPS 文档或表格&#xff09;。然而&#xff0c;可以通过几种间接的方式实现这一目标&#xff0c;确保您能将 LabVIEW 中的数据或报告转换为 WPS 可兼容的格式。以下是几种常见的解决方案&#xff1a; ​ 导出…

LeetCode | 栈与队列:算法入门到进阶的全解析

栈和队列作为最基础的数据结构&#xff0c;不仅简单直观&#xff0c;还在算法世界中扮演着举足轻重的角色。无论是处理括号匹配问题、滑动窗口、还是实现先进先出的任务调度&#xff0c;栈与队列都是核心工具。 在本篇文章中&#xff0c;我们将以 LeetCode 中的经典题目为例&am…