prometheus 安装及应用
Prometheus
普罗米修斯(希腊神话人物) 是一个开源的系统监控和告警系统,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter
采集数据,还支持pushgateway
进行数据上报,Prometheus性能足够支撑上万台规模的集群。
为了方便你了解prometheus
基本工作原理,还是贴一张从官方获取的图哈:
放一张简单点好理解的草图(自己画的,比较好理解,快夸我哈):
想要详细了解更多,可以看官方
文档、找度娘
哈,下面是以应用实践为主,不做过多介绍,接下来你可以学到哪些内容:
- prometheus 安装、简单配置规则、应用、集成可视化管理页面
- prometheus 集成 Grafana 可视化监控页面
- prometheus 监控服务器资源
- prometheus 监控docker容器资源
- prometheus 监控springboot及jvm
- prometheus 集成 Alertmanager 监控告警通知
- prometheus Alertmanager 实现邮箱告警通知
- prometheus Alertmanager 实现企业微信机器人告警通知
Docker prometheus 在线安装
prometheus 开源的系统监控和告警系统
1. Docker 安装 Prometheus
docker pull prom/prometheus:latest
mkdir -p ~/dockerdata/prometheus
#创建 prometheus.yml 内容从下面获取
vim ~/dockerdata/prometheus/prometheus.yml
prometheus.yml
配置(默认配置)
global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 1m
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanagerIp:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: prometheus
honor_timestamps: true
scrape_interval: 5s
scrape_timeout: 5s
metrics_path: /metrics
scheme: http
follow_redirects: true
static_configs:
- targets:
- localhost:9090
启动
#启动
docker run -d --name prometheus -p 9090:9090 \
-v ~/dockerdata/prometheus:/etc/prometheus \
-v ~/dockerdata/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus:latest
docker logs prometheus
#访问界面 原生 web-ui
http://127.0.0.1:9090
#状态信息查看
http://127.0.0.1:9090/targets启动
2. 配置详解 prometheus.yml
基本配置,监控prometheus服务器,可能没什么作用,但确实一个很好的例子。
#全局配置(如果有内部单独设定,会覆盖这个参数)
global:
scrape_interval: 15s # 默认情况下,每15秒刮一次目标
# 默认情况下,每15秒抓取一次目标。与通信时,将这些标签附加到任何时间序列或警报
# 外部系统(联合、远程存储、警报管理器)
# external_labels:
# monitor: 'codelab-monitor'
# 告警插件定义。这里会设定alertmanager这个告警插件。
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanagerIp:9093
#告警规则。 按照设定参数进行扫描加载,用于自定义告警规则,其告警媒介和route路由由alertmanager插件实现。
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
#采集配置。配置数据源,包含分组job_name以及具体target。又分为静态配置和服务发现
# 仅包含一个要刮取的端点的刮取配置:
# 这是普罗米修斯配置
scrape_configs:
# 这个作业名称将作为标签“job=<job_name>`添加到此配置中抓取的任何时间序列中
- job_name: 'prometheus'
# 覆盖全局默认值,并每5秒从该作业中抓取一次目标
scrape_interval: 5s
# metrics_path defaults to ' /metrics'
# scheme defaults to 'http'.
static_configs:
#监听的地址
- targets: ['localhost:9090']
#用于远程存储写配置
#remote_write:
#用于远程读配置
#remote_read:
监控nginx配置示例
scrape_configs:
- job_name: "Nginx"
metrics_path: '/status/format/prometheus'
static_configs:
- targets: ['172.23.0.242:8088']
Promethrus 集成 Grafana 可视化预览
grafana 监控的
web-ui
好用的可视化组件, 支持prometheus
等
#下拉镜像
docker pull grafana/grafana
#启动
docker run -d -p 3000:3000 --name=grafana grafana/grafana
#访问 默认账户:admin/admin
http://127.0.0.1:3000
在 grafana 中配置Promethrus 数据源:
Promethrus Grafana 监控 服务器
1. Docker 安装 node-exporter
监控服务器:主要是用来收集服务器硬件资源使用情况的
注:下载到需要被监控的机器上
#下载镜像
docker pull prom/node-exporter
#启动
docker run -d --name node-exporter -p 19100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
prom/node-exporter
#访问 采集指标接口,查看服务器主机的指标
http://ip:19100/metrics
2. Prometheus 配置
prometheus的配置文件prometheus.yml
:
#编辑prometheus配置
vim ~/dockerdata/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'node-exporter' # 自定义
static_configs:
- targets: ['ip:19100']
重启prometheus容器:
#重启
docker restart prometheus
访问 指标检测站点,状态信息查看, 显示up即正常:
http://127.0.0.1:9090/targets
3. Grafana 配置
3.1 导入模板并创建仪表盘
模板:监控主机服务器(ECS)指标
模板id:8919
模板地址:https://grafana.com/grafana/dashboards/8919
模板描述:使用8919
模板监控主机服务器(ECS)指标,包含整体资源展示与资源明细图表:CPU 内存 磁盘 IO 网络等监控指标。
3.2 成功显示
监控效果图:
Promethrus Grafana 监控 Docker
1. Docker 安装 cadvisor
参考地址:https://zhuanlan.zhihu.com/p/474476816
谷歌开发的容器资源采集信息, 用于获取docker容器的指标
注:下载到需要被监控的机器上
docker pull google/cadvisor
docker run -d --name cadvisor -p 18081:8080 \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
google/cadvisor:latest
#访问 采集指标接口,查看docker容器的指标
http://ip:18081/metrics
2. Prometheus 配置
prometheus的配置文件prometheus.yml
:
告诉prometheus要去哪个端口中拉取对应的监控数据
#编辑prometheus配置
vim ~/dockerdata/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'cadvisor'
static_configs:
- targets: ['ip:18081'] # docker服务器ip + cadvisor端口
重启prometheus容器:
#重启
docker restart prometheus
访问 指标检测站点,状态信息查看, 显示up即正常:
http://127.0.0.1:9090/targets
3. Grafana 配置
3.1 导入模板并创建仪表盘
模板:监控docker容器指标
模板id:893
模板地址:https://grafana.com/grafana/dashboards/893
模板描述:使用893
模板监控docker容器指标
3.2 成功显示
监控效果图:
Promethrus Grafana 监控 springboot web
1. SpringBoot 配置
监控
springboot
和JVM
参考地址:https://zhuanlan.zhihu.com/p/474476816
springboot 添加依赖:
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--适配prometheus-->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<scope>runtime</scope>
</dependency>
application.yaml
配置:
spring:
application:
name: springboot-prometheus-example
# 开启监控并可以让prometheus拉取配置
management:
endpoint:
health:
show-details: always
metrics:
enabled: true
prometheus:
enabled: true
endpoints:
web:
exposure:
include: "*"
metrics:
tags:
application: ${spring.application.name}
export:
prometheus:
enabled: true
#1、访问 http://127.0.0.1:8080/actuator 路径就能看到一大堆输出的指标了,包括prometheus的采集应用
#访问 采集指标接口,查看springboot应用的指标
http://127.0.0.1:8080/actuator/prometheus
#2、通过prometheus来采集应用的指标,配置 prometheus.yml 文件
2. Prometheus 配置
prometheus.yml
文件配置:
#编辑prometheus配置
vim ~/dockerdata/prometheus/prometheus.yml
scrape_configs:
- job_name: 'springboot-prometheus-example' # 任务名称随便写
metrics_path: '/actuator/prometheus' # 采集的路径
static_configs:
- targets: ['192.168.14.238:8080'] # ip和端口写自己springbot应用的
重启prometheus容器:
docker restart prometheus
3. Grafana 配置
3.1 导入模板并创建仪表盘
模板:监控Springboot应用
模板id:4701、12900
模板地址:https://grafana.com/grafana/dashboards/4701
模板地址:https://grafana.com/grafana/dashboards/12900
模板描述:使用4701
JVM监控、12900
SpringBoot监控 模块
配置grafana监控模块:
选择两个4701
JVM监控、12900
SpringBoot监控 模块
3.2 成功显示
监控效果图:
Promethrus 集成 Alertmanager 告警通知
1、prometheus,配置告警规则
2、node_exporter,收集监控信息
3、alertmanager,管理并发送告警(邮件|钉钉|微信等)
1. Dokcer 安装 alertmanager
下拉镜像
#下拉镜像
docker pull prom/alertmanager
mkdir -p ~/dockerdata/promethrus/alertmanager
#创建 alertmanager.yml 内容从下面获取
vim ~/dockerdata/promethrus/alertmanager/alertmanager.yml
alertmanager.yml
默认配置:
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
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']
启动容器:
#启动
docker run -d --name alertmanager -p 19093:9093 \
-v ~/dockerdata/promethrus/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
prom/alertmanager
#访问 alertmanager web-ui页面
http://ip:19093
2. 配置详解 alertmanager.yml
alertmanager.yml
详细配置说明:
# global:全局配置,主要配置告警方式,如邮件、webhook等。
global:
resolve_timeout: 5m # 超时,默认5min
smtp_smarthost: 'smtp.qq.com:465' # 这里为 QQ 邮箱 SMTP 服务地址,官方地址为 smtp.qq.com 端口为 465 或 587,同时要设置开启 POP3/SMTP 服务。
smtp_from: '916719080@qq.com'
smtp_auth_username: '916719080@qq.com'
smtp_auth_password: 'lojdeopbholobgah' # 这里为第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码,否则会报错,获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示。
smtp_require_tls: false # 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。
templates: # # 模板
- '/usr/local/alertmanager/alert.tmp'
# route:用来设置告警的分发策略。Prometheus的告警先是到达alertmanager的根路由(route),alertmanager的根路由不能包含任何匹配项,因为根路由是所有告警的入口点。
# 另外,根路由需要配置一个接收器(receiver),用来处理那些没有匹配到任何子路由的告警(如果没有配置子路由,则全部由根路由发送告警),即缺省
# 接收器。告警进入到根route后开始遍历子route节点,如果匹配到,则将告警发送到该子route定义的receiver中,然后就停止匹配了。因为在route中
# continue默认为false,如果continue为true,则告警会继续进行后续子route匹配。如果当前告警仍匹配不到任何的子route,则该告警将从其上一级(
# 匹配)route或者根route发出(按最后匹配到的规则发出邮件)。查看你的告警路由树,https://www.prometheus.io/webtools/alerting/routing-tree-editor/,
# 将alertmanager.yml配置文件复制到对话框,然后点击"Draw Routing Tree"
route:
group_by: ['alertname'] # 用于分组聚合,对告警通知按标签(label)进行分组,将具有相同标签或相同告警名称(alertname)的告警通知聚合在一个组,然后作为一个通知发送。如果想完全禁用聚合,可以设置为group_by: [...]
group_wait: 30s # 当一个新的告警组被创建时,需要等待'group_wait'后才发送初始通知。这样可以确保在发送等待前能聚合更多具有相同标签的告警,最后合并为一个通知发送。
group_interval: 2m # 当第一次告警通知发出后,在新的评估周期内又收到了该分组最新的告警,则需等待'group_interval'时间后,开始发送为该组触发的新告警,可以简单理解为,group就相当于一个通道(channel)。
repeat_interval: 10m # 告警通知成功发送后,若问题一直未恢复,需再次重复发送的间隔。
receiver: 'email' # 配置告警消息接收者,与下面配置的对应。例如常用的 email、wechat、slack、webhook 等消息通知方式。
routes: # 子路由
- receiver: 'wechat'
match: # 通过标签去匹配这次告警是否符合这个路由节点;也可以使用 match_re 进行正则匹配
severity: Disaster # 标签severity为Disaster时满足条件,使用wechat警报
receivers: # 配置告警信息接收者信息。
- name: 'email' # 警报接收者名称
email_configs:
- to: '{{ template "email.to"}}' # 接收警报的email(这里是引用模板文件中定义的变量)
html: '{{ template "email.to.html" .}}' # 发送邮件的内容(调用模板文件中的)
# headers: { Subject: " {{ .CommonLabels.instance }} {{ .CommonAnnotations.summary }}" } # 邮件标题,不设定使用默认的即可
send_resolved: true # 故障恢复后通知
- name: 'wechat'
wechat_configs:
- corp_id: wwd76d598b5fad5097 # 企业信息("我的企业"--->"CorpID"[在底部])
to_user: '@all' # 发送给企业微信用户的ID,这里是所有人
# to_party: '' 接收部门ID
agent_id: 1000004 # 企业微信("企业应用"-->"自定应用"[Prometheus]--> "AgentId")
api_secret: DY9IlG0Bdwawb_ku0NblxKFrrmMwbLIZ7YxMa5rCg8g # 企业微信("企业应用"-->"自定应用"[Prometheus]--> "Secret")
message: '{{ template "email.to.html" .}}' # 发送内容(调用模板)
send_resolved: true # 故障恢复后通知
inhibit_rules: # 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
3. Prometheus 配置
3.1 prometheus 集成 alertmanager
prometheus 集成 alertmanager告警通知服务
#编辑prometheus配置
vim ~/dockerdata/prometheus/prometheus.yml
#全局配置
global:
scrape_interval: 15s
evaluation_interval: 15s
#关联alertmanagers告警通知服务
alerting:
alertmanagers:
- static_configs:
- targets: ['192.168.159.148:19093']
#监控alertmanager告警通知服务
scrape_configs:
- job_name: "alertmanager"
static_configs:
- targets: ["192.168.159.148:19093"]
3.2 prometheus 配置 alertmanager 告警规则
prometheus.yml
中配置告警规则文件存储位置
prometheus会根据全局global设定的evaluation_interval参数进行扫描加载,规则改动后会自动加载
#编辑prometheus配置
vim ~/dockerdata/prometheus/prometheus.yml
#全局配置
global:
scrape_interval: 15s
evaluation_interval: 15s # 默认1m
#指定告警规则文件
rule_files:
- "rules/*.yml"
创建告警规则文件
#创建并编辑告警规则文件
mkdir -p ~/dockerdata/prometheus/rules
vim ~/dockerdata/prometheus/rules/rules-alerts.yml
groups:
- name: 实例存活告警规则
rules:
- alert: 实例存活告警 # 告警规则的名称(alertname)
expr: up == 0 # expr 是计算公式,up指标可以获取到当前所有运行的Exporter实例以及其状态,即告警阈值为up==0
for: 30s # for语句会使 Prometheus 服务等待指定的时间, 然后执行查询表达式。(for 表示告警持续的时长,若持续时长小于该时间就不发给alertmanager了,大于该时间再发。for的值不要小于prometheus中的scrape_interval,例如scrape_interval为30s,for为15s,如果触发告警规则,则再经过for时长后也一定会告警,这是因为最新的度量指标还没有拉取,在15s时仍会用原来值进行计算。另外,要注意的是只有在第一次触发告警时才会等待(for)时长。)
labels: # labels语句允许指定额外的标签列表,把它们附加在告警上。
severity: Disaster
annotations: # annotations语句指定了另一组标签,它们不被当做告警实例的身份标识,它们经常用于存储一些额外的信息,用于告警信息的展示之类的。
summary: "节点失联"
description: "节点断联已超过1分钟!"
- name: 内存告警规则
rules:
- alert: "内存使用率告警"
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 75 # 告警阈值为当内存使用率大于75%
for: 30s
labels:
severity: warning
annotations:
summary: "服务器内存告警"
description: "内存资源利用率大于75%!(当前值: {{ $value }}%)"
- name: 磁盘告警规则
rules:
- alert: 磁盘使用率告警
expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100 > 80 # 告警阈值为某个挂载点使用大于80%
for: 1m
labels:
severity: warning
annotations:
summary: "服务器 磁盘告警"
description: "服务器磁盘设备使用超过80%!(挂载点: {{ $labels.mountpoint }} 当前值: {{ $value }}%)"
查看prometheus
配置告警规则效果图:
http://192.168.159.148:9090/alerts
3.3 配置详解 *rules.yml
详解规则配置
*rules.yml
文件说明
groups:
- name: 实例存活告警规则
rules:
- alert: 实例存活告警 # 告警规则的名称(alertname)
expr: up == 0 # expr 是计算公式,up指标可以获取到当前所有运行的Exporter实例以及其状态,即告警阈值为up==0
for: 30s # for语句会使 Prometheus 服务等待指定的时间, 然后执行查询表达式。(for 表示告警持续的时长,若持续时长小于该时间就不发给alertmanager了,大于该时间再发。for的值不要小于prometheus中的scrape_interval,例如scrape_interval为30s,for为15s,如果触发告警规则,则再经过for时长后也一定会告警,这是因为最新的度量指标还没有拉取,在15s时仍会用原来值进行计算。另外,要注意的是只有在第一次触发告警时才会等待(for)时长。)
labels: # labels语句允许指定额外的标签列表,把它们附加在告警上。
severity: Disaster
annotations: # annotations语句指定了另一组标签,它们不被当做告警实例的身份标识,它们经常用于存储一些额外的信息,用于告警信息的展示之类的。
summary: "节点失联"
description: "节点断联已超过1分钟!"
- name: 内存告警规则
rules:
- alert: "内存使用率告警" # 告警名称,自定义
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 75 # 告警的判定条件,告警阈值为当内存使用率大于75%
for: 30s # 满足告警条件持续时间多久后,才会发送告警
labels: #标签项
severity: warning # 指定告警级别。分别为warning,critical,emergency。严重等级依次递增。
annotations: # 解析项,详细解释告警信息
summary: "服务器内存告警"
description: "内存资源利用率大于75%!(当前值: {{ $value }}%)"
3.4 模拟告警发送
#下载linux 系统压测工具
yum install -y epel-release && yum install stress -y
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 3.7G 376M 2.9G 11M 439M 3.1G
Swap: 3.9G 0B 3.9G
#模拟。内存压测
# 总内存4G,我们设置的告警阈值为内存使用率为%75则告警,4096*%75=3027M
# 表示运行6个进程,每个进程分配500M内存,分配后不释放,长期保持测试 or 测试80秒
# 长期保持测试,需Ctrl+Z手动停止
stress --vm 6 --vm-bytes 500M --vm-keep
#故障恢复
Ctrl+Z 手动停止
#stress --vm 6 --vm-bytes 500M --timeout 80
#模拟。CPU测试
# 压满6个cpu,执行100秒(--timeout可以直接用--t)
stress --cpu 6 --timeout 100
#模拟。磁盘使用超过80%时
df -h
dd if=/dev/zero of=./test.io count=1 bs=80M
df -h
#故障恢复
rm -rf test.io
4. Alertmanager 配置邮件告警通知
alertmanager.yml
配置邮件告警:
完成
3.2 prometheus 配置 alertmanager 告警规则
后,进行邮件通知配置。
# 编辑 alertmanager 配置
vim ~/dockerdata/promethrus/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
# 全局邮箱配置
smtp_auth_username: "1263598328@qq.com"
smtp_auth_password: "QQ邮箱授权码而不是密码"
#smtp_auth_secret: ""
smtp_require_tls: false
smtp_smarthost: "smtp.qq.com:465"
smtp_from: "1263598328@qq.com"
route:
# 全局路由配置
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'web.hook'
#子路由,会继承父路由配置,如果不覆盖.
routes:
- receiver: 'email-zhengja'
group_wait: 10s
group_interval: 10s
# 接收器
receivers:
- name: 'email-zhengja'
email_configs:
- send_resolved: true
to: 1263598328@qq.com
演示告警操作:
http://192.168.159.148:9090/targets
docker stop cadvisor
邮箱接收效果图示例:
调试过程中常见错误及解决方案:
问题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配置文件,有此属性。
5. Alertmanager 配置企业微信告警通知-未测试
参考企业微信接入
注意:需要企业微信管理员提供【部门id】和认证id等
# 编辑 alertmanager.yml 配置
vim ~/dockerdata/promethrus/alertmanager/alertmanager.yml
- name: 'wechat'
wechat_configs:
- corp_id: wwd76d598b5fad5097
to_user: '@all'
# to_party: '' 接收部门ID
agent_id: 1000004
api_secret: DY9IlG0Bdwawb_ku0NblxKFrrmMwbLIZ7YxMa5rCg8g
message: '{{ template "email.to.html" .}}'
send_resolved: true
6. Alertmanager 配置企业微信机器人告警通知
6.1 添加企业微信机器人并获取webhook地址(自己创建的机器人才能查看信息)
企业微信机器人 webhook
地址:
#注意,请使用自己创建的机器人 key为自己机器人的唯一id
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ae93586b-7593-44b8-af7a-09d67f77da0e
6.2 Docker 安装 webhook-adapter
guyongquan/webhook-adapter 支持企业微信机器人通知
#注意:key (自己的微信机器人key)
#启动企业机器人适配
docker run -d --name wechat-webhook -p 19800:80 \
guyongquan/webhook-adapter \
--adapter=/app/prometheusalert/wx.js=/wx=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ae93586b-7593-44b8-af7a-09d67f77da0e
#webhook-adapter的机器地址
http://ip:19800/adapter/wx
6.3 Alertmanager 配置
配置 alertmanager.yml
文件:
# 编辑 alertmanager.yml 配置
vim ~/dockerdata/promethrus/alertmanager/alertmanager.yml
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'web.hook'
receivers:
# 企业微信机器人通知
- name: 'web.hook'
webhook_configs:
- url: 'http://192.168.159.148:19800/adapter/wx' # 企业微信机器人 webhook-adapter地址
效果图:
所有配置文件信息完整版参考
1. 配置文件 prometheus.yml
文件作用:配置抓取指标应用、配置告警通知、配置告警规则等
文件存储路径:
~/dockerdata/prometheus/prometheus.yml
global:
scrape_interval: 15s # 默认情况下,每15秒刮一次目标
evaluation_interval: 10s
# 关联alertmanagers告警通知服务
alerting:
alertmanagers:
- static_configs:
- targets: ['192.168.159.148:19093']
#指定告警规则文件
rule_files:
- "rules/*.yml"
scrape_configs:
# 监控prometheus,可能没有意义,但是个好示例
- job_name: 'prometheus'
scrape_interval: 5s # 覆盖全局默认值,并每5秒从该作业中抓取一次目标
static_configs:
- targets: ['localhost:9090','192.168.159.148:9090'] # 监听的地址
# 监控springboot web应用
- job_name: 'springboot-prometheus-example'
metrics_path: '/actuator/prometheus' # # 采集的路径
static_configs:
- targets: ['192.168.14.238:8080'] # ip和端口写自己springbot应用的
# 监控docker容器指标
- job_name: 'cadvisor'
static_configs:
- targets: ['192.168.159.148:18081']
# 监控主机服务信息 master
- job_name: 'node-exporter-master'
static_configs:
- targets: ['192.168.159.148:19100']
# 监控主机服务信息 slave
- job_name: 'node-exporter-slave'
static_configs:
- targets: ['192.168.159.145:19100']
# 监控alertmanager告警通知服务
- job_name: "alertmanager"
static_configs:
- targets: ["192.168.159.148:19093"]
2. 配置文件 alertmanager.yml
文件作用:配置告警通知、告警通知规则
文件路径:
~/dockerdata/prometheus/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
# 全局邮箱配置
smtp_auth_username: "1263598336@qq.com"
smtp_auth_password: "yoypgcyowgofieda"
smtp_require_tls: false
smtp_smarthost: "smtp.qq.com:465"
smtp_from: "1263598336@qq.com"
route:
#全局默认配置
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'web.hook'
#接收器
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://192.168.159.148:19800/adapter/wx'
# 邮箱发送通知
- name: 'email-zhengja'
email_configs:
- send_resolved: true
to: 1263598336@qq.com
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
3. 配置文件 rules-alerts.yml
文件作用:配置告警规则
文件存储路径:
~/dockerdata/prometheus/rules/reles-alerts.yml
groups:
- name: 实例存活告警规则
rules:
- alert: 实例存活告警 # 告警规则的名称(alertname)
expr: up == 0 # expr 是计算公式,up指标可以获取到当前所有运行的Exporter实例以及其状态,即告警阈值为up==0
for: 30s # for语句会使 Prometheus 服务等待指定的时间, 然后执行查询表达式。(for 表示告警持续的时长,若持续时长小于该时间就不发给alertmanager了,大于该时间再发。for的值不要小于prometheus中的scrape_interval,例如scrape_interval为30s,for为15s,如果触发告警规则,则再经过for时长后也一定会告警,这是因为最新的度量指标还没有拉取,在15s时仍会用原来值进行计算。另外,要注意的是只有在第一次触发告警时才会等待(for)时长。)
labels: # labels语句允许指定额外的标签列表,把它们附加在告警上。
severity: Disaster
annotations: # annotations语句指定了另一组标签,它们不被当做告警实例的身份标识,它们经常用于存储一些额外的信息,用于告警信息的展示之类的。
summary: "节点失联"
description: "节点断联已超过1分钟!"
- name: 内存告警规则
rules:
- alert: "内存使用率告警"
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 20 # 告警阈值为当内存使用率大于75%
for: 30s
labels:
severity: warning
annotations:
summary: "服务器内存告警"
description: "内存资源利用率大于20%!(当前值: {{ $value }}%)"
- name: 磁盘告警规则
rules:
- alert: 磁盘使用率告警
expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100 > 80 # 告警阈值为某个挂载点使用大于80%
for: 1m
labels:
severity: warning
annotations:
summary: "服务器 磁盘告警"
description: "服务器磁盘设备使用超过80%!(挂载点: {{ $labels.mountpoint }} 当前值: {{ $value }}%)"
本片文章阅读结束
作者:宇宙小神特别萌
个人博客:www.zhengjiaao.cn
个人博客-CSDN:https://blog.csdn.net/qq_41772028?type=lately
个人博客-掘金:https://juejin.cn/user/3227821871211390/posts
个人博客-简书:https://www.jianshu.com/u/70d69269bd09
代码仓库:
Gitee 仓库:https://gitee.com/zhengjiaao
Github 仓库:https://github.com/zhengjiaao
描述:喜欢文章的点赞收藏一下,关注不迷路,避免以后找不到哦,大家遇到问题下方可评论
本片文章阅读结束