一、grafana邮件告警

grafana>4.0版本可以代替prometheus自带的alertmanager使用,本次版本 Version 9.2.4,但是实测邮件告警没有alertmanager好用。大多数情况grafana只是用来查看监控大盘的,而负责报警还是使用alertmanager。
在这里插入图片描述
一、grafana9.4配置邮件告警

  • 我这里测试使用邮件告警方式很慢,不知道是虚拟机问题还是网络问题
    1、先配置grafana发送邮箱
(1) 编辑grafana发件配置文件
vim cat /usr/share/grafana/conf/defaults.ini 
#################################### SMTP / Emailing #####################
[smtp]
enabled = true              # 这个开启
host = smtp.qq.com:25       # 这里选择发件服务器地址或写成smtp.qq.com:465
user = 1107916963@qq.com    # 发件人地址
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = fecmtfzctecigcid # 发件人密码
cert_file =
key_file =
skip_verify = false
from_address = 1107916963@qq.com # 发件人地址
from_name = Grafana
ehlo_identity =
startTLS_policy =

[emails]
welcome_email_on_sign_up = false
templates_pattern = emails/*.html, emails/*.txt
content_types = text/html

(2) 重启grafana服务
# systemctl restart grafana-server

2、测试grafana邮件发送
(1) 选择alerting——Contact points——编辑默认报警方式
在这里插入图片描述
(2) 填写收件人和发送测试内容——选择Test测试报警功能
在这里插入图片描述
在这里插入图片描述
3、配置Notification policies报警策略
(1) 直接选择默认策略——编辑
在这里插入图片描述
(2)关联步骤2中的邮件报警——其他保持默认——保存
在这里插入图片描述
4、配置报警规则
(1) 选择一个报警表盘——会多出一个Alert——创建报警规则(table方式的表盘不支持报警)
在这里插入图片描述
(2)增加一个D的报警策略:对B监控设置报警规则,表示平均值>1时出发告警,点击下面run
WHEN avg() OF B is ABOVE 1
在这里插入图片描述
(3) 设置检测动作
在这里插入图片描述
(4)设置告警描述信息
在这里插入图片描述
(5)这里可以这只自定义标签,如果没有自定义标签就直接保存就可以了
在这里插入图片描述
(6)之后就时收邮件了
在这里插入图片描述
在这里插入图片描述

二、alertmanager邮件告警

grafana主要用于监控大盘的查看,而报警是通过alertmanager实现的
alertmanager是一个独立的报警模块,需要独立安装部署。
配置钉钉或微信报警 https://blog.csdn.net/weixin_43266367/article/details/129131147
1、下载安装包并启动alertmanager服务

(1)下载安装并启动
# wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz

# cat /usr/lib/systemd/system/alertmanager.service 
[Unit]
Description=alert-manager for linux server
Documentation=https://prometheus.io/
After=network.target

[Service]
WorkingDirectory=/usr/local/alertmanager/
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml --storage.path=/usr/local/alertmanager/data/
Restart=on-failure

[Install]
WantedBy=multi-user.target

# systemctl enable alertmanager
# systemctl start alertmanager
# netstat  -npult|grep alert
tcp6       0      0 :::9093                 :::*                    LISTEN      9908/alertmanager   
tcp6       0      0 :::9094                 :::*                    LISTEN      9908/alertmanager   
udp6       0      0 :::9094                 :::*                                9908/alertmanager

(2)能访问到告警面说明部署正常
http://192.168.1.200:9093

在这里插入图片描述
2、修改配置文件并设置报警方式(配置文件中可以有中文注释)

(1) 修改配置文件
# cat /usr/local/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m                    # 持续5分钟没有收到告警标记就会认为已经发送过了
  smtp_from: "1107916963@qq.com"         # 配置发件邮箱信息
  smtp_smarthost: 'smtp.qq.com:25'
  smtp_auth_username: "1107916963@qq.com"
  smtp_auth_password: "fecmtfzctecigcid"
  smtp_require_tls: false                # 禁用TLS传输方式

templates:                              # 可以不写,使用默认模版
  - '/etc/alertmanager/template/*.tmpl' # 指定告警通知时使用的模版,如果不写会使用默认模版

route:                                  # 路由配置:用于判断把告警信息发给谁,路由可以有多个             
  group_by: ['alertname']  # 定义分组名称,promethues支持告警分组功能:满足规则的报警会被合并到一个通知中
  group_wait: 10s         # 分组等待时间间隔:在这个时间内收到的告警信息会合并到之前的告警信息中
  group_interval: 10s      # 定义相同组间发送告警通知的时间间隔
  repeat_interval: 30m     # 定义报警重复时间间隔
  receiver: 'email'                     # 把告警信息发给哪一个接收者(对应reveivers中的name标签)
  routes:                  # 配置子路由:把特定的报警发送给特定的人或特定的地址比如mail 钉钉 微信
    - match:
        system: node     # 自定义一个标签(对应rule.yml中的labels标签)
    receiver: 'qqmail'   # 把带有system:node的标签的告警信息发送给qqmail(对应reveivers中的子name标签)

receivers:                              # 接收者配置
  - name: 'email'                       # 接收者名称(对应receiver标签)
    email_configs:                      # email配置参数,还支持wechat_configs、webhook_configs
    - to: "wenqiangit@163.com,xxxxxx@163.com"        # 接收者邮箱     
      send_resolved: true
      headers:                          # 这个不写也可以
        subject: "Grafana告警"           # 自定义邮件主题信息, 可以只写这一条
        from: "Grafana"                 # 自定义由谁发出的信息
        to: "OP"                        # 自定义要发给谁
  - name: 'qqmail'                      # 接收者名称(对应子路由中的receiver标签)
    email_configs:
    - to: "1107916963@qq.com"
      send_resolved: true
      headers:
        subject: "Grafana告警"


inhibit_rules:                          # 抑制配置:防止同一条信息重复发送
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

# systemctl restart alertmanager

3、prometheus关联alertmanager并配置告警规则

(1) 修改prometheus配置文件
# vim /usr/local/prometheus/prometheus.yml
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['192.168.1.200:9093']         # 增加alertmanager地址

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - "/usr/local/prometheus/rules/rules.yml"    # 增加alertmanager的告警规则文件


(2) 创建并配置alertmanager告警规则文件
# mkdir -p /usr/local/prometheus/rules
# vim /usr/local/prometheus/rules/rules.yml
groups:
- name: node_alert-rule1       # 第一个告警规则
  rules:
  - alert: cpu_alert           # 告警名称
    expr: 100 - avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) * 100 > 5    # 告警语句
    for: 1m                    # 持续1分钟就发邮件告警
    labels:
      level: warning           # 告警级别
      system: node             # 这里可以自定义标签对应alertmanager.yml中的子路由标签
    annotations:
      description: "instance: {{ $labels.instance }} , cpu usage is too high ! value: {{ $value }}" # 告警内容
      summary: "cpu usage is too high" # 描述信息
- name: node_alert-rule2       # 第二个告警规则
  rules:
  - alert: 硬盘报警
    expr: (node_filesystem_size_bytes{mountpoint="/",device="/dev/sda3"} - node_filesystem_free_bytes{mountpoint="/"})/node_filesystem_size_bytes{mountpoint="/"} * 100 > 70
    for: 1m
    labels:
      level: warning
    annotations:
      description: "报警服务器: {{ $labels.instance }} ,磁盘空间 {{ $labels.mountpoint }} 已使用: {{ $value }}"
      summary: "硬盘使用率太高了"

- name: hostdown     # 第三个告警
  rules:
    - alert: hostsDown
      expr: up == 0
      for: 1m
      annotations:
         summary: "主机:{{ $labels.hostname }},{{ $labels.instance }} 关机"


(3) 重启prometheus并查看监控面板
# systemctl restart promethues
正常情况告警规则会处于inactive状态
如果已经触发告警就会处于Pending状态
如果Pending状态已经持续1分钟就会进入Firing状态并发送邮件

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

三、prometheus备份

1、备份prometheus data目录
2、做快照

# 备份生成snapshot快照,备份的快照默认存放在data/snapshots下
curl -XPOST http://prometheusIP:端口/api/v1/admin/tsdb/snapshot
备份成功返回结果:
{"status":"success","data":{"name":"20191220T012427Z-21e0e532e8ca3423"}}

#还原
利用api方式制作成snapshot后,还原时将snapshot中的文件覆盖到data目录下,重启prometheus即可!

https://www.bboy.app/2020/07/01/prometheus备份迁移/
https://www.bbsmax.com/A/pRdBNZkadn/

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐