TiDB 报警配置快速指南

2019-11-08  本文已影响0人  Kassadar

TiDB 报警配置快速指南

前言

TiDB 使用 Prometheus + Alertmanger 进行报警,Grafana 仅作展示
报警配置&规则文件都使用 YAML 格式,由 TiDB-Ansible 部署时生成

报警规则文件位于 monitoring 服务器 {{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 服务通过配置文件中的 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'

重新加载规则

如果修改了配置,可通过如下2个方法重新加载规则

systemctl restart prometheus-9090.service
systemctl restart alertmanager-9093.service
curl -XPOST http://{{monitoring_server}}:9090/-/reload
curl -XPOST http://{{alertmanager_server}}:9093/-/reload

报警规则

警报规则允许您基于 PromQL 表达式定义警报条件,并向 Alertmanger 发送关于触发警报的通知。当警报表达式在给定的时间段内持续活动(满足判断条件)时,警报将被触发(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 为自定义警报条件。可根据实际情况适当调整阈值。

for 为 1 分钟内警报条件持续活动,然后才会触发警报,以防止误触。处于活动状态但尚未触发的警报处于挂起状态。

labels 指定了一组附加到警报的标签。会覆盖现有的冲突标签。可以对 label 值进行模板化。

annotation 指定了一组信息标签,用户最终所见,用于存储更长的附加信息,如警报描述或运维手册的链接。可以对 annotation 值进行模板化。

报警触发

要手动检查哪些警报处于活动状态(挂起或触发),请导航到您的 prometheus 的 Alerts 选项卡,默认是 monitoring 服务器 9090 端口。这将显示每个定义的警报当前处于活动状态的确切标签集。

同样的,也可以在 Alertmanger 中看到,默认是 alertmanager 服务器 9093 端口

PS:可以在 Alertmanger 中设置 Silence
https://www.jianshu.com/p/882c8584b117

发信配置

Alertmanger 支持通过电子邮件、实时通知系统和聊天平台等方法发送通知。发信配置文件位于 alertmanager 服务器 {{deploy_dir}}/conf/alertmanger.yml

以邮件通知为例

vi alertmanger.yml
global: #global设置,receivers 中也可单独配置
  smtp_smarthost: 'localhost:25' #smtp 邮件服务器地址,用于发送电子邮件,包括端口号。
  smtp_from: 'alertmanager@example.org' #发件人
  smtp_auth_username: 'alertmanager' #发件人账号
  smtp_auth_password: 'password' #发件人密码
  # 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" #本规则的收件人,配置为下面的 receivers 中的 name 即可

  group_by: ['env','instance','alertname','type','group','job'] # 警报聚合规则,避免类似于一台服务器故障后,被各种规则的警报邮件刷屏的情况

  group_wait:      30s #警报聚合等待时间,收集更多的警报为同一组

  group_interval:  3m #添加到已发送的警报聚合邮件之前,新的警报需要等待多长时间

  repeat_interval: 3m #如果已经成功发送了警报邮件,那么在再次发送通知之前需要等待多长时间

……

receivers:
- name: 'db-alert-email' #收件名,上面 route 里会用到
  email_configs:
  - send_resolved: true #是否通知警报被解决,即 Alert 消失也发邮件
    to: 'xxx@xxx.com' #收件人
上一篇下一篇

猜你喜欢

热点阅读