• prometheus学习系列九: Prometheus AlertManager使用


     在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.0.linux-amd64.tar.gz [root@node00 src]# ll total 126440 drwxr-xr-x 2 3434 3434 93 Sep 3 11:39 alertmanager-0.19.0.linux-amd64 -rw-r--r-- 1 root root 24201990 Sep 3 11:39 alertmanager-0.19.0.linux-amd64.tar.gz -rw-r--r-- 1 root root 6930 Sep 25 04:33 a.txt -rw-r--r-- 1 root root 39965581 Sep 24 20:53 consul_1.6.1_linux_amd64.zip -rw-r--r-- 1 root root 4077560 Sep 10 20:20 consul-template_0.22.0_linux_amd64.tgz drwxr-xr-x. 2 root root 6 Nov 5 2016 debug drwxr-xr-x. 2 root root 6 Nov 5 2016 kernels -rw-r--r-- 1 root root 8083296 Sep 20 21:08 node_exporter-0.18.1.linux-amd64.tar.gz -rw-r--r-- 1 root root 53127635 Sep 20 05:05 prometheus-2.12.0.linux-amd64.tar.gz

    # 部署到特定位置 [root@node00 src]#
    mv alertmanager-0.19.0.linux-amd64 /usr/local/prometheus/ [root@node00 src]# cd /usr/local/prometheus/ # 查看目录情况 [root@node00 prometheus]# ll total 4 drwxr-xr-x 2 3434 3434 93 Sep 3 11:39 alertmanager-0.19.0.linux-amd64 lrwxrwxrwx 1 prometheus prometheus 29 Sep 20 05:06 prometheus -> prometheus-2.12.0.linux-amd64 drwxr-xr-x 6 prometheus prometheus 4096 Sep 26 06:01 prometheus-2.12.0.linux-amd64
    # 创建软连接 [root@node00 prometheus]#
    ln -s alertmanager-0.19.0.linux-amd64 alertmanager
    # 确认软连接 [root@node00 prometheus]# ll total
    4 lrwxrwxrwx 1 root root 31 Sep 27 03:12 alertmanager -> alertmanager-0.19.0.linux-amd64 drwxr-xr-x 2 3434 3434 93 Sep 3 11:39 alertmanager-0.19.0.linux-amd64 lrwxrwxrwx 1 prometheus prometheus 29 Sep 20 05:06 prometheus -> prometheus-2.12.0.linux-amd64 drwxr-xr-x 6 prometheus prometheus 4096 Sep 26 06:01 prometheus-2.12.0.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:9093

    配置完毕后重启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: 100 - ((node_filesystem_avail_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100) / 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  1.5G   49G   3% /
    
    # 手工生成一个大文件
    [root@node01 ~]# dd if=/dev/zero of=bigfile bs=1M count=40000
    40000+0 records in
    40000+0 records out
    41943040000 bytes (42 GB) copied, 18.8162 s, 2.2 GB/s
    # 节点上面确认磁盘是超过我们之前的报警设置值了
    [root@node01 ~]# df -h  |grep "/$"
    /dev/mapper/centos-root   50G   41G  9.6G  81% /

    等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: 1072892917@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=40000

    注意: 如果调试过程中有问题, 请查看/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配置文件,有此属性。

    其他

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

  • 相关阅读:
    Zabbix通过进程名监控进程状态配置详解
    kibana 统计field所有值百分比
    使用Logstash filter grok过滤日志文件
    python 修改文件内容
    清理elasticsearch的索引
    zabbix3.2.1安装graphtrees插件
    snmpwalk用法
    Zabbix通过SNMPv2监控DELL服务器的硬件信息
    zabbix上的宏(macro)介绍
    解决TeamViewer无法按给定网络地址联系伙伴
  • 原文地址:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_liunx_65_prometheus_alertmanager.html
Copyright © 2020-2023  润新知