news 2026/4/18 10:05:51

Nacos进阶实战 04,Nacos 监控告警实战:基于 Prometheus + Grafana 搭建高可用监控体系

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nacos进阶实战 04,Nacos 监控告警实战:基于 Prometheus + Grafana 搭建高可用监控体系

在微服务架构中,服务注册与配置中心是核心基础设施,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 指标暴露功能,无需额外依赖,仅需确认配置是否正确:

  1. 进入 Nacos 安装目录,编辑配置文件conf/application.properties,确认以下配置存在(默认已开启):
    `# 开启 Prometheus 指标暴露
    management.endpoints.web.exposure.include=*
    management.endpoint.health.show-details=always

指标访问路径(默认 /actuator/prometheus)

management.endpoints.web.base-path=/actuator`

  1. 重启 Nacos 集群,验证指标是否可访问:
    curl http://{nacos-ip}:8848/nacos/actuator/prometheus
    若返回大量 Prometheus 格式指标(如nacos_server_statusnacos_config_count等),说明 Nacos 指标暴露正常。

三、Prometheus 配置:采集 Nacos 指标

3.1 安装 Prometheus

  1. 下载并解压 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`

  1. 验证安装:
    /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 并验证采集

  1. 启动 Prometheus(后台运行):nohup /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml > /var/log/prometheus.log 2>&1&

  2. 访问 Prometheus 控制台(默认端口 9090):http://{prometheus-ip}:9090

  3. 验证 Nacos 指标采集:

    • 在控制台顶部输入框输入 Nacos 指标(如nacos_server_status),点击“Execute”。

    • 若能看到指标数据及对应 Nacos 节点,说明采集配置生效。

四、Grafana 配置:可视化 Nacos 指标

4.1 安装 Grafana

  1. 通过 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`

  1. 启动 Grafana 服务并设置开机自启:
    systemctl start grafana-server systemctl enable grafana-server

  2. 验证安装:访问 Grafana 控制台(默认端口 3000),默认账号密码为admin/admin,首次登录需修改密码。

4.2 对接 Prometheus 数据源

  1. 登录 Grafana 控制台,点击左侧菜单栏「Configuration」→「Data Sources」,点击「Add data source」。

  2. 选择「Prometheus」作为数据源,配置核心参数:

    • Name:自定义数据源名称(如 Prometheus-Nacos)。

    • URL:Prometheus 访问地址(如http://192.168.0.104:9090)。

    • Scrape interval:与 Prometheus 采集间隔一致(15s)。

  3. 点击「Save & Test」,若提示“Data source is working”,说明对接成功。

4.3 导入 Nacos 可视化 Dashboard

Grafana 社区提供了现成的 Nacos Dashboard,无需手动配置图表,直接导入即可:

  1. 点击左侧菜单栏「Dashboards」→「Browse」,点击「Import」。

  2. 在导入页面输入 Nacos Dashboard ID:13221(社区热门 Nacos Dashboard,支持 Nacos 2.x),点击「Load」。

  3. 选择已对接的 Prometheus 数据源(Prometheus-Nacos),点击「Import」。

  4. 导入成功后,即可看到 Nacos 完整监控面板,包含:

    • 集群状态:节点存活数、服务状态。

    • 配置管理:配置总数、配置变更次数、配置同步状态。

    • 服务注册:注册服务数、实例数、健康实例数。

    • 性能指标:接口响应时间、JVM 内存占用、CPU 使用率。

提示:若需自定义图表,可在 Dashboard 中点击「Add panel」,通过 PromQL 语句筛选指标,调整图表样式(折线图、柱状图、仪表盘等)。

五、告警配置:基于 AlertManager 实现异常通知

5.1 安装并配置 AlertManager

  1. 下载并解压 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

  2. 配置告警渠道(以钉钉为例):编辑/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 # 告警恢复后发送通知

抑制规则(可选,避免重复告警)

inhibit_rules:

  • source_match:
    severity: ‘critical’
    target_match:
    severity: ‘warning’
    equal: [‘alertname’, ‘dev’, ‘instance’]`
    说明:钉钉机器人需提前创建(群设置 → 智能群助手 → 添加机器人 → 自定义机器人),获取 access_token,并配置 IP 白名单(允许 AlertManager 服务器 IP 访问)。
  1. 启动 AlertManager:
    nohup /usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml > /var/log/alertmanager.log 2>&1&

5.2 配置 Nacos 告警规则

  1. 在 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 }} 表示异常节点)。

  1. 关联告警规则到 Prometheus:确保prometheus.ymlrule_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 验证告警功能

  1. 在 Prometheus 控制台点击「Alerts」,可查看所有告警规则及状态(Inactive 未触发、Pending 等待中、Firing 触发中)。

  2. 模拟告警场景(如停止一个 Nacos 节点),等待 30 秒后,告警状态会变为 Firing,AlertManager 会推送告警通知到钉钉。

  3. 恢复 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 实例,进一步提升监控体系的完整性与易用性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 6:06:34

5分钟部署Meta-Llama-3-8B-Instruct,vLLM+Open-WebUI打造最佳对话体验

5分钟部署Meta-Llama-3-8B-Instruct&#xff0c;vLLMOpen-WebUI打造最佳对话体验 1. 快速上手&#xff1a;为什么选择这个镜像&#xff1f; 你是不是也经常遇到这些问题&#xff1a;想本地跑个大模型&#xff0c;结果显存不够、部署复杂、界面难用&#xff1f;今天这篇文章就…

作者头像 李华
网站建设 2026/4/15 22:00:21

Qwen-Image-Layered升级技巧:提升小物体分层准确性

Qwen-Image-Layered升级技巧&#xff1a;提升小物体分层准确性 在图像编辑领域&#xff0c;精准的图层分离是实现高质量后期处理的关键。Qwen-Image-Layered 作为一款专注于图像分层分解与编辑的工具&#xff0c;能够将单张图像自动拆解为多个带透明通道&#xff08;RGBA&…

作者头像 李华
网站建设 2026/4/18 1:03:16

高性能人像卡通化推理|基于DCT-Net与CUDA 11.3的GPU优化方案

高性能人像卡通化推理&#xff5c;基于DCT-Net与CUDA 11.3的GPU优化方案 你是否曾幻想过&#xff0c;只需上传一张自拍&#xff0c;就能瞬间拥有专属的二次元形象&#xff1f;现在&#xff0c;这不再是动漫迷的专属幻想。借助 DCT-Net 人像卡通化模型GPU镜像&#xff0c;这一过…

作者头像 李华
网站建设 2026/4/16 21:25:36

别再被乱码困扰了!3分钟修复matplotlib中文显示问题

第一章&#xff1a;别再被乱码困扰了&#xff01;3分钟修复matplotlib中文显示问题 在使用matplotlib进行数据可视化时&#xff0c;许多用户都曾遇到过图表中的中文变成方框或乱码的问题。这通常是因为matplotlib默认使用的字体不支持中文字符。幸运的是&#xff0c;只需几个简…

作者头像 李华
网站建设 2026/4/9 17:11:37

开源ASR流水线搭建:FSMN-VAD作为前端模块教程

开源ASR流水线搭建&#xff1a;FSMN-VAD作为前端模块教程 1. FSMN-VAD 离线语音端点检测控制台 你是否在处理长段录音时&#xff0c;为手动切分有效语音片段而头疼&#xff1f;传统方式不仅耗时&#xff0c;还容易遗漏关键信息。现在&#xff0c;借助达摩院开源的 FSMN-VAD 模…

作者头像 李华
网站建设 2026/4/18 8:53:10

如何成功制备与筛选应用于双抗夹心ELISA的配对抗体?

一、为何双抗夹心ELISA必须使用配对抗体&#xff1f;双抗夹心酶联免疫吸附测定&#xff08;Sandwich ELISA&#xff09;是检测和定量复杂样本中特定抗原&#xff08;尤其是蛋白质&#xff09;最常用且最可靠的方法之一。其高特异性和灵敏度的核心在于使用一对能够同时、且非竞争…

作者头像 李华