配置数据服务自定义告警指标
本节列举了数据服务组件常用的自定义告警指标及其表达式,可用于实现更全面的性能监控和告警。
注意与建议
阅读本最佳实践前,您应大概了解平台通用的 创建告警策略 操作。当您开始为数据服务各组件配置自定义告警指标时,请注意以下事项:
-
告警策略监控的资源对象:实例对应的有状态副本集。
-
在自定义告警规则中,需使用符合 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 容器组名称"} |