前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Alertmanager 安装与使用

Alertmanager 安装与使用

作者头像
py3study
发布于 2020-07-23 01:17:52
发布于 2020-07-23 01:17:52
5.6K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

一、概述

Alertmanager是一个独立的告警模块,接收Prometheus等客户端发来的警报,之后通过分组、删除重复等处理,并将它们通过路由发送给正确的接收器;告警方式可以按照不同的规则发送给不同的模块负责人,Alertmanager支持Email, Slack,等告警方式, 也可以通过webhook接入钉钉等国内IM工具。

Prometheus的警报分为两个部分。Prometheus服务器中的警报规则将警报发送到Alertmanager。该Alertmanager 然后管理这些警报,包括沉默,抑制,聚集和通过的方法,如电子邮件发出通知,对呼叫通知系统,以及即时通讯平台。

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

设置和配置 Alertmanager

配置Prometheus与Alertmanager对话

在Prometheus中创建警报规则

分组

分组将类似性质的警报分类为单个通知。当许多系统同时发生故障并且可能同时触发数百到数千个警报时,此功能特别有用。

示例:发生网络分区时,群集中正在运行数十个或数百个服务实例。您有一半的服务实例不再可以访问数据库。Prometheus中的警报规则配置为在每个服务实例无法与数据库通信时为其发送警报。结果,数百个警报被发送到Alertmanager。

作为用户,人们只希望获得一个页面,同时仍然能够准确查看受影响的服务实例。因此,可以将Alertmanager配置为按警报的群集和警报名称分组警报,以便它发送一个紧凑的通知。

警报的分组,分组通知的时间以及这些通知的接收者由配置文件中的路由树配置。

沉默

沉默是一种简单的特定时间静音提醒的机制。一种沉默是通过匹配器来配置,就像路由树一样。传入的警报会匹配RE,如果匹配,将不会为此警报发送通知。

在Alertmanager的Web界面中配置沉默。

抑制

抑制是指当警报发出后,停止重复发送由此警报引发其他错误的警报的机制。

例如,当警报被触发,通知整个集群不可达,可以配置Alertmanager忽略由该警报触发而产生的所有其他警报,这可以防止通知数百或数千与此问题不相关的其他警报。

抑制机制可以通过Alertmanager的配置文件来配置。

高可用性

Alertmanager支持配置以创建高可用性集群。

Alert的三种状态:

1. pending:警报被激活,但是低于配置的持续时间。这里的持续时间即rule里的FOR字段设置的时间。改状态下不发送报警。

2. firing:警报已被激活,而且超出设置的持续时间。该状态下发送报警。

3. inactive:既不是pending也不是firing的时候状态变为inactive

prometheus触发一条告警的过程:

prometheus--->触发阈值--->超出持续时间--->alertmanager--->分组|抑制|静默--->媒体类型--->邮件|钉钉|微信等。

二、AlertManager 配置邮件告警

AlertManager 默认配置文件为 alertmanager.yml,在容器内路径为 /etc/alertmanager/alertmanager.yml,默认配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'web.hook'
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

简单介绍一下主要配置的作用:

global: 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。 route: 用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。 receivers: 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式。 inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。

自定义邮件模板

AlertManager 支持自定义邮件模板配置的,创建数据目录。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/alertmanager/template
mkdir -p /data/alertmanager/storage
chmod 777 -R /data/alertmanager/storage

新建一个模板文件 email.tmpl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi /data/alertmanager/template/email.tmpl

内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{ define "email.from" }}11111111@qq.com{{ end }}
{{ define "email.to" }}22222222@qq.com{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }}<br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt.Format "2019-08-04 16:58:15" }} <br>
=========end==========<br>
{{ end }}
{{ end }}

说明:

define 用来定义变量,配置3个变量,分别是:email.from、email.to、email.to.html ,可以在 alertmanager.yml 文件中直接配置引用。

这里 email.to.html 就是要发送的邮件内容,支持 Html 和 Text 格式。为了显示好看,采用 Html 格式简单显示信息。

{{ range .Alerts }} 是个循环语法,用于循环获取匹配的 Alerts 的信息,下边的告警信息跟上边默认邮件显示信息一样,只是提取了部分核心值来展示。

基于docker安装

编辑配置文件,配置一下使用 Email 方式通知报警信息,这里以 QQ 邮箱为例,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi /data/alertmanager/alertmanager.yml

内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 全局配置项
global:
  resolve_timeout: 5m #超时,默认5min
  #邮箱smtp服务
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_from: '11111111@qq.com'
  smtp_auth_username: '11111111@qq.com'
  smtp_auth_password: '123456'
  smtp_require_tls: false

# 定义模板信息
templates:
  - 'template/*.tmpl'   # 路径

# 路由
route:
  group_by: ['alertname'] # 报警分组依据
  group_wait: 10s #组等待时间
  group_interval: 10s # 发送前等待时间
  repeat_interval: 1h #重复周期
  receiver: 'mail' # 默认警报接收者

# 警报接收者
receivers:
- name: 'mail' #警报名称
  email_configs:
  - to: '{{ template "email.to" . }}'  #接收警报的email
    html: '{{ template "email.to.html" . }}' # 模板
    send_resolved: true

# 告警抑制
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

说明:

全局配置:

{{ template "email.from" . }} 意思是,从/data/alertmanager/template文件夹中,引入变量email.from

注意:smtp_require_tls: false,默认是true。一定要改成false才能发送邮件。

告警抑制:

抑制的功能其实就是根据label进行去重的操作,上面的配置就会把warning的去掉,告警发送的时候只转发critical的。

下面的equal是合并的条件,其实就是label必须相同的才可以进行抑制。这个根据需求进行相同的选择就行,一般情况alertname能满足条件。

启动服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d \
  -p 9093:9093 \
  --name alertmanager \
  --restart=always \
  -v /data/alertmanager:/etc/alertmanager \
  -v /data/alertmanager/storage:/alertmanager \
  prom/alertmanager

访问网页

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://ip地址:9093

效果如下:

三、prometheus配置

配置文件

修改prometheus.yaml,我的prometheus是在docker中运行的

创建目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/prometheus/data
mkdir -p /data/prometheus/rules
chmod 777 -R /data/prometheus/data

启动参数如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d \
  --restart=always \
  --name prometheus \
  -p 9090:9090 \
  -v /data/prometheus:/etc/prometheus \
  -v /data/prometheus/data:/prometheus \
  -e TZ=Asia/Shanghai \
  prom/prometheus

/data/prometheus目录结构如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./
├── data
├── prometheus.yml
└── rules
    ├── memory_over.yml
    └── node_down.yml

其中data,就是prometheus数据文件。由于文件过多,这里就不展示了。

修改文件:/data/prometheus/prometheus.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 192.168.31.229:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - "rules/*.yml"

alerting 里面,指定Alertmanager 的地址。

rule_files 里面,指定了告警规则。

node_down.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
groups:
- name: node-up
  rules:
  - alert: node-up
    expr: up{job="node-exporter"} == 0
    for: 15s
    labels:
      severity: 1
      team: node
    annotations:
      summary: "{{ $labels.instance }} 已停止运行!"
      description: "{{ $labels.instance }} 检测到异常停止!请重点关注!!!"

memory_over.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
groups:
- name: example
  rules:
  - alert: NodeMemoryUsage
    expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: High Memory usage detected"
      description: "{{$labels.instance}}: Memory usage is above 80% (current value is:{{ $value }})"

 expr 是计算公式,(1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 表示获取内存使用率。

在grafana中,就可以看到。

注意:去掉里面的 {instance=~"$node"}即可。

 重启prometheus

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker restart prometheus

访问告警页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://ip地址:9090/alerts

效果如下:

点击一下,就会显示完整的配置

四、测试报警

这里直接修改 /data/prometheus/rules/memory_over.yml文件,告警阈值改为10

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 10

 重启prometheus

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker restart prometheus

等待1分钟,会出现Pending

再等待一分钟,会出现Firing

查看邮件

查看alertmanager日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker logs -f alertmanager

输出如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
level=info ts=2020-06-28T08:33:46.794Z caller=coordinator.go:131 component=configuration msg="Completed loading of configuration file" file=/etc/alertmanager/alertmanager.yml
level=info ts=2020-06-28T08:33:46.799Z caller=main.go:485 msg=Listening address=:9093
level=info ts=2020-06-28T08:33:48.774Z caller=cluster.go:648 component=cluster msg="gossip not settled" polls=0 before=0 now=1 elapsed=2.000472056s

如果没有收到邮件,请确保上面的配置参数正确。查看alertmanager日志,是否有报错信息。

本文参考链接:

https://www.cnblogs.com/gschain/p/11697200.html

https://blog.csdn.net/aixiaoyang168/article/details/98474494

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
SpringBoot入门教程,吃透这些超过90%的Java面试者
动力节点王鹤老师的SpringBoot入门系列课程,通俗易懂,基于SpringBoot2.4版本讲解。
动力节点铁杆粉丝儿
2022/03/01
1.1K0
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day15】—— Spring框架1
  本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
陈哈哈
2021/12/31
4670
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day15】—— Spring框架1
Spring Boot 实现跨域的 5 种方式,总有一种适合你,建议收藏!!
点击关注公众号,Java干货及时送达 一、为什么会出现跨域问题 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。 同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port) 二、什么是
Java技术栈
2022/07/26
4.9K0
Spring Boot 实现跨域的 5 种方式,总有一种适合你,建议收藏!!
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day26】—— Spring框架3
  本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
陈哈哈
2021/12/31
3210
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day26】—— Spring框架3
Spring Boot:处理跨域问题
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
HLee
2021/07/03
2K0
Spring Boot:处理跨域问题
Java岗大厂面试百日冲刺【Day43】— Shrio1 (日积月累,每日三题)
  本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
陈哈哈
2021/12/31
5710
Java岗大厂面试百日冲刺【Day43】— Shrio1 (日积月累,每日三题)
Spring Boot 跨域解决方式
要解释跨域,先要了解同源策略,所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同、Host(ip)相同、端口相同,否则访问将被禁止,该访问也就被称为跨域访问。
数媒派
2022/12/01
6510
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day20】—— MyBatis2
  本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
陈哈哈
2021/12/31
9780
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day20】—— MyBatis2
2021 最新版 Spring Boot 速记教程
结束了前面的《Spring 源码深度学习》,八月给自己放松了一下,看了几本小说和电视剧,还有写一个工作中用到的小工具,周报数据渲染的前端界面(前端是真的难)。
好好学java
2021/04/30
8320
2021 最新版 Spring Boot 速记教程
SpringBoot使用CORS解决跨域请求问题
同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。 同源策略是浏览器安全的基石。
朝雨忆轻尘
2019/06/19
6.4K0
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day16】—— Spring框架2
  本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
陈哈哈
2021/12/31
6270
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day16】—— Spring框架2
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day05】——Java高级篇
        @Controller:标识一个Spring类是SpringMVC controller处理器
陶然同学
2023/02/24
1960
SpringBoot框架(由浅入深,深度解读)
Spring Boot是一个简化Spring开发的框架。用来监护spring应用开发,约定大于配置,去繁就简,just run 就能创建一个独立的,产品级的应用。
三哥
2020/01/20
1.9K0
SpringBoot框架(由浅入深,深度解读)
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day51】—— tomcat
  本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
陈哈哈
2021/12/31
1.1K0
Spring Boot 2.x (三): 跨域处理方案之 Cor
URI 文法由 URI 协议名(例如 “http”,“ftp”,“mailto” 或 “file”),一个冒号,和协议对应的内容所构成。特定的协议定义了协议内容的语法和语义,而所有的协议都必须遵循一定的 URI 文法通用规则,亦即为某些专门目的保留部分特殊字符。
阿宝哥
2019/11/05
1.5K0
Spring Security---跨域访问和跨站攻击问题详解
说到跨域访问,必须先解释一个名词:同源策略。所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同、Host(ip)相同、端口相同的条件,否则访问将被禁止,该访问也就被称为跨域访问。
大忽悠爱学习
2021/12/07
1.7K0
Spring Security---跨域访问和跨站攻击问题详解
SpringBoot的Controller层常用注解
@Controller : 加在类上面的注解,使得类里面的每个方法都返回一个视图页面。
Java学术趴
2022/06/29
3.3K0
SpringBoot的Controller层常用注解
SpringBoot系列(七) 分分钟学会SpringBoot多种跨域解决方式​
 跨域是指不同域名之间的相互访问,这是由浏览器的同源策略决定的,是浏览器对JavaScript施加的安全措施,防止恶意文件破坏。
全栈学习笔记
2022/03/31
7540
SpringBoot系列(七) 分分钟学会SpringBoot多种跨域解决方式​
极简SpringBoot指南-Chapter03-基于SpringBoot的Web服务
w4ngzhen/springboot-simple-guide: This is a project that guides SpringBoot users to get started quickly through a series of examples (github.com)
w4ngzhen
2023/10/17
3480
springboot&ajax&has been blocked by CORS policy: No 'Access-Control-Allow-Origin
Access to XMLHttpRequest at 'http://localhost:8080/user/login1' from origin 'http://localhost:59033' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
微风-- 轻许--
2019/05/25
11.1K0
推荐阅读
相关推荐
SpringBoot入门教程,吃透这些超过90%的Java面试者
更多 >
LV.1
北京软安Java开发攻城狮
目录
  • 一、概述
  • 二、AlertManager 配置邮件告警
    • 自定义邮件模板
    • 基于docker安装
  • 三、prometheus配置
    • 配置文件
    • 访问告警页面
  • 四、测试报警
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档