在微服务架构中,服务注册与配置中心是核心基础设施,Nacos 凭借其易用性、高可用性及丰富功能,成为众多企业的首选。然而,随着业务规模扩大,Nacos 集群的运行状态、接口性能、资源占用等指标的监控告警变得至关重要——及时发现异常能避免服务雪崩,保障系统稳定运行。本文将详细介绍如何基于 Prometheus + Grafana 搭建 Nacos 监控体系,实现指标采集、可视化展示与异常告警全流程落地。
一、技术栈选型与核心原理
1.1 核心组件作用
Nacos:提供服务注册/发现、配置管理功能,内置监控指标暴露接口(基于 Prometheus 格式),可直接输出集群状态、配置变更、服务健康度等指标。
Prometheus:开源时序数据库,核心能力是定时拉取目标服务的监控指标、存储时序数据,并支持灵活的查询语句(PromQL)筛选指标。作为监控体系的“数据采集与存储中心”,负责从 Nacos 集群拉取指标并持久化。
Grafana:开源可视化平台,支持对接 Prometheus 等多种数据源,通过自定义仪表盘(Dashboard)将时序数据转化为直观的图表,实现指标可视化监控。
AlertManager:Prometheus 生态组件,负责处理 Prometheus 触发的告警规则,支持邮件、钉钉、企业微信等多种通知渠道,实现异常告警推送。
1.2 整体架构逻辑
核心流程:Nacos 暴露 Prometheus 格式指标 → Prometheus 按配置周期拉取指标并存储 → Grafana 对接 Prometheus 数据源,通过 Dashboard 可视化展示指标 → Prometheus 基于预设规则判断异常,触发告警 → AlertManager 接收告警并推送至指定渠道。
二、环境准备与前置配置
2.1 基础环境要求
本次实战基于 Linux 系统(CentOS 7.x),需提前准备以下环境:
JDK 1.8+(Nacos 运行依赖)
Nacos 2.x 集群/单机(本文以集群为例,单机配置类似)
Prometheus 2.40+(时序数据采集存储)
Grafana 9.x+(可视化展示)
AlertManager 0.25+(告警管理,可选,若需告警功能则部署)
网络通畅:确保 Prometheus 能访问 Nacos 的指标端口(默认 8848),Grafana 能访问 Prometheus 端口(默认 9090)。
2.2 Nacos 指标暴露配置
Nacos 2.x 版本默认开启 Prometheus 指标暴露功能,无需额外依赖,仅需确认配置是否正确:
- 进入 Nacos 安装目录,编辑配置文件
conf/application.properties,确认以下配置存在(默认已开启):
`# 开启 Prometheus 指标暴露
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
指标访问路径(默认 /actuator/prometheus)
management.endpoints.web.base-path=/actuator`
- 重启 Nacos 集群,验证指标是否可访问:
curl http://{nacos-ip}:8848/nacos/actuator/prometheus
若返回大量 Prometheus 格式指标(如nacos_server_status、nacos_config_count等),说明 Nacos 指标暴露正常。
三、Prometheus 配置:采集 Nacos 指标
3.1 安装 Prometheus
- 下载并解压 Prometheus 安装包:
`# 下载对应版本(可到 Prometheus 官网获取最新版)
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
解压
tar -zxvf prometheus-2.45.0.linux-amd64.tar.gz -C /usr/local/
重命名简化路径
mv /usr/local/prometheus-2.45.0.linux-amd64 /usr/local/prometheus`
- 验证安装:
/usr/local/prometheus/prometheus --version
若输出版本信息,说明安装成功。
3.2 配置 Nacos 指标采集规则
编辑 Prometheus 配置文件/usr/local/prometheus/prometheus.yml,添加 Nacos 集群的采集任务:
global:scrape_interval:15s# 全局采集间隔,默认 15 秒evaluation_interval:15s# 告警规则评估间隔,默认 15 秒# 告警规则文件配置(后续配置告警时使用)rule_files:-"nacos-alert-rules.yml"# 自定义 Nacos 告警规则文件# 采集目标配置scrape_configs:# 任务名称,自定义-job_name:'nacos-cluster'# 采集路径(Nacos 指标暴露路径)metrics_path:'/nacos/actuator/prometheus'# 采集目标列表(Nacos 集群所有节点)static_configs:-targets:['192.168.0.101:8848','192.168.0.102:8848','192.168.0.103:8848']labels:group:'nacos-cluster'# 自定义标签,用于筛选指标关键配置说明:
scrape_interval:采集间隔,根据业务需求调整(核心指标建议 10-15 秒,非核心可 30 秒以上)。metrics_path:必须与 Nacos 指标暴露路径一致,即/nacos/actuator/prometheus。targets:填写 Nacos 集群所有节点的 IP:端口,确保 Prometheus 能访问这些节点。
3.3 启动 Prometheus 并验证采集
启动 Prometheus(后台运行):
nohup /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml > /var/log/prometheus.log 2>&1&访问 Prometheus 控制台(默认端口 9090):
http://{prometheus-ip}:9090。验证 Nacos 指标采集:
在控制台顶部输入框输入 Nacos 指标(如
nacos_server_status),点击“Execute”。若能看到指标数据及对应 Nacos 节点,说明采集配置生效。
四、Grafana 配置:可视化 Nacos 指标
4.1 安装 Grafana
- 通过 YUM 安装 Grafana(CentOS 系统):
`# 添加 Grafana 仓库
cat > /etc/yum.repos.d/grafana.repo << EOF
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
安装 Grafana
yum install -y grafana`
启动 Grafana 服务并设置开机自启:
systemctl start grafana-server systemctl enable grafana-server验证安装:访问 Grafana 控制台(默认端口 3000),默认账号密码为
admin/admin,首次登录需修改密码。
4.2 对接 Prometheus 数据源
登录 Grafana 控制台,点击左侧菜单栏「Configuration」→「Data Sources」,点击「Add data source」。
选择「Prometheus」作为数据源,配置核心参数:
Name:自定义数据源名称(如 Prometheus-Nacos)。
URL:Prometheus 访问地址(如
http://192.168.0.104:9090)。Scrape interval:与 Prometheus 采集间隔一致(15s)。
点击「Save & Test」,若提示“Data source is working”,说明对接成功。
4.3 导入 Nacos 可视化 Dashboard
Grafana 社区提供了现成的 Nacos Dashboard,无需手动配置图表,直接导入即可:
点击左侧菜单栏「Dashboards」→「Browse」,点击「Import」。
在导入页面输入 Nacos Dashboard ID:13221(社区热门 Nacos Dashboard,支持 Nacos 2.x),点击「Load」。
选择已对接的 Prometheus 数据源(Prometheus-Nacos),点击「Import」。
导入成功后,即可看到 Nacos 完整监控面板,包含:
集群状态:节点存活数、服务状态。
配置管理:配置总数、配置变更次数、配置同步状态。
服务注册:注册服务数、实例数、健康实例数。
性能指标:接口响应时间、JVM 内存占用、CPU 使用率。
提示:若需自定义图表,可在 Dashboard 中点击「Add panel」,通过 PromQL 语句筛选指标,调整图表样式(折线图、柱状图、仪表盘等)。
五、告警配置:基于 AlertManager 实现异常通知
5.1 安装并配置 AlertManager
下载并解压 AlertManager:
wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz tar -zxvf alertmanager-0.25.0.linux-amd64.tar.gz -C /usr/local/ mv /usr/local/alertmanager-0.25.0.linux-amd64 /usr/local/alertmanager配置告警渠道(以钉钉为例):编辑
/usr/local/alertmanager/alertmanager.yml:
`global:
resolve_timeout: 5m # 告警恢复后,多久发送恢复通知
route:
group_by: [‘alertname’] # 按告警名称分组
group_wait: 10s # 分组内首个告警触发后,等待 10s 再发送(避免瞬时告警)
group_interval: 10s # 同一分组内,两次告警发送间隔
repeat_interval: 1h # 同一告警,重复发送间隔(避免频繁告警)
receiver: ‘dingtalk-notifier’ # 默认告警接收者
告警接收者配置(钉钉机器人)
receivers:
- name: ‘dingtalk-notifier’
webhook_configs:- url: ‘https://oapi.dingtalk.com/robot/send?access_token={你的钉钉机器人token}’
send_resolved: true # 告警恢复后发送通知
- url: ‘https://oapi.dingtalk.com/robot/send?access_token={你的钉钉机器人token}’
抑制规则(可选,避免重复告警)
inhibit_rules:
- source_match:
severity: ‘critical’
target_match:
severity: ‘warning’
equal: [‘alertname’, ‘dev’, ‘instance’]`
说明:钉钉机器人需提前创建(群设置 → 智能群助手 → 添加机器人 → 自定义机器人),获取 access_token,并配置 IP 白名单(允许 AlertManager 服务器 IP 访问)。
- 启动 AlertManager:
nohup /usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml > /var/log/alertmanager.log 2>&1&
5.2 配置 Nacos 告警规则
- 在 Prometheus 安装目录下创建告警规则文件
nacos-alert-rules.yml,添加核心告警规则:
`groups:
name: nacos-alert-rules
rules:1. Nacos 节点宕机告警
- alert: NacosNodeDown
expr: nacos_server_status == 0
for: 30s
labels:
severity: critical
annotations:
summary: “Nacos 节点宕机”
description: “Nacos 节点 {{ $labels.instance }} 已宕机,持续时间超过 30 秒,请及时排查。”
2. 配置同步失败告警
- alert: NacosConfigSyncFailed
expr: nacos_config_sync_failed_total > 0
for: 1m
labels:
severity: warning
annotations:
summary: “Nacos 配置同步失败”
description: “Nacos 节点 {{ $labels.instance }} 存在配置同步失败,失败次数:{{ $value }},请检查集群网络或配置。”
3. 服务实例健康率过低告警
- alert: NacosServiceHealthRateLow
expr: sum(nacos_service_instance_healthy) / sum(nacos_service_instance_total) < 0.8
for: 1m
labels:
severity: critical
annotations:
summary: “Nacos 服务实例健康率过低”
description: “当前服务实例健康率:{{ $value | printf “%.2f” }},低于 80%,请检查服务实例状态。”
4. JVM 堆内存使用率过高告警
- alert: NacosJvmHeapMemoryHigh
expr: jvm_memory_used_bytes{area=“heap”, instance=~“nacos."} / jvm_memory_max_bytes{area=“heap”, instance=~"nacos.”} > 0.85
for: 2m
labels:
severity: warning
annotations:
summary: “Nacos JVM 堆内存使用率过高”
description: “Nacos 节点 {{ $labels.instance }} JVM 堆内存使用率:{{ $value | printf “%.2f” }},超过 85%,请检查内存配置或是否存在内存泄漏。”
5. 接口响应时间过长告警
alert: NacosApiResponseTimeHigh
expr: nacos_api_request_time_seconds_sum / nacos_api_request_time_seconds_count > 0.5
for: 1m
labels:
severity: warning
annotations:
summary: “Nacos 接口响应时间过长”
description: “Nacos 节点 {{ $labels.instance }} 接口平均响应时间:{{ $value | printf “%.2f” }} 秒,超过 0.5 秒,请排查性能问题。”`
规则说明:expr:基于 PromQL 语句定义告警触发条件。for:告警触发后,等待指定时间再发送(避免瞬时波动导致误告警)。severity:告警级别(critical 紧急、warning 警告)。annotations:告警详情描述,支持变量占位符(如 {{ $labels.instance }} 表示异常节点)。
- alert: NacosNodeDown
- 关联告警规则到 Prometheus:确保
prometheus.yml中rule_files已配置该规则文件(前文已配置),重启 Prometheus 使规则生效:ps -ef | grep prometheus | grep -v grep | awk '{print $2}' | xargs kill -9 nohup /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml > /var/log/prometheus.log 2>&1&
5.3 验证告警功能
在 Prometheus 控制台点击「Alerts」,可查看所有告警规则及状态(Inactive 未触发、Pending 等待中、Firing 触发中)。
模拟告警场景(如停止一个 Nacos 节点),等待 30 秒后,告警状态会变为 Firing,AlertManager 会推送告警通知到钉钉。
恢复 Nacos 节点后,等待几分钟,AlertManager 会推送告警恢复通知。
六、进阶优化与最佳实践
6.1 性能优化
Prometheus 存储优化:时序数据会占用大量磁盘空间,可通过配置
retention_time限制数据存储时长(如 15 天),避免磁盘满溢。采集间隔优化:非核心指标(如配置总数)可将采集间隔调整为 30s-1min,减少 Prometheus 压力。
Grafana 缓存优化:开启 Grafana 图表缓存,减少重复查询 Prometheus 的次数,提升可视化加载速度。
6.2 告警优化
避免误告警:通过
for字段设置等待时间,过滤瞬时波动;合理调整告警阈值(如内存使用率阈值根据 Nacos 内存配置调整)。告警分级:按影响范围划分告警级别(critical/warning/info),紧急告警推送至钉钉/企业微信,非紧急告警仅记录日志。
告警聚合:通过 AlertManager 的
group_by字段按节点、服务分组告警,避免同一问题触发多条告警。
6.3 高可用部署
Prometheus 高可用:部署两个 Prometheus 实例,同时采集 Nacos 指标,避免单点故障;通过 Thanos 实现数据持久化与集群联邦。
Grafana 高可用:多实例部署,对接同一 Prometheus 数据源,通过负载均衡器分发请求。
AlertManager 高可用:部署多个 AlertManager 实例,通过集群模式协同工作,确保告警通知不丢失。
七、总结
本文基于 Prometheus + Grafana 搭建了完整的 Nacos 监控告警体系,实现了指标采集、可视化展示、异常告警全流程覆盖。通过这套体系,开发者可实时掌握 Nacos 集群的运行状态,快速定位配置同步、服务注册、资源占用等问题,为微服务架构的稳定性提供保障。
后续可根据业务需求扩展功能,例如:对接日志系统(ELK)实现日志与监控指标联动分析,通过 Prometheus 联邦集群监控多环境 Nacos 实例,进一步提升监控体系的完整性与易用性。