在Prometheus的报警系统中,是分为2个部分的, 规则是配置是在prometheus中的, prometheus组件完成报警推送给alertmanager的, alertmanager然后管理这些报警信息,包括静默、抑制、聚合和通过电子邮件、on-call通知系统和聊天平台等方法发送通知。

主要步骤如下

  • 安装和部署alertmanager
  • 在prometheus中配置alertmanager的地址信息。
  • 在prometheus中设置报警规则
  • 在alertmanager配置接受者信息等

安装和部署alertmanager

整体来说,prometheus的所有套件都是比较简单的,这里提供一个简单部署方式。

# 进入下载目录
[root@node00 ~]# cd /usr/src/
# 下载alertmanager
[root@node00 src]# wget https://github.com/prometheus/alertmanager/releases/download/v0.19.0/alertmanager-0.19.0.linux-amd64.tar.gz
# 解压
[root@node00 src]# tar xf alertmanager-0.19..linux-amd64.tar.gz
[root@node00 src]# ll
total
drwxr-xr-x Sep : alertmanager-0.19..linux-amd64
-rw-r--r-- root root Sep : alertmanager-0.19..linux-amd64.tar.gz
-rw-r--r-- root root Sep : a.txt
-rw-r--r-- root root Sep : consul_1..1_linux_amd64.zip
-rw-r--r-- root root Sep : consul-template_0..0_linux_amd64.tgz
drwxr-xr-x. root root Nov debug
drwxr-xr-x. root root Nov kernels
-rw-r--r-- root root Sep : node_exporter-0.18..linux-amd64.tar.gz
-rw-r--r-- root root Sep : prometheus-2.12..linux-amd64.tar.gz # 部署到特定位置
[root@node00 src]# mv alertmanager-0.19..linux-amd64 /usr/local/prometheus/
[root@node00 src]# cd /usr/local/prometheus/
# 查看目录情况
[root@node00 prometheus]# ll
total
drwxr-xr-x Sep : alertmanager-0.19..linux-amd64
lrwxrwxrwx prometheus prometheus Sep : prometheus -> prometheus-2.12..linux-amd64
drwxr-xr-x prometheus prometheus Sep : prometheus-2.12..linux-amd64
# 创建软连接
[root@node00 prometheus]# ln -s alertmanager-0.19..linux-amd64 alertmanager
# 确认软连接
[root@node00 prometheus]# ll
total
lrwxrwxrwx root root Sep : alertmanager -> alertmanager-0.19..linux-amd64
drwxr-xr-x Sep : alertmanager-0.19..linux-amd64
lrwxrwxrwx prometheus prometheus Sep : prometheus -> prometheus-2.12..linux-amd64
drwxr-xr-x prometheus prometheus Sep : prometheus-2.12..linux-amd64
# 准备开机自启配置文件
[root@node00 alertmanager]# cd /usr/lib/systemd/system/
[root@node00 system]# cat alertmanager.service
[Unit]
Description=alertmanager
After=network.target [Service]
User=prometheus
Group=prometheus
WorkingDirectory=/usr/local/prometheus/alertmanager
ExecStart=/usr/local/prometheus/alertmanager/alertmanager  --log.level=debug --log.format=json
# ExecStart=/usr/local/prometheus/alertmanager/alertmanager  
[Install] WantedBy=multi-user.target 

# 修改权限
[root@node00 alertmanager]# chown prometheus:prometheus /usr/local/prometheus/alertmanager -R
# 启动
[root@node00 alertmanager]# systemctl restart alertmanager
# 查看状态
[root@node00 alertmanager]# systemctl status alertmanager
# 开机自启
[root@node00 system]# systemctl enable alertmanager

在prometheus集成alertmanager

部署完毕alertmanager, 需要告知prometheus告警信息推送的位置, 通过如下配置即可完成。相对比较简单。

# /usr/local/prometheus/prometheus/prometheus.yml
# 修改此文件中的alerting的配置如下配置
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.100.10:

配置完毕后重启prometheus服务。

创建报警规则

为了能先走通流程,这里的报警规则先弄一个简单一点的。

[root@node00 prometheus]# vim prometheus.yml
rule_files:
- "rules/*rules.yml"
# - "second_rules.yml" [root@node00 prometheus]# mkdir rules
[root@node00 prometheus]# cat rules/node_rules.yml
groups:
- name: node-alert
rules:
- alert: disk-full
expr: - ((node_filesystem_avail_bytes{mountpoint="/",fstype=~"ext4|xfs"} * ) / node_filesystem_size_bytes {mountpoint="/",fstype=~"ext4|xfs"})
for: 1m
labels:
serverity: page
annotations:
summary: "{{ $labels.instance }} disk full "
description: "{{ $labels.instance }} disk > {{ $value }} "

重启prometheus服务,可以在web界面看到如下信息。

查看当前是否有报警信息

目前看是没有磁盘满的, 我们这里配合下触发这个报警规则,

# 注意这个是在节点01上面执行的
[root@node01 ~]# df -h |grep "/$"
/dev/mapper/centos-root 50G .5G 49G % / # 手工生成一个大文件
[root@node01 ~]# dd if=/dev/zero of=bigfile bs=1M count=
+ records in
+ records out
bytes ( GB) copied, 18.8162 s, 2.2 GB/s
# 节点上面确认磁盘是超过我们之前的报警设置值了
[root@node01 ~]# df -h |grep "/$"
/dev/mapper/centos-root 50G 41G .6G % /

等1分钟后在此查看alert信息,如下。

配置消息接收

上面的消息信息已经从prometheus推送给alertmanager了, 我们已经可以在alertmanager的web管理界面看到对应的报警信息,但是我们还没有配置如何让alertmanager把这些信息推送我们的社交软件上面去。

由于邮件系统大家用的比较多,这里就是用qq邮箱进行后续试验。

[root@node00 alertmanager]# cat alertmanager.yml
global:
resolve_timeout: 5m ###################################
smtp_auth_username: "1072892917@qq.com"
smtp_auth_password: "这是你的QQ邮箱授权码而不是密码,切记切记,具体授权码获取看后面的本文末尾介绍有"
#smtp_auth_secret: ""
smtp_require_tls: false
smtp_smarthost: "smtp.qq.com:465"
smtp_from: "1072892917@qq.com"
#################################### route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'email-zhaojiedi' receivers:
- name: 'email-zhaojiedi'
email_configs:
- send_resolved: true
to: @qq.com
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']

配置完毕alertmanager重启alertmanager,可以收到如下邮件信息。

测试邮件发送

使用如下命令触发报警

[root@node01 ~]# dd if=/dev/zero of=bigfile bs=1M count=

注意: 如果调试过程中有问题, 请查看/var/log/message信息,获取alertmanager发送邮件的错误信息。

测试报警恢复通知

使用如下命令清理文件

[root@node01 ~]# >bigfile

可以收到如下邮件:

我在调试过程中常用错误

问题1:

   does not advertise the STARTTLS extension:

解决方案:

  smtp_require_tls: false即可。

问题2:

  email.loginAuth auth: 535 Error

解决方案:

  smtp_auth_password: 这个配置项设置为授权码,而不是QQ邮箱登陆,详细获取授权码参考地址: https://zhidao.baidu.com/question/878811848141402332.html

问题3:

  一切配置正确,就是发不出去。

解决方案:

  查看是否使用了25端口,默认云厂商会禁用25端口, 可以向云厂商申请解封25端口,或者使用465端口。

问题4:

  报警消息能发送,但是报警恢复消息收不到。

解决方案:

  缺少 send_resolved: true 配置文件, 请确保对应email_config配置文件,有此属性。

其他

如果配置中有问题,可以给我留言。

prometheus学习系列九: Prometheus AlertManager使用的更多相关文章

  1. Prometheus学习系列(九)之Prometheus 联盟、迁移

    前言 本文来自Prometheus官网手册 和 Prometheus简介 FEDERATION 允许Prometheus服务器从另一台Prometheus服务器抓取选定的时间序列. 一,用例 联盟有不 ...

  2. Prometheus学习系列(六)之Prometheus 查询说明

    前言 本文来自Prometheus官网手册和 Prometheus简介 Prothetheus查询 Prometheus提供一个函数式的表达式语言PromQL (Prometheus Query La ...

  3. Prometheus学习系列(五)之Prometheus 规则(rule)、模板配置说明

    前言 本文来自Prometheus官网手册1.2.3.4和 Prometheus简介1.2.3.4 记录规则 一.配置规则 Prometheus支持两种类型的规则,这些规则可以定期配置,然后定期评估: ...

  4. Prometheus学习系列(二)之Prometheus FIRST STEPS

    前言 本文来自Prometheus官网手册 和 Prometheus简介 说明 Prometheus是一个监控平台,通过在监控目标上的HTTP端点来收集受监控目标的指标.本指南将向您展示如何使用Pro ...

  5. prometheus学习系列五: Prometheus配置文件

    在prometheus监控系统,prometheus的职责是采集,查询和存储和推送报警到alertmanager.本文主要介绍下prometheus的配置文件. 全局配置文件简介 默认配置文件 [ro ...

  6. prometheus学习系列一: Prometheus简介

    Prometheus简介 prometheus受启发于Google的Brogmon监控系统(相似kubernetes是从Brog系统演变而来), 从2012年开始由google工程师Soundclou ...

  7. Prometheus学习系列(一)之Prometheus简介

    前言 本文来自Prometheus官网手册 和 Prometheus简介 什么是prometheus? Prometheus是一个最初在SoundCloud上构建的开源系统监视和警报工具包.自2012 ...

  8. prometheus学习系列十一: Prometheus 安全

    prometheus安全 我们这里说的安全主要是基本认证和https2种, 目前这2种安全在prometheus中都没有的, 需要借助第三方软件实现, 这里以nginx为例. 基本认证 配置基本认证 ...

  9. prometheus学习系列十一: Prometheus pushgateway的使用

    由于网络问题或者安全问题,可能我们的数据无法直接暴露出一个entrypoint 给prometheus采集. 这个时候可能就需要一个pushgateway来作为中间者完成中转工作.  promethe ...

随机推荐

  1. ESA2GJK1DH1K基础篇: 移植官方MQTT包,让TCP实现MQTT功能(以GPRS模块为例)

    前言 这节代码将在这一节的基础上实现 拷贝第一节测试里面的MQTT文件夹到当前工程 当前工程建个MQTT的文件夹,用于存放那个MQTT文件夹里面的内容 添加文件到里面 注意:::: 实际源码拷贝位置 ...

  2. 从零和使用mxnet实现线性回归

    1.线性回归从零实现 from mxnet import ndarray as nd import matplotlib.pyplot as plt import numpy as np import ...

  3. 【技术博客】Django中文件下载的实现

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. Django中文件下载的实现 1.背景 在VisualPy ...

  4. VUE:页面跳转时传递参数,及参数获取

    https://www.cnblogs.com/zhongchao666/p/9679807.html https://blog.csdn.net/mf_717714/article/details/ ...

  5. 10 张图带你深入理解 Docker 容器和镜像

    这篇文章希望能够帮助读者深入理解 Docker 的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中的容器之间的区别. 当我对 Docker 技术还是一知半解的 ...

  6. Nginx 整合 Lua 实现动态生成缩略图

    原文地址:Nginx 整合 Lua 实现动态生成缩略图 博客地址:http://www.extlight.com 一.前提 最近在开发一个项目,涉及到缩略图的功能,常见的生成缩略图的方案有以下几个: ...

  7. 【视频开发】伽马校正(gamma correction)学习笔记

    我相信几乎所有做图像处理方面的人都听过伽马校正(Gamma Correction)这一个名词,但真正明白它是什么.为什么要有它.以及怎么用它的人其实不多.我也不例外.  最初我查过一些资料,但很多文章 ...

  8. 屏蔽打开文件时提示“您尝试打开的文件xxx.xls的格式与文件扩展名指定的格式不一致。打开文件前请验证文件没有损坏且来源可信。是否立即打开该文 件?”

    修改注册表解决 1.打开注册表编辑器 方法:开始 -> 运行 -> 输入regedit -> 确定 2.找到注册表子项 HKEY_CURRENT_USER\Software\Micr ...

  9. select列表遍历和触发事件

    1.以下两种都是jquery获取select列表被选中的value.var strText=$("#select_id").find("option:selected&q ...

  10. Tensorflow2 快速简单安装命令

    使用如下命令 pip3 install numpy pandas matplotlib sklearn tensorflow==2.0.0-alpha0 -i https://pypi.doubani ...