本文主要介绍etcd组件的指标清单、对应大盘的使用指导以及常见指标异常的问题解析。

指标清单

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

指标类型说明
cpu_utilization_coreGaugeCPU使用量,单位:核(Core)。
cpu_utilization_ratioGaugeCPU使用率=CPU使用量/内存资源上限,百分比形式。
etcd_server_has_leaderGaugeetcd member是否有Leader。
  • 1:表示有主节点。
  • 0:表示没有主节点。
etcd_server_is_leaderGaugeetcd member是否是Leader。
  • 1:表示是。
  • 0:表示不是。
etcd_server_leader_changes_seen_totalCounteretcd member过去一段时间切主次数。
etcd_mvcc_db_total_size_in_bytesGaugeetcd member db总大小。
etcd_mvcc_db_total_size_in_use_in_bytesGaugeetcd member db实际使用大小。
etcd_disk_backend_commit_duration_seconds_bucketHistogrametcd backend 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_totalGaugeetcd keys总数。
etcd_server_proposals_committed_totalGaugeraft proposals commit提交总数。
etcd_server_proposals_applied_totalGaugeraft proposals apply总数。
etcd_server_proposals_pendingGaugeraft proposals排队数量。
etcd_server_proposals_failed_totalCounterraft proposals失败数量。
memory_utilization_byteGauge内存使用量,单位:字节(Byte)。
memory_utilization_ratioGauge内存使用率=内存使用量/内存资源上限,百分比形式。

大盘使用指导

大盘基于组件指标和相关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集群切主次数。
内存使用量memory_utilization_byte{container="etcd"}内存使用量,单位:字节。
CPU使用量cpu_utilization_core{container="etcd"}*1000CPU使用量,单位:毫核。
内存使用率memory_utilization_ratio{container="etcd"}内存使用率,百分比。
CPU使用率cpu_utilization_ratio{container="etcd"}CPU使用率,百分比。
磁盘大小
  • etcd_mvcc_db_total_size_in_bytes
  • etcd_mvcc_db_total_size_in_use_in_bytes
  • etcd backend db总大小。
  • etcd backend db实际使用大小。
kv总数etcd_debugging_mvcc_keys_totaletcd集群kv对总数。
backend commit延迟histogram_quantile(0.99, sum(rate(etcd_disk_backend_commit_duration_seconds_bucket{job="etcd"}[5m])) by (instance, le))db commit时延。
raft proposal情况
  • rate(etcd_server_proposals_failed_total{job="etcd"}[1m])
  • etcd_server_proposals_pending{job="etcd"}
  • etcd_server_proposals_committed_total{job="etcd"} - etcd_server_proposals_applied_total{job="etcd"}
  • raft proposal failed速率(分钟)。
  • raft proposal pending总数。
  • commit-apply差值。

常见指标异常

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甚至秒级别的延迟。说明此时磁盘读写有异常。

raft proposal情况

正常情况异常情况异常说明
raft proposal failed速率为0。raft proposal failed大于0。表明Raft协议提交有失败,如遇到此值很大,则需进一步排查。
raft proposal pending总数为0。raft proposal pending总数大于0。表明Raft协议提交有积压,一般是Apply慢,可结合backend commit时延进行分析。
commit-apply差值为0。commit - apply差值大于0。表明此时etcd压力大,客户端请求过多。

若此值大于5000,etcd则会拒绝接后续的请求,并返回too many request。直到将积压的Proposals处理完毕。