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监控报警的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/425243

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

kubernetes集群部署Zabbix监控平台

一、zabbix介绍 1.zabbix简介 Zabbix是一个基于Web界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数,保障服务器及设备的安全运营。 2.zabbix特点 (1)安装与配置简单。 (2)可视化web管理界面。 (3)免费开源。 (4)支持中文。 (5)自动发现。 (6)分布式监控。 (7)实时绘图。 3.zabbix的主要功能

基于树梅派的视频监控机器人Verybot

最近这段时间做了一个基于树梅派 ( raspberry pi ) 的视频监控机器人平台 Verybot ,现在打算把这个机器人的一些图片、视频、设计思路进行公开,并且希望跟大家一起研究相关的各种问题,下面是两张机器人的照片:         图片1:                   图片2                    这个平台的基本组成是:

PC与android平板通过浏览器监控Verybot的视频

下面这个视频是PC与android平板通过浏览器监控Verybot的视频:           http://v.youku.com/v_show/id_XNjYzNzYyMTIw.html

java后端服务监控与告警:Prometheus与Grafana集成

Java后端服务监控与告警:Prometheus与Grafana集成 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的微服务架构中,监控和告警是确保服务稳定性的关键组成部分。Prometheus和Grafana是两个强大的工具,它们可以集成在一起,为Java后端服务提供实时监控和可视化告警。 服务监控的重要性 服务监控可以帮助我们实时了解服务的健

145-Linux权限维持Rootkit后门Strace监控Alias别名Cron定时任务

参考 【权限维持】Linux&Rootkit后门&Strace监控&Alias别名&Cron定时任务_alias ls='alerts(){ ls $* --color=auto;python -c "-CSDN博客 参考 FlowUs 息流 - 新一代生产力工具 权限维持-Linux-定时任务-Cron后门 利用系统的定时任务功能进行反弹Shell 1、编辑后门反弹shell脚本

828华为云征文|基于Flexus云服务器X实例的应用场景-拥有一款自己的ssl监控工具

先看这里 写在前面效果图华为云Flexus云服务器X实例介绍特点可选配置购买 连接服务器Uptime-kuma简介开源信息部署准备工作:docker部署命令访问uptime-kuma 基本配置总结 写在前面 作为一个个人开发者,相信你手里肯定也有不少自己的服务,有的服务呢也是https的。 以前ssl各厂都是可以免费申请一年的,我们更换的频率还好,比较小;但是最近,各厂都

nmon服务器监控工具使用

nmon:是一个分析linux服务器性能的免费工具,可以用来帮助我们整体性的分析服务端的CPU,内存,网络,IO,虚拟内存等指标 下载nmon.jar包及分析文件:百度网盘 链接: 提取码: 0000 一、nmon配置及使用 通过xfpt工具把nmon包上传到新建的/usr/local/nmon目录下 在nmon目录下解压nmon包 tar -zxvf nmon16e_mpginc.tar

【语音告警】博灵智能语音报警灯JavaScript循环播报场景实例-语音报警灯|声光报警器|网络信号灯

功能说明 本文将以JavaScript代码为实例,讲解如何通过JavaScript代码调用博灵语音通知终端 A4实现声光语音告警。主要博灵语音通知终端如何实现无线循环播报或者周期播报的功能。 本代码实现HTTP接口的声光语音播报,并指定循环次数、播报内容。由于通知终端采用TTS语音合成技术,所以本次案例中无需预先录制音频。 代码实战 为了通过JavaScript调用博灵语音通知终端,实现HT