优先让etcd自身暴露metrics接口并由Prometheus直接抓取,最轻量稳定且指标最全;需显式启用--metrics=extensive和--listen-metrics-urls=https://www.php.cn/link/b2e6494f1c9f0ae2fcdf23310ea73b46,Prometheus配置中targets必须指向2381端口而非2379。

直接上结论:不要用 etcd-exporter,优先让 etcd 自身暴露 metrics 接口,再由 Prometheus 直接抓取。这是最轻量、最稳定、指标最全的方式,etcd v3.4+ 原生支持,无需额外进程和端口。
etcd 必须开启 --metrics 和 --listen-metrics-urls
etcd 默认不暴露 Prometheus 指标,必须显式启用,否则 curl <a href="https://www.php.cn/link/378e08286020ac5d67dccfb8a13ffe1e">https://www.php.cn/link/378e08286020ac5d67dccfb8a13ffe1e</a> 会返回 404 或连接拒绝。
-
启动参数中必须包含:
-
--metrics=extensive(比basic多出 lease、txn、raft 等关键指标) -
--listen-metrics-urls=<a href="https://www.php.cn/link/b2e6494f1c9f0ae2fcdf23310ea73b46">https://www.php.cn/link/b2e6494f1c9f0ae2fcdf23310ea73b46</a>(注意是http,不是https;若需 TLS,则用https+ 对应证书参数)
-
-
systemd 配置示例(
/etc/systemd/system/etcd.service):ExecStart=/usr/local/bin/etcd \ --name=etcd-node1 \ --data-dir=/var/lib/etcd \ --listen-metrics-urls=https://www.php.cn/link/b2e6494f1c9f0ae2fcdf23310ea73b46 \ --metrics=extensive \ --initial-advertise-peer-urls=https://192.168.1.10:2380 \ --listen-peer-urls=https://192.168.1.10:2380 \ --advertise-client-urls=https://192.168.1.10:2379 \ --listen-client-urls=https://192.168.1.10:2379
-
修改后执行:
sudo systemctl daemon-reload && sudo systemctl restart etcd
-
验证:
curl -s http://localhost:2381/metrics | head -n 5
应看到类似# HELP etcd_disk_wal_fsync_duration_seconds的行。
prometheus.yml 中配置 scrape_configs 抓取 etcd
Prometheus 不识别 etcd 的 client 端口(2379),只认 metrics 端口(2381)。别把 targets 写成 ['192.168.1.10:2379'],那是错的。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
正确写法(静态配置,适用于小集群):
scrape_configs: - job_name: 'etcd' scrape_interval: 15s scheme: http static_configs: - targets: ['192.168.1.10:2381', '192.168.1.11:2381', '192.168.1.12:2381'] # 若 etcd metrics 启用了 TLS,才加 tls_config # tls_config: # ca_file: /etc/etcd/ssl/ca.pem # cert_file: /etc/etcd/ssl/etcd-metrics.pem # key_file: /etc/etcd/ssl/etcd-metrics-key.pem -
关键点:
-
scheme: http必须显式声明(默认是http,但显式写更安全) -
targets地址必须与 etcd 启动时--listen-metrics-urls绑定的 IP 和端口一致 - 如果 Prometheus 和 etcd 不在同一台机器,确保防火墙放行 2381 端口:
sudo ufw allow 2381或对应 iptables 规则
-
-
加完配置后重载:
curl -X POST http://localhost:9090/-/reload
或重启 Prometheus 服务。
常见错误:metrics 可访问但 Prometheus 显示 DOWN
现象:浏览器能打开 <a href="https://www.php.cn/link/378e08286020ac5d67dccfb8a13ffe1e">https://www.php.cn/link/378e08286020ac5d67dccfb8a13ffe1e</a>,但 Prometheus Web UI 的 Status → Targets 里该 job 显示 DOWN,错误信息为 server returned HTTP status 400 Bad Request 或 connection refused。
原因和解法:
-
connection refused:Prometheus 访问的是 localhost,但 etcd metrics 只监听了具体 IP(如--listen-metrics-urls=<a href="https://www.php.cn/link/ee7230dec6c5cf2229f0a706a265ca49">https://www.php.cn/link/ee7230dec6c5cf2229f0a706a265ca49</a>),没监听0.0.0.0。→ 改成<a href="https://www.php.cn/link/b2e6494f1c9f0ae2fcdf23310ea73b46">https://www.php.cn/link/b2e6494f1c9f0ae2fcdf23310ea73b46</a> -
HTTP 400:etcd 启用了 TLS metrics,但 Prometheus 配置里没加tls_config,或证书路径错误。→ 检查ca_file是否可读、是否匹配 etcd metrics 服务端证书 -
no such host:target 写了主机名但 DNS 不通。→ 改用 IP,或在 Prometheus 所在机器的/etc/hosts中补全解析
etcd 的 metrics 端口(2381)和 client 端口(2379)是两个独立通道,功能完全分离。很多人卡在第一步——误以为启动 etcd 就自动有 metrics,其实它默认关闭;也有人在第二步把端口写错,导致 Prometheus 一直连不上。盯住这两个端口和对应参数,基本就扫清了 90% 的问题。

















