配置数据服务自定义告警指标
本节列举了数据服务组件常用的自定义告警指标及其表达式,可用于实现更全面的性能监控和告警。
注意与建议
阅读本最佳实践前,您应大概了解平台通用的 创建告警策略 操作。当您开始为数据服务各组件配置自定义告警指标时,请注意以下事项:
- 
告警策略监控的资源对象:实例对应的有状态副本集。 
- 
在自定义告警规则中,需使用符合 promsql 语法的表达式。本节中所有示例均满足此要求。 
- 
建议使用容器组名称 {{.service_name}}、容器组 IP{{.instance}}、或容器组名称和 IP{{.service_name}} {{.instance}}作为图例参数。
- 
如需为不同命名空间的实例配置相同告警策略,请先 创建告警模版 ,并重复使用该模板创建告警策略。 
常用指标及表达式
MySQL
本节所列指标的监控对象均为 MySQL 节点。如果希望监控 MySQL 集群,需要去除 service_name 变量,并增加 sum 函数,例如下图表示将对 MySQL 集群的排序行数进行告警。
 
PXC 架构
- 
有状态副本集命名规则:{实例名称}-pxc,例如 mysql-pxc 。 
- 
MySQL 容器组命名规则:{实例名称}-pxc-{有序数字},例如 mysql-pxc-0 。 
MGR 架构
- 
有状态副本集命名规则:{实例名称},例如 mysql 。 
- 
MySQL 容器组命名规则:{实例名称}-{有序数字},例如 mysql-0 。 
| 指标名称 | 表达式 | 
|---|---|
| 响应最大连接数 | max_over_time(mysql_global_status_max_used_connections{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称"}[5m]) | 
| 使用连接数 | max_over_time(mysql_global_status_threads_connected{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称"}[5m]) | 
| 运行线程数 | max_over_time(mysql_global_status_threads_running{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称"}[5m]) | 
| 立即释放的表锁数量 | irate(mysql_global_status_table_locks_immediate{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称"}[5m]) | 
| 表锁等待次数 | irate(mysql_global_status_table_locks_waited{service="有状态副本集",namespace="命名空间",service_name="MySQL 容器组名称"}[5m]) | 
| 慢查询数 | irate(mysql_global_status_slow_queries{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称"}[5m]) | 
| 排序行数 | irate(mysql_global_status_sort_rows{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称"}[5m]) | 
| innodb 读请求数 | irate(mysql_global_status_innodb_buffer_pool_read_requests{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称"}[5m]) | 
| innodb 写请求数 | irate(mysql_global_status_innodb_buffer_pool_write_requests{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称"}[5m]) | 
| delete 语句数 | irate(mysql_global_status_commands_total{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称",command="delete"}[5m]) | 
| insert 语句数 | irate(mysql_global_status_commands_total{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称",command="insert"}[5m]) | 
| replace 语句数 | irate(mysql_global_status_commands_total{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称",command="replace"}[5m]) | 
| select 语句数 | irate(mysql_global_status_commands_total{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称",command="select"}[5m]) | 
| update 语句数 | irate(mysql_global_status_commands_total{service="有状态副本集名称",namespace="命名空间",service_name="MySQL 容器组名称",command="update"}[5m]) | 
Redis
本节所列指标的监控对象均为 Redis 节点。如果希望监控 Redis 集群,需要去除 pod 变量,并增加 sum 函数,例如下图表示将对 Redis 集群客户端连接数进行告警。
 
哨兵模式
- 
有状态副本集命名规则:rfr-{实例名称},例如 rfr-sentinel 。 
- 
Redis 容器组命名规则:rfr-{实例名称}-{有序数字},例如 rfr-sentinel-0 。 
集群模式
Redis 容器组命名规则:drc-{实例名称}-{有序数字}-{有序数字},例如 rfr-sentinel-0-1 。
| 指标名称 | 表达式 | 
|---|---|
| 客户端连接数 | redis_connected_clients{service="有状态副本集名称(哨兵模式) 或 实例名称(集群模式)",namespace="命名空间",pod="redis 容器组名称"} | 
| 内存使用情况 | redis_memory_used_bytes{service="有状态副本集名称(哨兵模式) 或 实例名称(集群模式)",namespace="命名空间",pod="redis 容器组名称"}) | 
| redis 流入字节数 | rate(redis_net_input_bytes_total{service="有状态副本集名称(哨兵模式) 或 实例名称(集群模式)",namespace="命名空间",pod="redis 容器组名称"}[1m]) | 
| redis 流出字节数 | rate(redis_net_output_bytes_total{service="有状态副本集名称(哨兵模式) 或 实例名称(集群模式)",namespace="命名空间",pod="redis 容器组名称"}[1m]) | 
| key 过期数 | irate(redis_expired_keys_total{service="有状态副本集名称(哨兵模式) 或 实例名称(集群模式)",namespace="命名空间",pod="redis 容器组名称"}[1m]) | 
| 请求键被命中的次数 | redis_keyspace_hits_total{service="有状态副本集名称(哨兵模式) 或 实例名称(集群模式)",namespace="命名空间",pod="redis 容器组名称"} | 
| 处理请求总数 | irate(redis_commands_processed_total{service="有状态副本集名称(哨兵模式) 或 实例名称(集群模式)",namespace="命名空间",pod="redis 容器组名称"}[1m]) | 
| key 驱逐数 | irate(redis_evicted_keys_total{service="有状态副本集名称(哨兵模式) 或 实例名称(集群模式)",namespace="命名空间",pod="redis 容器组名称"}[1m]) | 
| 慢日志数量 | rate(redis_slowlog_length{service="有状态副本集名称(哨兵模式) 或 实例名称(集群模式)",namespace="命名空间",pod="redis 容器组名称"}[1m]) | 
Kafka
本节所列指标的监控对象均为 Kafka 节点。如果希望监控 Kafka 集群,需要去除 pod 变量,并增加 sum 函数,例如下图表示将对 Kakfa 集群的在线 broker 数进行告警。
 
- 
有状态副本集命名规则:{Kafka 实例名称}-bootstrap,例如 kafka-bootstrap 。 
- 
Kafka 容器组(容器组)命名规则:{Kafka 实例名称}-{有序数字},例如 kafka-0 。 
| 指标名称 | 表达式 | 
|---|---|
| 在线 broker 数 | kafka_server_replicamanager_leadercount{service="有状态副本集名称",namespace="命名空间",pod="Kafka 容器组名称"} | 
| 活跃控制器数 | kafka_controller_kafkacontroller_activecontrollercount{service="有状态副本集名称",namespace="命名空间",pod="Kafka 容器组名称"} | 
| 争议的 leader 选举次数 | irate(kafka_controller_controllerstats_uncleanleaderelections_total{service="有状态副本集名称",namespace="命名空间",pod="Kafka 容器组名称"}[5m]) | 
| 分区数量 | kafka_server_replicamanager_partitioncount{service="有状态副本集名称",namespace="命名空间",pod="Kafka 容器组名称"} | 
| 输入的流量 | irate(kafka_server_brokertopicmetrics_bytesin_total{service="有状态副本集名称",namespace="命名空间",pod="Kafka 容器组名称"}[1m]) | 
| 输出的流量 | irate(kafka_server_brokertopicmetrics_bytesout_total{service="有状态副本集名称",namespace="命名空间",pod="Kafka 容器组名称"}[1m]) | 
| 消息写入总量 | irate(kafka_server_brokertopicmetrics_messagesin_total{service="有状态副本集名称",namespace="命名空间",pod="Kafka 容器组名称"}[1m]) | 
RabbitMQ
本节所列指标的监控对象均为 RabbitMQ 节点。如果希望监控 RabbitMQ 集群,需要去除 pod 变量,并增加 sum 函数,例如下图表示将对 RabbitMQ 集群的队列数进行告警。
 
RabbitMQ 容器组命名规则:{RabbitMQ 实例名称}-server-{有序数字},例如 rabbitmq-server-0 。
| 指标名称 | 表达式 | 
|---|---|
| 流入消息数 | rate(rabbitmq_channel_messages_published_total[60s]) * on(instance) group_left(rabbitmq_cluster) rabbitmq_identity_info{rabbitmq_cluster="实例名称", namespace="命名空间",pod="RabbitMQ 容器组名称"} | 
| 连接数 | rabbitmq_connections * on(instance) group_left(rabbitmq_cluster) rabbitmq_identity_info{rabbitmq_cluster="实例名称", namespace="命名空间",pod="RabbitMQ 容器组名称"} | 
| 信道数 | rabbitmq_channels * on(instance) group_left(rabbitmq_cluster) rabbitmq_identity_info{rabbitmq_cluster="实例名称", namespace="命名空间",pod="RabbitMQ 容器组名称"} | 
| 队列数 | rabbitmq_queues * on(instance) group_left(rabbitmq_cluster) rabbitmq_identity_info{rabbitmq_cluster="实例名称", namespace="命名空间",pod="RabbitMQ 容器组名称"} |