8.Alertmanager监控报警

2023-11-26 06:10
文章标签 监控 alertmanager 报警

本文主要是介绍8.Alertmanager监控报警,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • Alertmanager 概述
    • 部署Alertmanager组件
    • 1.下载 alertmanager
    • 2.systemd 管理
    • 3.新建alertmanager.yml报警通知文件
    • 4.创建企业微信的消息模版
    • 5.配置报警规则
      • 主机监控规则文件
      • 容器监控规则文件
      • redis监控规则文件
      • 服务停止监控规则
    • 6.修改prometheus

alertmanager 下载地址:https://github.com/prometheus/alertmanager/releases

Alertmanager 概述

Alertmanager处理客户端应用程序(如Prometheus服务器)发送的告警。它负责对它们进行重复数据删除,分组和路由,以及正确的接收器集成,例如电子邮件,PagerDuty或OpsGenie。它还负责警报的静默和抑制。

以下描述了Alertmanager实现的核心概念。请参阅配置文档以了解如何更详细地使用它们。

分组(Grouping)
分组将类似性质的告警分类为单个通知。这在大型中断期间尤其有用,因为许多系统一次失败,并且可能同时发射数百到数千个警报。
示例:发生网络分区时,群集中正在运行数十或数百个服务实例。一半的服务实例无法再访问数据库。Prometheus中的告警规则配置为在每个服务实例无法与数据库通信时发送告警。结果,数百个告警被发送到Alertmanager。
作为用户,只能想要获得单个页面,同时仍能够确切地看到哪些服务实例受到影响。因此,可以将Alertmanager配置为按群集和alertname对警报进行分组,以便发送单个紧凑通知。
这些通知的接收器通过配置文件中的路由树配置告警的分组,定时的进行分组通知。 抑制(Inhibition)
如果某些特定的告警已经触发,则某些告警需要被抑制。
示例:如果某个告警触发,通知无法访问整个集群。Alertmanager可以配置为在该特定告警触发时将与该集群有关的所有其他告警静音。这可以防止通知数百或数千个与实际问题无关的告警触发。
静默(SILENCES)
静默是在给定时间内简单地静音告警的方法。基于匹配器配置静默,就像路由树一样。检查告警是否匹配或者正则表达式匹配静默。如果匹配,则不会发送该告警的通知。在Alertmanager的Web界面中可以配置静默。
客户端行为(Client behavior)
Alertmanager对其客户的行为有特殊要求。这些仅适用于不使用Prometheus发送警报的高级用例。

设置警报和通知的主要步骤如下:

设置并配置Alertmanager;
配置Prometheus对Alertmanager访问;
在普罗米修斯创建警报规则;

部署Alertmanager组件

首先需要创建Alertmanager的报警通知文件,我这里使用企业微信报警,其中企业微信需要申请账号认证,方式如下:
访问网站注册企业微信账号(不需要企业认证)。
访问apps创建第三方应用,点击创建应用按钮 -> 填写应用信息:
创建报警组,获取组ID:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.下载 alertmanager

cd /opt/plg/tools
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
tar -xvf  alertmanager-0.21.0.linux-amd64.tar.gz
mv alertmanager-0.21.0.linux-amd64 ../alertmanager
cd ../alertmanager

2.systemd 管理

cat >/usr/lib/systemd/system/alertmanager.service <<EOF
[Unit]
Description=alertmanager
Documentation=https://github.com/prometheus/alertmanager
After=network.target
[Service]
Type=simple
ExecStart=/opt/plg/alertmanager/alertmanager --config.file=/opt/plg/alertmanager/alertmanager.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

3.新建alertmanager.yml报警通知文件

vim alertmanager.yml
global:resolve_timeout: 2msmtp_smarthost: smtp.163.com:25smtp_from: 15xxx@163.comsmtp_auth_username: 15xxxx@163.comsmtp_auth_password: zxxxtemplates:- '/data/alertmanager/conf/template/wechat.tmpl'
route:group_by: ['alertname_wechat']group_wait: 1sgroup_interval: 1sreceiver: 'wechat'repeat_interval: 1hroutes:- receiver: wechatmatch_re:serverity: wechat
receivers:
- name: 'email'email_configs:- to: '8xxxxx@qq.com'send_resolved: true
- name: 'wechat'wechat_configs:- corp_id: 'wwd402ce40b4720f24'to_party: '2'agent_id: '1000002'api_secret: '9nmYa4p12OkToCbh_oNc'send_resolved: true ## 发送已解决通知

参数说明:

corp_id: 企业微信账号唯一 ID, 可以在我的企业中查看。
to_party: 需要发送的组。
agent_id: 第三方企业应用的ID,可以在自己创建的第三方企业应用详情页面查看。
api_secret:第三方企业应用的密钥,可以在自己创建的第三方企业应用详情页面查看。

4.创建企业微信的消息模版

vim template/wechat.tmpl
{{ define "wechat.default.message" }}
{{ range $i, $alert :=.Alerts }}
【系统报警】
告警状态:{{   .Status }}
告警级别:{{ $alert.Labels.severity }}
告警应用:{{ $alert.Annotations.summary }}
告警详情:{{ $alert.Annotations.description }}
触发阀值:{{ $alert.Annotations.value }}
告警主机:{{ $alert.Labels.instance }}
告警时间:{{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}
{{ end }}
{{ end }}

这个报警的模板其中的值是在Prometheus触发的报警信息中提取的,所以你可以根据自己的定义进行修改。

5.配置报警规则

主机监控规则文件

vim rules/host_sys.yml
groups:
- name: Hostrules:- alert: HostMemory Usageexpr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 >  90for: 1mlabels:name: Memoryseverity: Warningannotations:summary: " {{ $labels.appname }} "description: "宿主机内存使用率超过90%."value: "{{ $value }}"- alert: HostCPU Usageexpr: sum(avg without (cpu)(irate(node_cpu_seconds_total{mode!='idle'}[5m]))) by (instance,appname) > 0.8for: 1mlabels:name: CPUseverity: Warningannotations:summary: " {{ $labels.appname }} "description: "宿主机CPU使用率超过80%."value: "{{ $value }}"- alert: HostLoadexpr: node_load5 > 20for: 1mlabels:name: Loadseverity: Warningannotations:summary: "{{ $labels.appname }} "description: " 主机负载5分钟超过20."value: "{{ $value }}"- alert: HostFilesystem Usageexpr: (node_filesystem_size_bytes-node_filesystem_free_bytes)/node_filesystem_size_bytes*100>80for: 1mlabels:name: Diskseverity: Warningannotations:summary: " {{ $labels.appname }} "description: " 宿主机 [ {{ $labels.mountpoint }} ]分区使用超过80%."value: "{{ $value }}%"- alert: HostDiskio writesexpr: irate(node_disk_writes_completed_total{job=~"Host"}[1m]) > 10for: 1mlabels:name: Diskioseverity: Warningannotations:summary: " {{ $labels.appname }} "description: " 宿主机 [{{ $labels.device }}]磁盘1分钟平均写入IO负载较高."value: "{{ $value }}iops"- alert: HostDiskio readsexpr: irate(node_disk_reads_completed_total{job=~"Host"}[1m]) > 10for: 1mlabels:name: Diskioseverity: Warningannotations:summary: " {{ $labels.appname }} "description: " 宿机 [{{ $labels.device }}]磁盘1分钟平均读取IO负载较高."value: "{{ $value }}iops"- alert: HostNetwork_receiveexpr: irate(node_network_receive_bytes_total{device!~"lo|bond[0-9]|cbr[0-9]|veth.*|virbr.*|ovs-system"}[5m]) / 1048576  > 10for: 1mlabels:name: Network_receiveseverity: Warningannotations:summary: " {{ $labels.appname }} "description: " 宿主机 [{{ $labels.device }}] 网卡5分钟平均接收流量超过10Mbps."value: "{{ $value }}3Mbps"- alert: hostNetwork_transmitexpr: irate(node_network_transmit_bytes_total{device!~"lo|bond[0-9]|cbr[0-9]|veth.*|virbr.*|ovs-system"}[5m]) / 1048576  > 10for: 1mlabels:name: Network_transmitseverity: Warningannotations:summary: " {{ $labels.appname }} "description: " 宿主机 [{{ $labels.device }}] 网卡5分钟内平均发送流量超过10Mbps."value: "{{ $value }}3Mbps"

容器监控规则文件

vim rules/container_sys.yml
groups:
- name: Containerrules:- alert: ContainerCPUexpr: (sum by(name,instance) (rate(container_cpu_usage_seconds_total{image!=""}[5m]))*100) > 200for: 1mlabels:name: CPU_Usageseverity: Warningannotations:summary: "{{ $labels.name }} "description: " 容器CPU使用超200%."value: "{{ $value }}%"- alert: Memory Usageexpr: (container_memory_usage_bytes{name=~".+"} - container_memory_cache{name=~".+"})  / container_spec_memory_limit_bytes{name=~".+"}   * 100 > 200for: 1mlabels:name: Memoryseverity: Warningannotations:summary: "{{ $labels.name }} "description: " 容器内存使用超过200%."value: "{{ $value }}%"- alert: Network_receiveexpr: irate(container_network_receive_bytes_total{name=~".+",interface=~"eth.+"}[5m]) / 1048576  > 10for: 1mlabels:name: Network_receiveseverity: Warningannotations:summary: "{{ $labels.name }} "description: "容器 [{{ $labels.device }}] 网卡5分钟平均接收流量超过10Mbps."value: "{{ $value }}Mbps"- alert: Network_transmitexpr: irate(container_network_transmit_bytes_total{name=~".+",interface=~"eth.+"}[5m]) / 1048576  > 10for: 1mlabels:name: Network_transmitseverity: Warningannotations:summary: "{{ $labels.name }} "description: "容器 [{{ $labels.device }}] 网卡5分钟平均发送流量超过10Mbps."value: "{{ $value }}Mbps"

redis监控规则文件

vim rules/redis_check.yml
groups:
- name: redisdownrules:- alert: RedisDownexpr: redis_up == 0for: 1mlabels:name: instanceseverity: Criticalannotations:summary: " {{ $labels.alias }}"description: " 服务停止运行 "value: "{{ $value }}"- alert: Redis linked too many clientsexpr: redis_connected_clients / redis_config_maxclients * 100 > 80for: 1mlabels:name: instanceseverity: Warningannotations:summary: " {{ $labels.alias }}"description: " Redis连接数超过最大连接数的80%. "value: "{{ $value }}"- alert: Redis linkedexpr: redis_connected_clients / redis_config_maxclients * 100 > 80for: 1mlabels:name: instanceseverity: Warningannotations:summary: " {{ $labels.alias }}"description: " Redis连接数超过最大连接数的80%. "value: "{{ $value }}"

服务停止监控规则

vim rules/service_down.yml- alert: ProcessDownexpr: namedprocess_namegroup_num_procs  == 0for: 1mlabels:name: instanceseverity: Criticalannotations:summary: " {{ $labels.appname }}"description: " 进程停止运行 "value: "{{ $value }}"- alert: Grafana downexpr: absent(container_last_seen{name=~"grafana.+"} ) == 1for: 1mlabels:name: grafanaseverity: Criticalannotations:summary: "Grafana"description: "Grafana容器停止运行"value: "{{ $value }}"

在这里插入图片描述

6.修改prometheus

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:- localhost:9093  #这里默认注释掉,修改成你alertmanagers所在服务器ip # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:# - "first_rules.yml"# - "second_rules.yml"- " /opt/plg/rules/host_sys.yml" #主机监控规则文件- " /opt/plg/rules/container_sys.yml"  #容器监控规则文件- " /opt/plg/rules/redis_check.yml"  #redis监控规则文件- " /opt/plg/rules/service_down.yml"  #服务停止监控规则

参考文章:https://mp.weixin.qq.com/s/bRZ4u-8aOgadGPbW4jWczQ

这篇关于8.Alertmanager监控报警的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_45444133/article/details/115823156
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/425243

相关文章

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(