如何监控 Nacos 服务注册数与心跳异常指标配置 Prometheus?

文章导读
直接开启 Nacos 自带的 Prometheus 接口,配合 Prometheus 抓取配置即可,不需要额外部署 exporter。
📋 目录
  1. A 核心监控指标与 PromQL 示例
  2. B Nacos 服务端配置开启
  3. C Prometheus 抓取配置
  4. D 验证步骤
  5. E 常见坑与排查
A A

直接开启 Nacos 自带的 Prometheus 接口,配合 Prometheus 抓取配置即可,不需要额外部署 exporter。

先说结论:Nacos 服务端内置了监控指标暴露能力,配置 Prometheus 抓取该接口是最标准且维护成本最低的方案。

  • 适合:需要监控 Nacos 集群健康度、服务注册实例数及心跳连接状态的场景。
  • 先准备:确认 Nacos 版本支持 Actuator 或 Prometheus 端点,并确保网络可达。
  • 验收:在 Prometheus 后台能查询到 nacos 相关指标且数值随服务上下线变化。
  • 安全:生产环境严禁关闭鉴权,建议通过 IP 白名单或监控专用账号隔离。

核心监控指标与 PromQL 示例

标题中提到的“服务注册数”与“心跳异常”对应以下具体指标,可直接复制使用:

监控目标指标名称 (Metric)PromQL 查询示例
服务注册实例总数nacos_naming_instance_countsum(nacos_naming_instance_count)
命名空间下服务数nacos_naming_service_countsum(nacos_naming_service_count)
gRPC 客户端连接数 (2.x)nacos_core_client_connection_countsum(nacos_core_client_connection_count)
心跳异常间接监控实例计数变化率irate(nacos_naming_instance_count[5m]) < 0

注意:心跳异常通常没有直接计数器,建议监控实例数量的负向波动或 gRPC 连接数的骤降。

Nacos 服务端配置开启

登录 Nacos 服务器,检查配置文件(application.properties 或 application.yml)。大部分发行版默认开启,但需确认以下配置项未被禁用:

# application.properties 示例
management.endpoints.web.exposure.include=prometheus,health,info
management.endpoint.prometheus.enabled=true
# 确保端口未被防火墙拦截,默认复用主端口 8848 或独立端口
server.port=8848

集群模式说明:集群环境下,需在每个 Nacos 节点上分别配置上述参数。Prometheus 配置时应将所有节点 IP 加入 targets 列表,或通过对服 务名发现进行抓取,避免单点监控盲区。

Prometheus 抓取配置

编辑 Prometheus 的 prometheus.yml 文件,添加一个新的 job。重点是指定正确的 targets 和 metrics_path。

# Prometheus 配置示例 (prometheus.yml)
- job_name: 'nacos'
  static_configs:
  - targets: ['nacos-server-ip:8848']
  metrics_path: '/nacos/actuator/prometheus'
  # 安全建议:若开启鉴权,不要关闭 Nacos 鉴权,而是使用以下两种方式之一
  # 方式 1: 基础认证 (如果 Nacos_actuator_接口支持独立认证)
  # basic_auth:
  #   username: monitor
  #   password: password
  # 方式 2: 通过网络层白名单 (推荐),在 Nacos 服务器防火墙或网关层仅允许 Prometheus IP 访问 8848 端口

注意 metrics_path 可能因版本不同而有差异,旧版本可能是 `/nacos/actuator/prometheus`,新版本可能直接集成在 actuator 路径下。

验证步骤

1. 命令行 curl 验证

在配置 Prometheus 前,先在 Prometheus 服务器或同网段机器上使用 curl 测试接口连通性及数据输出:

curl -x GET http://nacos-server-ip:8848/nacos/actuator/prometheus

若返回包含 `nacos_` 开头的文本数据,说明接口正常。若返回 401/403,说明鉴权拦截,需配置认证或白名单。

2. 检查 Prometheus Targets 状态

如何监控 Nacos 服务注册数与心跳异常指标配置 Prometheus?

访问 Prometheus 网页控制台,进入 Status -> Targets 页面。找到配置的 nacos job,确保 State 显示为 UP。

3. 查询指标是否有数据

在 Graph 页面输入关键字 nacos,查看是否有返回的时间序列。尝试执行查询,观察曲线是否随服务启停产生波动。

常见坑与排查

1. 版本差异导致路径不同

Nacos 1.x 和 2.x 在指标暴露路径上可能存在差异。2.x 版本引入了 gRPC 连接,部分 HTTP 指标可能不再适用,需关注连接数相关指标。如果配置后抓不到数据,优先尝试调整 metrics_path。

2. 鉴权导致抓取失败

生产环境 Nacos 通常开启鉴权。严禁为了监控暂时关闭鉴权。建议配置监控专用账号,或通过 Nginx/防火墙设置 IP 白名单,仅允许 Prometheus 服务器 IP 访问 metrics 接口。

3. 指标基数过大

如果服务实例数量极大,暴露的指标标签(labels)过多可能导致 Prometheus 抓取超时或内存飙升。建议在高规模场景下,通过 relabeling 规则丢弃不必要的标签,或调整 Nacos 的指标采集粒度。

4. 心跳异常的间接性

不要指望直接找到“心跳失败次数”这样的指标。心跳异常通常表现为实例被剔除,因此监控实例总数的变化率(irate)往往比监控绝对值更能及时发现异常。