TiDB 報(bào)警配置快速指南

TiDB 報(bào)警配置快速指南

前言

TiDB 使用 Prometheus + Alertmanger 進(jìn)行報(bào)警,Grafana 僅作展示
報(bào)警配置&規(guī)則文件都使用 YAML 格式,由 TiDB-Ansible 部署時(shí)生成

報(bào)警規(guī)則文件位于 monitoring 服務(wù)器 {{deploy_dir}}/conf/xxx.rules.yml

ll {{deploy_dir}}/conf/ | grep rules
-rw-r--r--. 1 tidb tidb  3626 Nov  5 09:08 binlog.rules.yml
-rw-r--r--. 1 tidb tidb  4708 Nov  5 09:08 blacker.rules.yml
-rw-r--r--. 1 tidb tidb    37 Sep 10 09:59 bypass.rules.yml
-rw-r--r--. 1 tidb tidb  2054 Nov  5 09:08 kafka.rules.yml
-rw-r--r--. 1 tidb tidb   471 Sep 10 09:59 lightning.rules.yml
-rw-r--r--. 1 tidb tidb  5376 Nov  5 09:08 node.rules.yml
-rw-r--r--. 1 tidb tidb  6926 Nov  5 09:08 pd.rules.yml
-rw-r--r--. 1 tidb tidb  5035 Nov  5 09:08 tidb.rules.yml
-rw-r--r--. 1 tidb tidb 15603 Nov  5 09:08 tikv.rules.yml

prometheus 服務(wù)通過(guò)配置文件中的 rule_files 字段加載該文件

vi {{deploy_dir}}/conf/prometheus.yml
---
global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.
  evaluation_interval: 15s # By default, scrape targets every 15 seconds.
  # scrape_timeout is set to the global default (10s).
  external_labels:
    cluster: 'test-cluster'
    monitor: "prometheus"

# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
  - 'node.rules.yml'
  - 'blacker.rules.yml'
  - 'bypass.rules.yml'
  - 'pd.rules.yml'
  - 'tidb.rules.yml'
  - 'tikv.rules.yml'
  - 'lightning.rules.yml'

alerting:
 alertmanagers:
 - static_configs:
   - targets:
     - 'localhost:9093'

重新加載規(guī)則

如果修改了配置,可通過(guò)如下2個(gè)方法重新加載規(guī)則

  • 方法1:在 monitoring/alertmanager 服務(wù)器上重啟 prometheus/alertmanager 服務(wù)
systemctl restart prometheus-9090.service
systemctl restart alertmanager-9093.service
  • 方法2:使用 HTTP POST request
curl -XPOST http://{{monitoring_server}}:9090/-/reload
curl -XPOST http://{{alertmanager_server}}:9093/-/reload

報(bào)警規(guī)則

警報(bào)規(guī)則允許您基于 PromQL 表達(dá)式定義警報(bào)條件,并向 Alertmanger 發(fā)送關(guān)于觸發(fā)警報(bào)的通知。當(dāng)警報(bào)表達(dá)式在給定的時(shí)間段內(nèi)持續(xù)活動(dòng)(滿足判斷條件)時(shí),警報(bào)將被觸發(fā)(Activing)。

以 pd.rules.yml 文件為例

groups:
- name: alert.rules
  rules:
  - alert: PD_cluster_offline_tikv_nums
    expr: sum ( pd_cluster_status{type="store_down_count"} ) > 0
    for: 1m
    labels:
      env: ga-latest-cluster
      level: emergency
      expr:  sum ( pd_cluster_status{type="store_down_count"} ) > 0
    annotations:
      description: 'cluster: ga-latest-cluster, instance: {{ $labels.instance }}, values:{{ $value }}'
      value: '{{ $value }}'
      summary: PD_cluster_offline_tikv_nums

expr 為自定義警報(bào)條件??筛鶕?jù)實(shí)際情況適當(dāng)調(diào)整閾值。

for 為 1 分鐘內(nèi)警報(bào)條件持續(xù)活動(dòng),然后才會(huì)觸發(fā)警報(bào),以防止誤觸。處于活動(dòng)狀態(tài)但尚未觸發(fā)的警報(bào)處于掛起狀態(tài)。

labels 指定了一組附加到警報(bào)的標(biāo)簽。會(huì)覆蓋現(xiàn)有的沖突標(biāo)簽??梢詫?duì) label 值進(jìn)行模板化。

annotation 指定了一組信息標(biāo)簽,用戶最終所見(jiàn),用于存儲(chǔ)更長(zhǎng)的附加信息,如警報(bào)描述或運(yùn)維手冊(cè)的鏈接??梢詫?duì) annotation 值進(jìn)行模板化。

報(bào)警觸發(fā)

要手動(dòng)檢查哪些警報(bào)處于活動(dòng)狀態(tài)(掛起或觸發(fā)),請(qǐng)導(dǎo)航到您的 prometheus 的 Alerts 選項(xiàng)卡,默認(rèn)是 monitoring 服務(wù)器 9090 端口。這將顯示每個(gè)定義的警報(bào)當(dāng)前處于活動(dòng)狀態(tài)的確切標(biāo)簽集。

同樣的,也可以在 Alertmanger 中看到,默認(rèn)是 alertmanager 服務(wù)器 9093 端口

PS:可以在 Alertmanger 中設(shè)置 Silence
http://m.itdecent.cn/p/882c8584b117

發(fā)信配置

Alertmanger 支持通過(guò)電子郵件、實(shí)時(shí)通知系統(tǒng)和聊天平臺(tái)等方法發(fā)送通知。發(fā)信配置文件位于 alertmanager 服務(wù)器 {{deploy_dir}}/conf/alertmanger.yml。

以郵件通知為例

vi alertmanger.yml
global: #global設(shè)置,receivers 中也可單獨(dú)配置
  smtp_smarthost: 'localhost:25' #smtp 郵件服務(wù)器地址,用于發(fā)送電子郵件,包括端口號(hào)。
  smtp_from: 'alertmanager@example.org' #發(fā)件人
  smtp_auth_username: 'alertmanager' #發(fā)件人賬號(hào)
  smtp_auth_password: 'password' #發(fā)件人密碼
  # smtp_require_tls: true #tls

  # 其它 api
  # [ slack_api_url: <secret> ]
  # [ wechat_api_url: <string> | default = "https://qyapi.weixin.qq.com/cgi-bin/" ]
  # [ wechat_api_secret: <secret> ]
  # [ wechat_api_corp_id: <string> ]


route:
  receiver: "db-alert-email" #本規(guī)則的收件人,配置為下面的 receivers 中的 name 即可

  group_by: ['env','instance','alertname','type','group','job'] # 警報(bào)聚合規(guī)則,避免類似于一臺(tái)服務(wù)器故障后,被各種規(guī)則的警報(bào)郵件刷屏的情況

  group_wait:      30s #警報(bào)聚合等待時(shí)間,收集更多的警報(bào)為同一組

  group_interval:  3m #添加到已發(fā)送的警報(bào)聚合郵件之前,新的警報(bào)需要等待多長(zhǎng)時(shí)間

  repeat_interval: 3m #如果已經(jīng)成功發(fā)送了警報(bào)郵件,那么在再次發(fā)送通知之前需要等待多長(zhǎng)時(shí)間

……

receivers:
- name: 'db-alert-email' #收件名,上面 route 里會(huì)用到
  email_configs:
  - send_resolved: true #是否通知警報(bào)被解決,即 Alert 消失也發(fā)郵件
    to: 'xxx@xxx.com' #收件人
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容