昨天成功的让 Prometheus 收集了一些指标,那麽今天就来设定警报吧。要做警报的话,在 Prometheus 里面是透过 config 的 rules
栏位。目前有两种 rule,一种是 recording rules,用来计算一些常用的指标并把它存下来,另一种是 alerting rules,顾名思义就是用来设定警报规则的。
那们首先第一个警报,我们就来做当服务挂掉的时候会发出通知吧,首先在 prometheus.yml
的隔壁创建一个 alert.yml
,写入以下内容(取自官方文件):
groups:
- name: example
rules:
# Alert for any instance that is unreachable for >5 minutes.
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
简单介绍一下里面的结构,它的根一定会是 groups
,内容为 rule_group
组成的阵列,每个 rule_group
须带有一个不重复的 name
作为识别,并且定义 rules
阵列,每个 rule
物件的 alert
栏位表示它的名字,expr
为检查的表达式(使用 PromQL 语法),以上面的例子来说 up == 0
表示有任何一个 target 抓不到的情形。for
表示这个条件要持续多久,才会形成一个警报。labels
跟 annotation
都是用来在警报上面加上额外资讯的,不过他们的用途稍有不同,在後面设定 Alertmanager 会详细介绍。
订好 alerting rules 之後,我们还需要让 Prometheus 可以读到它,所以在 prometheus.yml
里面加上 rule_files
:
# 加上这个!
rule_files:
- alert.yml
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
- job_name: node
static_configs:
- targets: ["node-exporter:9100"]
- job_name: caddy
static_configs:
- targets: ["caddy:3939"]
然後重开服务,打开 http://localhost:9090/rules
,应该会看到以下画面,那我们就成功载入 alerting rules 了。
虽然替 Prometheus 设定好 alerting rules 了,然而它本身其实并没有处理发送警报给我们的部分,而是透过 Alertmanager 来达成,所以我们还需要在 docker compose 里面,新增一个 Alertmanager 的服务,在 docker-compose.yml
的 services
里面新增 alertmanager
的定义:
alertmanager:
image: prom/alertmanager:v0.23.0
restart: unless-stopped
volumes:
- ./alertmanager:/etc/alertmanager
command:
- '--config.file=/etc/alertmanager/config.yml'
- '--storage.path=/alertmanager'
然後我们还需要撰写 Alertmanager 的设定档,建立 alertmanager/config.yml
,并且写入下面内容:
route:
receiver: "gmail-notifications"
receivers:
- name: "gmail-notifications"
email_configs:
- to: <your-gmail>
from: <your-gmail>
smarthost: smtp.gmail.com:587
auth_username: <your-gmail>
auth_identity: <your-gmail>
auth_password: <google app password>
send_resolved: true
这边需要申请一个 google 的应用程序密码才能让 Alertmanager 寄信到 gmail 信箱,设定的方式可以参考这边。成功取得密码之後把它填上去上面的 password
栏位,并且把其他 <your-gmail>
的部分换成自己的 gmail 帐号即可。
最後一步,你还需要告诉 Prometheus 要去哪边找 Alertmanager,所以还要再修改一次 prometheus.yml
,加入 alerting
这项设定:
alerting:
alertmanagers:
- static_configs:
- targets:
- "alertmanager:9093"
修改完成後,重开服务,顺便把 NOJ 关掉,等个几分钟再打开信箱,就会看到 Alertmanager 送来的邮件了:
如果不确定警告是否有从 Prometheus 发出去的,也可以使用 ALERTS
这个表达式来查询:
今天成功的发出警告了,感觉又让这个专案成长了一点,并且关於 Prometheus 的架设也算是到了尾声,之後就是根据服务需求来设置各种警报的规则,关於这点我想官方文件的 best practice 应该值得参考,有兴趣的读者可以看看。
前篇提到Samatha的运作原理与可能使用的AWS服务,今天续提她与Theodore在工作使用系统上...
今天先测试一下永丰期货部分的api,再看看接下来可以做什麽。首先是之前抓股价k棒的函数,因为现在要抓...
已经做到烂掉的 CRUD 又来了,最後还是要把订单管理的页面建出来 我的订单 沿用前面建立的 Ord...
JUCE 提供 juce::var 类别,可用来储存多种资料型别,如 int, int64, flo...
前面几天我们讲了许多机器学习/深度学习以外的AI演算法,那麽今天我们就来聊聊现今最热门的机器学习/深...