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。
|
etcd_server_is_leader | Gauge | etcd Member是否是Leader。
|
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阈值为 |
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绘制,大盘可观测性展示和功能解析如下。
可观测性展示
功能解析
名称 | PromQL | 说明 |
etcd存活状态 |
|
|
过去一天切主次数 | 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,即 | 单个Member异常。 | 对应的 |
大于1个Member异常。 | 多个 同时,请观察是否存在Member的 |
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会拒绝接后续的请求,并返回 |
相关文档
关于其他集群控制面组件监控的指标详情、大盘使用指引和常见指标异常说明,请参见kube-apiserver组件监控指标说明、kube-scheduler组件监控指标说明、kube-controller-manager组件监控指标说明、cloud-controller-manager组件监控指标说明。