指标

用于实时监控和调试的指标

etcd 使用 Prometheus 进行指标上报。这些指标可用于实时监控和调试。etcd 不会持久化其指标;如果某个成员重启,指标将被重置。

查看可用指标的最简单方法是使用 cURL 访问指标端点 /metrics。该格式在此处有说明。

请参考 Prometheus 入门文档 启动一个 Prometheus 服务器来收集 etcd 指标。

指标的命名遵循建议的 Prometheus 最佳实践。指标名称以 etcdetcd_debugging 作为其命名空间前缀,并包含子系统前缀(例如 waletcdserver)。

etcd 命名空间指标

etcd 前缀开头的指标用于监控和告警。它们是稳定的高层级指标。如果这些指标有任何变更,都会在发布说明中注明。

与 etcd2 相关的指标在 v2 指标指南 中有详细记录。

服务器

这些指标描述了 etcd 服务器的状态。为了检测故障或问题以便排查,每个生产环境 etcd 集群的服务器指标都应被密切监控。

所有这些指标均以 etcd_server_ 为前缀

名称描述类型
has_leader是否存在领导者。1 表示存在,0 表示不存在。Gauge
leader_changes_seen_total观察到的领导者变更次数。Counter
proposals_committed_total已提交的一致性提案总数。Gauge
proposals_applied_total已应用的一致性提案总数。Gauge
proposals_pending当前待处理的提案数量。Gauge
proposals_failed_total迄今为止观察到的失败提案总数。Counter

has_leader 指示成员是否拥有领导者。如果某个成员没有领导者,则完全不可用。如果集群中的所有成员都没有领导者,整个集群将完全不可用。

leader_changes_seen_total 统计自成员启动以来所经历的领导权变更次数。频繁的领导权变更会显著影响 etcd 的性能,同时也表明领导者可能不稳定,原因可能是网络连接问题或 etcd 集群负载过高。

proposals_committed_total 记录了已提交的共识提案总数。如果集群健康,该指标应随时间持续增长。etcd 集群中多个健康的成员在某一时刻的已提交提案总数可能不同,这种差异可能是由于启动后从对等节点恢复、落后于领导者,或是本身为领导者因而拥有最多的提交数。重要的是要监控集群中所有成员的这一指标;若某个成员与其领导者之间长期存在较大差距,则表明该成员运行缓慢或不健康。

proposals_applied_total 记录了已应用的共识提案总数。etcd 服务器会异步地应用每一个已提交的提案。proposals_committed_totalproposals_applied_total 之间的差值通常应很小(即使在高负载下也应在几千以内)。如果两者之间的差距持续扩大,则表明 etcd 服务器过载。这可能发生在执行代价较高的查询时,例如大量范围查询或大型事务操作。

proposals_pending 表示有多少提案正在排队等待提交。待处理提案数量上升通常意味着客户端负载较高,或者该成员无法提交提案。

proposals_failed_total 通常与两种情况有关:与领导者选举相关的临时性失败,或因集群失去法定人数而导致的较长时间停机。

磁盘

这些指标描述了磁盘操作的状态。

所有这些指标均以 etcd_disk_ 为前缀。

名称描述类型
wal_fsync_duration_seconds由 WAL 调用的 fsync 操作的延迟分布直方图
backend_commit_duration_seconds由后端调用的 commit 操作的延迟分布。直方图

当 etcd 在应用日志条目前将其持久化到磁盘时,会调用 wal_fsync

当 etcd 将其最近更改的增量快照提交到磁盘时,会调用 backend_commit

较高的磁盘操作延迟(wal_fsync_duration_secondsbackend_commit_duration_seconds)通常表明存在磁盘问题,可能导致请求延迟升高或使集群变得不稳定。

网络

这些指标描述了网络状态。

所有这些指标均以 etcd_network_ 为前缀。

名称描述类型
peer_sent_bytes_total发送给 ID 为 To 的对等节点的字节总数。计数器(To)
peer_received_bytes_total从 ID 为 From 的对等节点接收到的字节总数。计数器(From)
peer_sent_failures_total向 ID 为 To 的对等节点发送失败的总次数。计数器(To)
peer_received_failures_total来自 ID 为 From 的对等节点的接收失败总次数。计数器(From)
peer_round_trip_time_seconds对等节点之间的往返时间直方图。Histogram(To)
client_grpc_sent_bytes_total发送到 gRPC 客户端的字节总数。Counter
client_grpc_received_bytes_total从 gRPC 客户端接收到的字节总数。Counter

peer_sent_bytes_total 统计发送到特定对等节点的字节总数。通常领导者成员发送的数据多于其他成员,因为它负责传输复制的数据。

peer_received_bytes_total 统计从特定对等节点接收到的字节总数。通常跟随者成员仅从领导者成员接收数据。

gRPC 请求

这些指标通过 go-grpc-prometheus 暴露。

etcd_debugging 命名空间指标

etcd_debugging 为前缀的指标用于调试目的。它们高度依赖具体实现且不稳定,可能会在新的 etcd 版本中被更改或移除而无需警告。其中一些指标在变得稳定后可能会被迁移到 etcd 前缀下。

快照

名称描述类型
snapshot_save_total_duration_seconds由快照调用的保存操作的总延迟分布。直方图

异常高的快照持续时间(snapshot_save_total_duration_seconds)表明存在磁盘问题,可能导致集群不稳定。

Prometheus 提供的指标

Prometheus 客户端库在 goprocess 命名空间下提供了多个指标。其中有一些特别值得关注。

名称描述类型
process_open_fds打开的文件描述符数量。Gauge
process_max_fds最大可打开的文件描述符数量。Gauge

注意:目前在 Darwin(macOS)系统上不支持 process_open_fdsprocess_max_fds 等进程相关指标。

高量级的文件描述符使用(process_open_fds,接近进程的文件描述符上限 process_max_fds)表明可能存在文件描述符耗尽的问题。如果文件描述符被耗尽,etcd 可能会因无法创建新的 WAL 文件而崩溃。

生成的指标列表

latest

最后更新于 2025 年 6 月 3 日:递归地将 v3.6 的内容复制到 v3.7(a90b2a6)