Day 10:架设 Prometheus (2)

设定 alerting rules

昨天成功的让 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 表示这个条件要持续多久,才会形成一个警报。labelsannotation 都是用来在警报上面加上额外资讯的,不过他们的用途稍有不同,在後面设定 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 了。

设定 Alertmanager

虽然替 Prometheus 设定好 alerting rules 了,然而它本身其实并没有处理发送警报给我们的部分,而是透过 Alertmanager 来达成,所以我们还需要在 docker compose 里面,新增一个 Alertmanager 的服务,在 docker-compose.ymlservices 里面新增 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 应该值得参考,有兴趣的读者可以看看。


<<:  Vue.js 从零开始:v-bind

>>:  绘图 - 即时行情

Day 15:AWS是什麽?30天从动漫/影视作品看AWS服务应用 -《云端情人》part 2

前篇提到Samatha的运作原理与可能使用的AWS服务,今天续提她与Theodore在工作使用系统上...

[Day14] 永丰shioaji API,期货篇

今天先测试一下永丰期货部分的api,再看看接下来可以做什麽。首先是之前抓股价k棒的函数,因为现在要抓...

【从实作学习ASP.NET Core】Day28 | 前台 | 管理我的订单

已经做到烂掉的 CRUD 又来了,最後还是要把订单管理的页面建出来 我的订单 沿用前面建立的 Ord...

Day 21:非 GUI 类工具之三

JUCE 提供 juce::var 类别,可用来储存多种资料型别,如 int, int64, flo...

Day 10: 人工智慧在音乐领域的应用 (机器学习/深度学习与类神经网路一)

前面几天我们讲了许多机器学习/深度学习以外的AI演算法,那麽今天我们就来聊聊现今最热门的机器学习/深...