在当代分布式系统中,监控是确保服务高可用性和性能稳定的重要构成部分。对于 ETCD 集群而言,监控不仅可以资助我们检测系统健康,还能在出现故障时进行快速调试。ETCD 通过多种监控端点提供了详尽的性能指标和调试信息,本篇文章将介绍怎样高效地利用 ETCD 提供的监控数据来提升集群的稳定性和可靠性。
ETCD监控概述
每个 ETCD 服务器都通过其客户端端口暴露本地监控信息,数据包括了集群状态、性能指标、日志级别调试信息等,便于进行健康查抄与故障排查。ETCD 提供了多个专门的调试和监控端点,支持系统健康查抄、性能分析、故障诊断等多种操作。
1. 调试端点
在 ETCD 设置中,如果启用 --log-level=debug,服务器将通过 /debug 路径暴露调试信息。这些信息对于分析 ETCD 的内部工作状态和进行故障排查非常有资助。请注意,启用调试模式会增加日志量并可能导致性能降落,因此发起在故障排查时利用。
/debug/pprof 端点
/debug/pprof 是 Go 运行时的标准性能分析端点,可以资助我们分析 CPU、堆内存、互斥锁和 goroutine 的利用情况。例如,可以利用 go tool pprof 获取 ETCD CPU 利用的详细情况:
- $ go tool pprof http://localhost:2379/debug/pprof/profile
复制代码 此下令将下载 CPU 利用的性能分析数据,资助我们识别系统性能瓶颈。以下是一个示例输出,列出了 ETCD 中 CPU 占用最多的函数:
- C:\Users\admin>go tool pprof http://localhost:2379/debug/pprof/profile
- Fetching profile over HTTP from http://localhost:2379/debug/pprof/profile
- Saved profile in C:\Users\admin\pprof\pprof.etcd.exe.samples.cpu.001.pb.gz
- File: etcd.exe
- Build ID: D:\data\etcd.exe2024-12-19 11:11:08.2450555 +0800 CST
- Type: cpu
- Time: Dec 26, 2024 at 10:05am (CST)
- Duration: 30.01s, Total samples = 250ms ( 0.83%)
- Entering interactive mode (type "help" for commands, "o" for options)
- (pprof) top
- Showing nodes accounting for 160ms, 64.00% of 250ms total
- Showing top 10 nodes out of 92
- flat flat% sum% cum cum%
- 40ms 16.00% 16.00% 40ms 16.00% runtime.stdcall1
- 30ms 12.00% 28.00% 30ms 12.00% runtime.cgocall
- 20ms 8.00% 36.00% 50ms 20.00% runtime.selectgo
- 10ms 4.00% 40.00% 10ms 4.00% bufio.(*Reader).Read
- 10ms 4.00% 44.00% 10ms 4.00% runtime.checkTimers
- 10ms 4.00% 48.00% 10ms 4.00% runtime.execute
- 10ms 4.00% 52.00% 70ms 28.00% runtime.findRunnable
- 10ms 4.00% 56.00% 10ms 4.00% runtime.gopark
- 10ms 4.00% 60.00% 10ms 4.00% runtime.growWork_fast64
- 10ms 4.00% 64.00% 10ms 4.00% runtime.mapdelete
- ...
复制代码 /debug/requests 端点
此端点提供 gRPC 调用的跟踪信息和性能统计,通过欣赏器可以查看每个哀求的详细实验情况。例如,以下是一个对键 abc 的 Range 哀求的日志:
- /debug/requests
- grpc.Recv.etcdserverpb.Auth [0 active] [≥0s] [≥0.05s] [≥0.1s] [≥0.2s] [≥0.5s] [≥1s] [≥10s] [≥100s] [errors] [minute] [hour] [total]
- grpc.Recv.etcdserverpb.Cluster [0 active] [≥0s] [≥0.05s] [≥0.1s] [≥0.2s] [≥0.5s] [≥1s] [≥10s] [≥100s] [errors] [minute] [hour] [total]
- grpc.Recv.etcdserverpb.KV [0 active] [≥0s] [≥0.05s] [≥0.1s] [≥0.2s] [≥0.5s] [≥1s] [≥10s] [≥100s] [errors] [minute] [hour] [total]
- grpc.Recv.etcdserverpb.Maintenance [0 active] [≥0s] [≥0.05s] [≥0.1s] [≥0.2s] [≥0.5s] [≥1s] [≥10s] [≥100s] [errors] [minute] [hour] [total]
- Family: grpc.Recv.etcdserverpb.KV
- [Normal/Summary] [Normal/Expanded] [Traced/Summary] [Traced/Expanded]
- Completed Requests
- When Elapsed (s)
- 2024/12/26 09:38:27.694690 0.010501 /etcdserverpb.KV/Compact
- 09:38:27.694690 . ... RPC: from 127.0.0.1:57267 deadline:4.998501s
- ...
复制代码 2. 性能指标端点
ETCD 还通过 /metrics 端点暴露了丰富的指标,资助我们监控集群的各项性能数据。这些指标包括磁盘延迟、哀求延迟、流量等,可以通过 curl 下令获取:
- http://localhost:2379/metrics
复制代码 这会返回 ETCD 的相干性能数据,例如:
- # HELP etcd_cluster_version Which version is running. 1 for 'cluster_version' label with current cluster version
- # TYPE etcd_cluster_version gauge
- etcd_cluster_version{cluster_version="3.5"} 1
- # HELP etcd_debugging_auth_revision The current revision of auth store.
- # TYPE etcd_debugging_auth_revision gauge
- etcd_debugging_auth_revision 9
- # HELP etcd_debugging_disk_backend_commit_rebalance_duration_seconds The latency distributions of commit.rebalance called by bboltdb backend.
- # TYPE etcd_debugging_disk_backend_commit_rebalance_duration_seconds histogram
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.001"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.002"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.004"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.008"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.016"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.032"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.064"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.128"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.256"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="0.512"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="1.024"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="2.048"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="4.096"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="8.192"} 25
- etcd_debugging_disk_backend_commit_rebalance_duration_seconds_bucket{le="+Inf"} 25
- ...
复制代码 3. 健康查抄端点
从 ETCD v3.3.0 开始,ETCD 增加了 /health 端点,能够提供更加详细的健康查抄信息。如果集群设置了互斥的客户端 TLS 认证,或者利用负载平衡器进行监控时,可以通过该端点进行健康状态的快速访问。
/livez 和 /readyz 端点
在 ETCD v3.5.12 版本中,新增了 /livez 和 /readyz 两个健康查抄端点:
- /livez:查抄 ETCD 进程是否存活。
- /readyz:查抄 ETCD 是否准备好处理流量。
例如,实验以下下令可以获取详细的健康查抄结果:
- curl -k http://localhost:2379/readyz?verbose
复制代码 返回结果可能如下所示,表示 ETCD 的各项健康查抄均正常:
- [+]data_corruption ok
- [+]serializable_read ok
- [+]linearizable_read ok
- ok
复制代码 如果需要排除某些查抄,可以通过 exclude 参数来过滤,例如:
- curl -k http://localhost:2379/readyz?exclude=data_corruption
复制代码 4. Prometheus 集成
Prometheus 是一个盛行的开源监控工具,可以轻松地收集和存储 ETCD 的监控数据。通过 Prometheus,我们可以在一个同一的平台上进行 ETCD 性能指标的可视化,资助我们更好地明白集群的状态。
安装 Prometheus
首先,下载并安装 Prometheus,下载及安装教程可以参考
【prometheus】【实战篇(一)】利用二进制方式安装prometheus以及利用systemd管理,文末附一键安装脚本
设置 Prometheus
创建 Prometheus 设置文件,指定 ETCD 集群的监控端点:
- global:
- scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
- evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
- scrape_configs:
- # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- - job_name: "prometheus"
- # metrics_path defaults to '/metrics'
- # scheme defaults to 'http'.
- static_configs:
- - targets: ["localhost:9090"]
- - job_name: node
- static_configs:
- - targets: ['localhost:9100']
- - job_name: etcd
- static_configs:
- - targets: ['192.168.188.108:2379','192.168.188.108:2384','192.168.188.108:2383']
复制代码 重启Prometheus
如果是通过文章所说的方式安装的prometheus,那么则可以通过如下方式来进行重启:
- [root@localhost ~]# systemctl daemon-reload
- [root@localhost ~]# systemctl restart prometheus
- [root@localhost ~]# systemctl status prometheus
- ● prometheus.service - Prometheus
- Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: disabled)
- Active: active (running) since Thu 2024-12-26 03:28:36 UTC; 8s ago
复制代码
通过grafana的来查看监控指标
从网址https://grafana.com/grafana/dashboards/22236-etcd/下载对应的模块,然后利用导入
点击load
点击import,
最后查看对应的操作面板
总结
通过本文介绍的 ETCD 调试端点、性能指标和健康查抄功能,管理员可以实时了解 ETCD 集群的运行状况,提前发现潜伏的性能瓶颈或故障。在生产环境中,联合 Prometheus 进行数据抓取与监控,将大大提升 ETCD 集群的可观察性和稳定性。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |