etcd组件监控指标及大盘使用说明

Kubernetes集群使用etcd作为持久存储设备,用于保存集群的状态和元数据信息。作为一个分布式键值存储,etcd保证了集群数据的强一致性和高可用性。本文介绍etcd组件的监控指标清单、大盘使用指导以及常见指标异常解析。

使用前须知

操作入口

请参见查看集群控制面组件监控大盘

指标清单

指标是组件对外透出状态和参数的方式之一,etcd组件使用的指标清单如下。

指标

类型

说明

cpu_utilization_core

Gauge

CPU使用量。单位:核(Core)。

etcd_server_has_leader

Gauge

etcd基于Raft实现一致性算法。在Raft中,etcd会将集群中的某个成员(Member)选举为“Leader”,即主节点,而其他成员则作为“Follower”,即从节点。Leader会定期向所有Member发送心跳,以保持集群稳定。

此指标表示etcd Member中是否存在Leader。

  • 1:有主节点。

  • 0:没有主节点。

etcd_server_is_leader

Gauge

etcd Member是否是Leader。

  • 1:是。

  • 0:不是。

etcd_server_leader_changes_seen_total

Counter

过去一段时间内,etcd Member的切主次数,即Leader更换的次数。

etcd_mvcc_db_total_size_in_bytes

Gauge

etcd Member Database(数据库)的总大小。

etcd_mvcc_db_total_size_in_use_in_bytes

Gauge

etcd Member Database的实际使用大小。

etcd_disk_backend_commit_duration_seconds_bucket

Histogram

etcd后端commit延时,即在etcd中,数据变更写入到存储后端并成功提交(commit)所花费的时间。

Bucket阈值为[0.001, 0.002, 0.004, 0.008, 0.016, 0.032, 0.064, 0.128, 0.256, 0.512, 1.024, 2.048, 4.096, 8.192]

etcd_debugging_mvcc_keys_total

Gauge

etcd中存储的所有键(Key)的数量

etcd_server_proposals_committed_total

Gauge

etcd基于Raft实现一致性算法。在Raft中,任何试图更改系统状态的动作都以提案(Proposal)的形式被提出。

此指标指在etcd中,成功提交到Raft日志中的Proposal数量。

etcd_server_proposals_applied_total

Gauge

成功应用或执行(Apply)的Proposal数量。

etcd_server_proposals_pending

Gauge

正在等待处理的Proposal数量。

etcd_server_proposals_failed_total

Counter

处理失败的Proposal数量。

memory_utilization_byte

Gauge

内存使用量。单位:字节(Byte)。

说明

如下资源使用率指标已废弃,请及时去除依赖该指标的告警和监控。

  • cpu_utilization_ratio:CPU使用率。

  • memory_utilization_ratio:内存使用率。

大盘使用指导

大盘基于组件指标和相关PromQL绘制,大盘可观测性展示和功能解析如下。

可观测性展示

etcd

功能解析

名称

PromQL

说明

etcd存活状态

  • etcd_server_has_leader

  • etcd_server_is_leader == 1

  • etcd Member是否存活。正常值为3。

  • etcd Member是否是主节点。正常情况下,必须有一个Member为主节点。

过去一天切主次数

changes(etcd_server_leader_changes_seen_total{job="etcd"}[1d])

过去一天内etcd集群切主次数,即Leader更换的次数。

内存使用量

memory_utilization_byte{container="etcd"}

内存使用量。单位:字节。

CPU使用量

cpu_utilization_core{container="etcd"}*1000

CPU使用量。单位:毫核。

磁盘大小

etcd_mvcc_db_total_size_in_bytes

etcd Backend DB总大小,即etcd后端数据库总大小。

etcd_mvcc_db_total_size_in_use_in_bytes

etcd Backend DB实际使用大小,即etcd后端数据库实际使用大小。

kv总数

etcd_debugging_mvcc_keys_total

etcd集群KV对(键对)总数。

backend commit 延迟

histogram_quantile(0.99, sum(rate(etcd_disk_backend_commit_duration_seconds_bucket{job="etcd"}[5m])) by (instance, le))

后端Commit时延,即Proposal在etcd数据库完成持久化存储所需要的时间。

raft proposal 情况

rate(etcd_server_proposals_failed_total{job="etcd"}[1m])

Raft Proposal提交失败的速率(分钟)。

etcd_server_proposals_pending{job="etcd"}

Pending的Raft Proposal总数。

etcd_server_proposals_committed_total{job="etcd"} - etcd_server_proposals_applied_total{job="etcd"}

Raft Proposal中,Committed和Applied的数量差值,即已提交但尚未执行的Proposal数量。

常见指标异常

如果组件的常见指标异常,请对照下文的情况说明排查是否为预期内情况。如果发生非预期异常,请提交工单处理。

etcd存活状态

正常情况

异常情况

异常说明

3个etcd Member都有Leader,且其中之一必须为Leader,即sum(etcd_server_has_leader)=3,且仅有一个member etcd_server_is_leader == 1

单个Member异常。

对应的member etcd_server_has_leader!=1,不影响整体etcd集群对外提供服务。

大于1个Member异常。

多个member etcd_server_has_leader!=1,Member异常大于1,此时etcd集群无法对外提供服务。

同时,请观察是否存在Member的etcd_server_is_leader == 1。如果没有,etcd则处于无主状态,无法对外提供服务。

Backend Commit时延

正常情况

异常情况

异常说明

指标处于几ms到几十ms。

长时间出现几百ms甚至秒级别的延迟。

磁盘读写存在异常。

Raft Proposal异常

正常情况

异常情况

异常说明

Raft Proposal Failed速率为0。

raft proposal failed大于0。

有Raft Proposal提交失败。如果此值较大,需进一步排查。

Pending的Raft Proposal总数为0。

Pending的Raft Proposal总数大于0。

提交的Raft Proposal有积压,一般是由于Apply速度较慢,可结合后端Commit时延进行分析。

Raft Proposal的Committed和Applied数量差值为0。

Committed和Applied数量差值大于0。

客户端请求过多,etcd压力较大。

若此值大于5000,etcd会拒绝接后续的请求,并返回too many requests,直至积压的Proposal全部处理完毕。

相关文档

关于其他集群控制面组件监控的指标详情、大盘使用指引和常见指标异常说明,请参见kube-apiserver组件监控指标说明kube-scheduler组件监控指标说明kube-controller-manager组件监控指标说明cloud-controller-manager组件监控指标说明