1. 程式人生 > 其它 >使用 Prometheus Alertmanager 模組傳送 Doris 異常資訊至釘釘報警群

使用 Prometheus Alertmanager 模組傳送 Doris 異常資訊至釘釘報警群

基礎環境

1.Prometheus 版本:2.22.2

下載地址:

2.Alertmanager 版本:0.23

下載地址:

3.prometheus-webhook-dingtalk :1.4

下載地址:

1.新增使用者和使用者組

➜ groupadd prometheus
➜ useradd -g prometheus -M -s /sbin/nologin prometheus

2.安裝配置 Prometheus Server

詳細 Prometheus 安裝流程請參考:需要確保服務啟動完成後,可以正常訪問:http://localhost:9090,且 Doris 的 metrics 已經打入 Prometheus 中。

3.安裝 AlertManager 模組

3.1 下載安裝包

➜ wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz
➜ tar xf alertmanager-0.23.0.linux-amd64.tar.gz -C /soft
➜ cd /soft
➜ mv alertmanager-0.23.0.linux-amd64 alertmanager
➜ cd alertmanager
➜ mkdir data #系統檔案持久化路徑
➜ chown -R prometheus.prometheus /soft/alertmanager

說明:建立 data 目錄是必須要操作的,不然後期啟動 alertmanager 會異常。

3.2 配置 alertmanager.yml 文

route:
  group_by: ['alertname']
  group_wait: 1s
  group_interval: 1m
  repeat_interval: 4h
  receiver: 'webhook2'
receivers:
- name: 'webhook2'
  webhook_configs:
    - &dingtalk_config
       send_resolved: true
       url: http://localhost:8060/dingtalk/webhook2/send
#An inhibition rule mutes an alert (target) matching a set of matchers when an alert (source) exists that matches another set of matchers. Both target and source alerts must have the same label values for the label names in the equal list.
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

名詞解釋:

  • group_wait :設定等待時間,如果在等待時間內當前 Group 接收到了新的告警,這些告警將會合併為一個通知向 Receiver 傳送。
  • group_interval :用於定義相同的 Group 之間傳送告警通知的時間間隔。
  • repeat_interval:用於表示當一個規則成功被髮送,重複傳送報警的第二次間隔時間。

 

3.3 檢查配置檔案配置

很重要,關乎程式能否正常啟動。當出現如下圖片時,說明 alertmanager.yml 檔案配置正常。

➜ cd /soft/alertmanager
➜ ./amtool check-config ./alertmanager.yml

 

3.4 建立 Alertmanager 系統服務啟動檔案

➜ vim /usr/lib/systemd/system/alertmanager.service

[Unit]
Description=alertmanager
Documentation=https://prometheus.io/
After=network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/soft/alertmanager/alertmanager --config.file=/soft/alertmanager/alertmanager.yml --storage.path=/soft/alertmanager/data
Restart=on-failure

[Install]
WantedBy=multi-user.target

3.5 啟動服務

systemctl daemon-reload
systemctl enable alertmanager.service
systemctl start alertmanager.service
systemctl status alertmanager.service #檢視服務狀態
systemctl restart alertmanager.service #重啟服務使用

3.6 啟動服務後

服務啟動後,可以在http://localhost:9093檢視ui介面

3.7 在 Prometheus 中配置 Alertmanager 模組需要在 Prometheus 的安裝目錄下的 prometheus.yml 檔案中加入 Alertmanager 通訊地址和埠號,同時配置 alert rules 目錄,該目錄主要存放配置的報警規則。

vim prometheus.yml 

alerting:
  alertmanagers:
  - static_configs:
    - targets: ['localhost:9093']  #根據實際alertmanager服務地址配置。

rule_files:
   - "rule/*.yml"   #自定義規則儲存目錄,可以通過*.yml來通配該目錄下所有規則。


3.8 重新載入 Prometheus 配置檔案,檢視 alerting 配置是否生效

Prometheus 服務支援熱載入。當配置檔案發生改變時,可以通過以下命令重新載入配置檔案:

➜ ./promtool check config  prometheus.yml
➜ systemctl reload prometheus.service

重啟成功後,可以通過:http://localhost:9090/config檢視 alerting 配置是否生效。

4.安裝 prometheus-webhook-dingtalk 外掛

4.1 下載外掛

➜ wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v1.4.0/prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz
➜ tar -xf prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz  -C  /soft
➜ mv prometheus-webhook-dingtalk-1.4.0.linux-amd64 prometheus-webhook-dingtalk

4.2 在釘釘群配置機器人配置機器人時,需要新增自定義關鍵詞,這個關鍵詞後期在配置規則報警資訊時,也同樣需要出現,不然無法傳送報警。

4.3 修該配置檔案在 webhook2 中配置剛才申請的機器人的地址,需要注意的是你的機器人路徑配置在哪,那麼 alertmanager.yml 中的 url 路徑也要隨之改變。

➜ cp  config.example.yml  config.yml

## Request timeout
# timeout: 5s

## Customizable templates path   自定義模板位置
templates:
  - /soft/alertmanager/alarm_template/webhook.tmpl
## You can also override default template using `default_message`
## The following example to use the 'legacy' template from v0.3.0
# default_message:
#   title: '{{ template "legacy.title" . }}'
#   text: '{{ template "legacy.content" . }}'

## Targets, previously was known as "profiles"
targets:
  webhook1:   #加簽的釘釘,需要同時配置加簽機器人的金鑰資訊
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
    # secret for signature
    secret: SEC000000000000000000000
  webhook2:  #不加簽釘釘
    url: https://oapi.dingtalk.com/robot/send?access_token=cf9c2fd69723661108b7fd7******
  webhook_legacy:   
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
    # Customize template content
    message:
      # Use legacy template
      title: '{{ template "legacy.title" . }}'
      text: '{{ template "legacy.content" . }}'
  webhook_mention_all:  #@所有人釘釘
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
    mention:
      all: true
  webhook_mention_users:  #@指定使用者釘釘
    url: https://oapi.dingtalk.com/robot/send?access_token=cf9c2fd69723661108b7fd7****
    mention:
      mobiles: ['152****30', '134****74']

4.4 建立 webhook-dingtalk 系統服務啟動檔案

vim /usr/lib/systemd/system/webhook-dingtalk.service

[Unit]

[Unit]
Description=prometheus-webhook-dingtalk
Documentation=https://github.com/timonwong/prometheus-webhook-dingtalk
After=network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/soft/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk  --config.file=/soft/prometheus-webhook-dingtalk/config.yml
Restart=on-failure

[Install]
WantedBy=multi-user.target

 

4.5 啟動服務

systemctl daemon-reload
systemctl enable webhook-dingtalk.service
systemctl start webhook-dingtalk.service
systemctl status webhook-dingtalk.service
systemctl restart webhook-dingtalk.service

4.6 檢視 webhook-dingtalk 服務狀態

5.配置報警規則

在 Prometheus 安裝目錄下的 prometheus.yml 檔案中檢視“rule_files”對應配置的目錄地址,在該目錄下新建報警規則。如果不清楚規則如何配置,可以在你安裝的 Prometheus 的 UI 地址:http://localhost:9090/graph下檢視 metrics 資訊。example:

5.1 配置 Doris fe 和 be 報警規則當 Doris instance 是正常狀態時,up ==1;當instance down機後,up ==0注意:配置報警規則時,報警機器人自定義的關鍵字,在配置規則檔案的 description 中必須要出現,不然釘釘群無法接收到報警資訊。

➜ vim doris_instance.yml

groups:
  - name: doris_instance_down
    rules:
      - alert: Doris Backends Down
        expr: up {group="be", job="pro-doris"} == 0
        for: 20s
        labels:
          user: doris
          severity: error
        annotations:
          summary: "doris Instance {{ $labels.instance }} down"
          description: "doris {{ $labels.instance }} of job {{ $labels.job }} has been down for more than 20s."
      - alert: Doris Frontends Down
        expr: up {group="fe", job="pro-doris"} == 0
        for: 20s
        labels:
          user: doris
          severity: error
        annotations:
          summary: "doris Instance {{ $labels.instance }} down"
          description: "doris {{ $labels.instance }} of job {{ $labels.job }} has been down for more than 20s."

 

5.2 校驗規則檔案如果是規則檔案是 “SUCCESS” 狀態,則說明規則檔案配置正確,否則則需要檢查配置對應的配置檔案。

➜ cd /soft/prometheus
➜ ./promtool check config  prometheus.yml

5.3 重新載入 Prometheus 配置檔案

➜ systemctl reload prometheus.service

6.測試

當 Doris 叢集中的 instance 出現 down 機後,釘釘群裡新建的機器人會發出報警資訊。

當在 alertmanager.yml 檔案中配置了 send_resolved = true,異常解除同樣會傳送釘釘警告資訊,否則則不傳送。

 


至此,Prometheus 監控 Doris 異常資訊併發送報警至釘釘流程結束