首页 > 系统相关 >Linux部署Prometheus+Alertmanager并配置钉钉告警

Linux部署Prometheus+Alertmanager并配置钉钉告警

时间:2023-05-09 14:45:03浏览次数:49  
标签:Alertmanager dingtalk prometheus Prometheus Linux 告警 root localhost

一、Prometheus告警简介

告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。

Linux部署Prometheus+Alertmanager并配置钉钉告警

在Prometheus中一条告警规则主要由以下几部分组成:

告警名称:用户需要为告警规则命名,当然对于命名而言,需要能够直接表达出该告警的主要内容

告警规则:告警规则实际上主要由PromQL进行定义,其实际意义是当表达式(PromQL)查询结果持续多长时间(During)后出发告警

在Prometheus中,还可以通过Group(告警组)对一组相关的告警进行统一定义。当然这些定义都是通过YAML文件来统一管理的。

Alertmanager作为一个独立的组件,负责接收并处理来自Prometheus Server(也可以是其它的客户端程序)的告警信息。Alertmanager可以对这些告警信息进行进一步的处理,比如当接收到大量重复告警时能够消除重复的告警信息,同时对告警信息进行分组并且路由到正确的通知方,Prometheus内置了对邮件,Slack等多种通知方式的支持,同时还支持与Webhook的集成,以支持更多定制化的场景。

例如,目前Alertmanager还不支持钉钉,那用户完全可以通过Webhook与钉钉机器人进行集成,从而通过钉钉接收告警信息。同时AlertManager还提供了静默和告警抑制机制来对告警通知行为进行优化。

二、Alertmanager特性

告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。

Linux部署Prometheus+Alertmanager并配置钉钉告警

1、分组

分组机制可以将详细的告警信息合并成一个通知。在某些情况下,比如由于系统宕机导致大量的告警被同时触发,在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知,避免一次性接受大量的告警通知,而无法对问题进行快速定位。

例如,当集群中有数百个正在运行的服务实例,并且为每一个实例设置了告警规则。假如此时发生了网络故障,可能导致大量的服务实例无法连接到数据库,结果就会有数百个告警被发送到Alertmanager。

而作为用户,可能只希望能够在一个通知中中就能查看哪些服务实例收到影响。这时可以按照服务所在集群或者告警名称对告警进行分组,而将这些告警内聚在一起成为一个通知。

告警分组,告警时间,以及告警的接受方式可以通过Alertmanager的配置文件进行配置。

2、抑制

抑制是指当某一告警发出后,可以停止重复发送由此告警引发的其它告警的机制。

例如,当集群不可访问时触发了一次告警,通过配置Alertmanager可以忽略与该集群有关的其它所有告警。这样可以避免接收到大量与实际问题无关的告警通知。

抑制机制同样通过Alertmanager的配置文件进行设置。

3、静默

静默提供了一个简单的机制可以快速根据标签对告警进行静默处理。如果接收到的告警符合静默的配置,Alertmanager则不会发送告警通知。

静默设置需要在Alertmanager的Werb页面上进行设置。

Prometheus本身不支持告警功能,主要通过插件alertmanage来实现告警。AlertManager用于接收Prometheus发送的告警并对于告警进行一系列的处理后发送给指定的用户。

Prometheus触发一条告警的过程:

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

Linux部署Prometheus+Alertmanager并配置钉钉告警

三、实现钉钉告警

1)登录钉钉

2)创建机器人

3)获取钉钉token

4)配置钉钉webhook

5)dingtalk插件下载

1、dingtalk插件下载

1)下载插件

[root@localhost ~]# wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz

2)解压

[root@localhost ~]# tar xf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz

3)重命名

[root@localhost ~]# mv prometheus-webhook-dingtalk-2.1.0.linux-amd64 /usr/local/dingtalk

4)获取钉钉机器人

1、钉钉选择群组 ---> 群设置 ---> 智能群助手

Linux部署Prometheus+Alertmanager并配置钉钉告警

2、添加机器人

Linux部署Prometheus+Alertmanager并配置钉钉告警

Linux部署Prometheus+Alertmanager并配置钉钉告警

3、选择自定义

Linux部署Prometheus+Alertmanager并配置钉钉告警

Linux部署Prometheus+Alertmanager并配置钉钉告警

4、输入机器人名字、群组、安全设置

Linux部署Prometheus+Alertmanager并配置钉钉告警

Linux部署Prometheus+Alertmanager并配置钉钉告警

5)配置config.yml

[root@localhost ~]# cd /usr/local/dingtalk

[root@localhost dingtalk]# cp config.example.yml config.yml

[root@localhost dingtalk]# vim config.yml

 
  1. ## Request timeout
  2. # timeout: 5s
  3. ## Uncomment following line in order to write template from scratch (be careful!)
  4. #no_builtin_template: true
  5. ## Customizable templates path
  6. templates:
  7. - '/usr/local/dingtalk/template/dingtalk.tmpl'
  8. ## You can also override default template using `default_message`
  9. ## The following example to use the 'legacy' template from v0.3.0
  10. #default_message:
  11. # title: '{{ template "legacy.title" . }}'
  12. # text: '{{ template "legacy.content" . }}'
  13. ## Targets, previously was known as "profiles"
  14. targets:
  15. webhook:
  16. url: https://oapi.dingtalk.com/robot/send?access_token=输入自己的Token
  17. # secret for signature
  18. secret: 加签内容

6)配置告警模版

[root@localhost dingtalk]# mkdir /usr/local/dingtalk/template

[root@localhost dingtalk]# vim /usr/local/dingtalk/template/dingtalk.tmpl

 
  1. {{ define "__subject" }}
  2. [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
  3. {{ end }}
  4. {{ define "__alert_list" }}{{ range . }}
  5. ---
  6. {{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
  7. 告警状态:{{ .Status }}
  8. 告警级别:{{ .Labels.severity }}
  9. 告警类型:{{ .Labels.alertname }}
  10. 告警主机:{{ .Labels.instance }}
  11. 告警详情:{{ .Annotations.description }}
  12. 告警时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
  13. {{ end }}{{ end }}
  14. {{ define "__resolved_list" }}{{ range . }}
  15. ---
  16. {{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
  17. 告警状态:{{ .Status }}
  18. 告警级别:{{ .Labels.severity }}
  19. 告警类型:{{ .Labels.alertname }}
  20. 告警主机:{{ .Labels.instance }}
  21. 告警详情:{{ .Annotations.description }}
  22. 告警时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
  23. 恢复时间:{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
  24. {{ end }}{{ end }}
  25. {{ define "default.title" }}
  26. {{ template "__subject" . }}
  27. {{ end }}
  28. {{ define "default.content" }}
  29. {{ if gt (len .Alerts.Firing) 0 }}
  30. **Prometheus故障告警**
  31. {{ template "__alert_list" .Alerts.Firing }}
  32. ---
  33. {{ end }}
  34. {{ if gt (len .Alerts.Resolved) 0 }}
  35. **Prometheus故障恢复**
  36. {{ template "__resolved_list" .Alerts.Resolved }}
  37. {{ end }}
  38. {{ end }}
  39. {{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}
  40. {{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
  41. {{ template "default.title" . }}
  42. {{ template "default.content" . }}

7)配置系统服务

[root@localhost dingtalk]# vim /usr/lib/systemd/system/prometheus-webhook-dingtalk.service

 
  1. [Unit]
  2. Description=prometheus-webhook-dingtalk
  3. After=network-online.target
  4. [Service]
  5. Type=simple
  6. ExecStart=/usr/local/dingtalk/prometheus-webhook-dingtalk --config.file=/usr/local/dingtalk/config.yml
  7. Restart=on-failure
  8. [Install]
  9. WantedBy=multi-user.target

8)启动dingtalk

[root@localhost dingtalk]# systemctl daemon-reload

[root@localhost dingtalk]# systemctl start prometheus-webhook-dingtalk

[root@localhost dingtalk]# systemctl enable prometheus-webhook-dingtalk

2、安装Node_Exporter

1)下载安装包

[root@localhost dingtalk]# cd ~ && wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz

2)解压

[root@localhost ~]# tar xf node_exporter-1.5.0.linux-amd64.tar.gz

3)重命名

[root@localhost ~]# mv node_exporter-1.5.0.linux-amd64 /usr/local/node_exporter

4)配置系统服务

[root@localhost ~]# vim /usr/lib/systemd/system/node_exporter.service

 
  1. [Unit]
  2. Description=node_exporter
  3. Documentation=https://prometheus.io/
  4. After=network.target
  5. [Service]
  6. Type=simple
  7. User=root
  8. ExecStart=/usr/local/node_exporter/node_exporter
  9. Restart=on-failure
  10. [Install]
  11. WantedBy=multi-user.target

5)启动Node_Exporter

[root@localhost ~]# systemctl daemon-reload

[root@localhost ~]# systemctl enable node_exporter

[root@localhost ~]# systemctl start node_exporter

3、安装Prometheus

1)下载软件包

[root@localhost ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.37.6/prometheus-2.37.6.linux-amd64.tar.gz

2)解压

[root@localhost ~]# tar xf prometheus-2.37.6.linux-amd64.tar.gz

3)重命名

[root@localhost ~]# mv prometheus-2.37.6.linux-amd64 /usr/local/prometheus

4)配置Prometheus

[root@localhost ~]# vim /usr/local/prometheus/prometheus.yml

 
  1. global:
  2. alerting:
  3. alertmanagers:
  4. - static_configs:
  5. - targets:
  6. - '192.168.11.199:9093'
  7. rule_files:
  8. - 'rules/node.yml'
  9. scrape_configs:
  10. - job_name: "node-exporter"
  11. static_configs:
  12. - targets:
  13. - "192.168.11.199:9100"

5)配置告警规则

[root@localhost ~]# mkdir /usr/local/prometheus/rules

[root@localhost ~]# vim /usr/local/prometheus/rules/node.yml

 
  1. groups:
  2. - name: Node Resource Monitoring
  3. rules:
  4. - alert: Node实例已宕机
  5. expr: up{instance =~ ".*:9100"} == 0
  6. for: 15s
  7. labels:
  8. user: root
  9. severity: Emergency
  10. annotations:
  11. summary: "{{ $labels.instance }} 客户端已停止运行,请尽快处理!"
  12. description: "Node_exporter客户端已停止运行超过15s,当前状态:{{ $value }} "

6)创建启动文件

[root@localhost ~]# vim /usr/lib/systemd/system/prometheus.service

 
  1. [Unit]
  2. Description=prometheus
  3. Documentation=https://prometheus.io/docs/introduction/overview
  4. Wants=network-online.target
  5. After=network.target
  6. [Service]
  7. Type=simple
  8. User=root
  9. ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --web.enable-lifecycle
  10. ExecReload=/bin/kill -HUP $MAINPID
  11. ExecStop=/bin/kill -s SIGTERM $MAINPID
  12. Restart=on-failure
  13. [Install]
  14. WantedBy=multi-user.target

7)启动Prometheus

[root@localhost ~]# systemctl daemon-reload

[root@localhost ~]# systemctl start prometheus

[root@localhost ~]# systemctl enable prometheus.service

4、安装Alertmanager

1)下载Alertmanager

[root@localhost ~]# wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz

2)解压

[root@localhost ~]# tar xf alertmanager-0.25.0.linux-amd64.tar.gz

3)重命名

[root@localhost ~]# mv alertmanager-0.25.0.linux-amd64 /usr/local/alertmanager

4)创建启动文件

[root@localhost ~]# vim /usr/lib/systemd/system/alertmanager.service

 
  1. [Unit]
  2. Description=alertmanager
  3. Documentation=https://github.com/prometheus/alertmanager
  4. After=network.target
  5. [Service]
  6. Type=simple
  7. User=root
  8. ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
  9. Restart=on-failure
  10. [Install]
  11. WantedBy=multi-user.target

5)配置alertmanager.yml文件

# Alertmanager安装目录下默认有alertmanager.yml配置文件,可以创建新的配置文件,在启动时指定即可。

[root@localhost ~]# vim /usr/local/alertmanager/alertmanager.yml

 
  1. global:
  2. # 每2分钟检查一次是否恢复
  3. resolve_timeout: 2m
  4. # route用来设置报警的分发策略
  5. route:
  6. # 采用哪个标签来作为分组依据
  7. group_by: ['alertname']
  8. # 组告警等待时间。也就是告警产生后等待10s,如果有同组告警一起发出
  9. group_wait: 10s
  10. # 两组告警的间隔时间
  11. group_interval: 10s
  12. # 重复告警的间隔时间,减少相同微信告警的发送频率
  13. repeat_interval: 1h
  14. # 设置默认接收人
  15. receiver: 'webhook'
  16. receivers:
  17. - name: 'webhook'
  18. webhook_configs:
  19. - url: 'http://localhost:8060/dingtalk/webhook/send'
  20. send_resolved: true

6)启动Alertmanager

[root@localhost ~]# systemctl daemon-reload

[root@localhost ~]# systemctl start alertmanager

[root@localhost ~]# systemctl enable alertmanager

5、验证钉钉告警

# 浏览器访问Prometheus管理界面可以看到如下信息:

Linux部署Prometheus+Alertmanager并配置钉钉告警

1)模拟停止node_exporter服务,触发钉钉告警

[root@localhost ~]# systemctl stop node_exporter

2)再次查看Prometheus界面的Alerts可以看到告警状态。

绿色表示正常。

黄色状态为PENDING表示Alerts还没有发送至Alertmanager,因为rules里面配置了for: 15s。

15秒后状态由PENDING变为FIRING,此时Prometheus才将告警发给alertmanager,在Alertmanager中可以看到有一个alert。

Linux部署Prometheus+Alertmanager并配置钉钉告警

3)查看Alertmanager

Linux部署Prometheus+Alertmanager并配置钉钉告警

4)查看钉钉告警信息

Linux部署Prometheus+Alertmanager并配置钉钉告警

5)再次启动node_exporter

[root@localhost ~]# systemctl start node_exporter

6)再次查看钉钉会收到恢复信息

Linux部署Prometheus+Alertmanager并配置钉钉告警

附:

CPU使用率告警规则:

 
  1. groups:
  2. - name: CPU
  3. rules:
  4. - alert: CPU使用率过高
  5. expr: (100 - (avg by (instance) (irate(node_cpu{mode="idle"}[5m])) * 100)) > 80
  6. for: 1m
  7. labels:
  8. severity: Warning
  9. annotations:
  10. summary: "{{ $labels.instance }} CPU使用率过高"
  11. description: "{{ $labels.instance }}: CPU使用率超过80%,当前使用率({{ $value }})."

内存使用率告警规则:

 
  1. groups:
  2. - name: Memory
  3. rules:
  4. - alert: 内存使用率过高
  5. expr: (node_memory_MemTotal - (node_memory_MemFree+node_memory_Buffers+node_memory_Cached )) / node_memory_MemTotal * 100 > 80
  6. for: 1m # 告警持续时间,超过这个时间才会发送给alertmanager
  7. labels:
  8. severity: Warning
  9. annotations:
  10. summary: "{{ $labels.instance }} 内存使用率过高"
  11. description: "{{ $labels.instance }}:内存使用率超过80%,当前使用率({{ $value }})."

 

转自https://www.i7ti.cn/1497.html    感谢作者提供的灵感

标签:Alertmanager,dingtalk,prometheus,Prometheus,Linux,告警,root,localhost
From: https://www.cnblogs.com/xgsh/p/17384982.html

相关文章

  • linux上使用yum部署mongodb4.2+分片副本
    系统配置Linux是有文件句柄限制的,而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到这个数量。为防止服务因toomanyopenfiles错误出现宕机,这里需要对linux系统句柄数进行调整。##临时调整,系统重启即失效ulimit-SHn65535##永久调整,编辑/etc/security/limi......
  • centos(linux):yum报错:removing mirrorlist with no valid mirrors的处理(centos 6.1
    一,报错[root@osc~]#yuminstall-ypython3-pipLoadedplugins:fastestmirror,securitySettingupInstallProcessDeterminingfastestmirrorsYumRepoError:AllmirrorURLsarenotusingftp,http[s]orfile.Eg.Invalidrelease/repo/archcombination/rem......
  • 解决 VirutalBox 安装 Alpine Linux 出现 Kernel Panic 的问题
    问题如图,使用默认配置安装AlpineLinux时总是会启动都启动不了,找了半天后终于在官方论坛上找到原因了。解决在设置里分配大于1个的cpu就行,如图我这里给的是2个,分配完毕后重新启动就正常了......
  • 安装nginx--银河麒麟V10Kylin Linux
    原文链接:https://blog.csdn.net/qq_30665009/article/details/1260217961、安装nginx之前,在内网环境下需要先进行配置本地yum源。2、本文使用的操作系统:银河麒麟V10飞腾版3、查看操作系统CPU型号[root@localhost/]#lscpu4、查看操作系统信息cat/etc/*release5、安装的......
  • Linux 系统中,找到运行在某个特定端口的应用程序目录
    首先,你需要找到运行在特定端口上的进程的PID。这可以通过使用lsof命令完成:lsof-i:<port>其中,<port>是你要查找的端口号。在返回的结果中,你可以找到PID(进程ID)。然后,你可以使用pwdx命令来获取这个进程的当前工作目录:pwdx<pid>其中,<pid>是你在上一步找到的进程......
  • 《Linux高性能服务器编程》学习记录(二)linux网络编程基础API
    Linux网络API主要有三种:socket地址API。socket最开始的含义是一个IP地址和端口对(ip,port)。它唯一地表示了使用TCP通信的一端,称其为socket地址。socket基础API。socket的主要API都定义在sys/socket.h头文件中,包括创建socket、命名socket、监听socket、接受连接、发起连接、读写......
  • 学习LXC(Linux 容器)技术
    安装LXC、LXD、zfs测试机器为ubuntusudoapt-getinstalllxclxdzfsutils-linux-y创建LXD的zfs存储池sudolxdinit##根据提示全部敲回车即可添加官方镜像源sudolxcremoteaddimagesimages.linuxcontainers.org查看镜像lxcimagelist[<remote>:][<filter>......
  • 如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
    如何制作ESXiUSB启动盘请访问原文链接:https://sysin.org/blog/create-bootable-esxi-usb-installer/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org以下USB存储设备可以是U盘/SD卡,当然USBSSD更佳。macOSmacOS使用终端自带命令即可完成操作。查看US......
  • Linux 简单查看网卡实时网速
     1.使用nload工具查看安装工具sudoyuminstallnload#查看所有网卡实时网速sudonload-m#查看指定网卡实时网速sudonloadeth0-m 2.通过ifconfig实时查看watch-n1ifconfig 3.通过脚本查看#!/bin/bashawk'BEGIN{OFMT="%.3f";devf="......
  • Linux操作系统优化
    第18章Linux操作系统优化目录第18章Linux操作系统优化1.更改Yum源和添加epel源2.关闭SELinux3.关闭防火墙(Firewalld)4.关闭NetworkManager5.同步系统时间6.加大文件描述7.别名及环境变量优化8.内核优化9.配置SSH远程管理服务10.修改主机名和IP脚本11.安装常用软件12.......