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个方法重新加载规则
- 方法1:在 monitoring/alertmanager 服务器上重启 prometheus/alertmanager 服务
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
报警规则
警报规则允许您基于 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' #收件人
网友评论