Prometheus 监控 Nexus 全栈实战:从存储容量到组件健康的制品仓库可观测性
2026/8/30 15:36:08 网站建设 项目流程

Prometheus 监控 Nexus 全栈实战:从存储容量到组件健康的制品仓库可观测性


Nexus Repository Manager 是大多数企业不可或缺的制品仓库,托管着 Maven、Docker、npm、PyPI 等海量组件。一旦它的存储空间耗尽Blob 存储异常任务失败GC 停顿并发请求阻塞,整个 CI/CD 流水线和生产部署都可能瘫痪。Nexus 3.19 及以上版本原生内置了 Prometheus 指标端点,只需启用便可暴露 JVM、存储、仓库、任务等关键数据。本文将从启用端点、配置抓取,到解读指标、创建 Grafana 大屏与告警规则,让你像监控应用一样监控制品仓库的每一次呼吸。


1. 方案选型:内置端点 vs JMX Exporter

方案适用版本特点
Nexus 内置 Prometheus 端点(推荐)Nexus 3.19+官方支持,开箱即用;暴露存储、Blob 存储、仓库、任务、Jetty 线程池等指标;无需额外插件
JMX Exporter所有版本通用 Java Agent,需手工编写 MBean 规则,无法直接获取 Nexus 业务指标(如仓库计数、任务状态)
社区插件 (nexus-prometheus-plugin)3.19 之前已不推荐,因内置功能已覆盖

明确选择:如果使用 Nexus 3.19 及以上版本,直接启用内置 Prometheus 端点;若为更早版本,建议升级或临时使用 JMX Exporter 过渡。本文以Nexus 3.x 内置端点为主线。


2. 启用 Nexus 内置 Prometheus 端点

2.1 配置 Nexus 暴露指标

Nexus 的 Prometheus 端点默认处于关闭状态,需要通过配置nexus.properties或环境变量开启。

编辑/opt/nexus/etc/nexus-default.properties(或nexus.properties),添加以下行:

nexus.metrics.export.prometheus.enabled=true nexus.metrics.export.prometheus.port=9101 nexus.metrics.export.prometheus.path=/metrics

或者通过环境变量启动:

dockerrun-d\--namenexus\-p8081:8081\-p9101:9101\-eNEXUS_METRICS_EXPORT_PROMETHEUS_ENABLED=true\-eNEXUS_METRICS_EXPORT_PROMETHEUS_PORT=9101\sonatype/nexus3:latest

重启 Nexus 后,访问http://nexus-host:9101/metrics,应看到nexus_storage_used_bytesjvm_memory_used_bytes等指标。

2.2 安全与网络隔离

生产环境中,建议将 Prometheus 端点端口(如 9101)仅绑定至内网 IP,或通过防火墙限制访问来源。若需加密和认证,可在 Nexus 前部署 Nginx 反向代理。


3. 配置 Prometheus 抓取

scrape_configs:-job_name:'nexus'scrape_interval:30smetrics_path:'/metrics'static_configs:-targets:['nexus-host:9101']labels:env:'production'instance:'nexus-prod'

如果 Nexus 使用了 HTTPS 和自签名证书,需配置scheme: httpstls_config


4. 核心监控指标与 PromQL

Nexus 内置端点暴露的指标涵盖存储Blob 存储仓库任务Jetty (HTTP)JVM系统等类别。

4.1 存储与 Blob 存储
指标含义
nexus_storage_used_bytes各存储(Blob 存储)已用字节数
nexus_storage_total_bytes总容量
nexus_blobstore_used_bytes按 Blob 存储名称的已用字节

PromQL 示例:

  • 存储使用率nexus_storage_used_bytes / nexus_storage_total_bytes * 100
  • 某个 Blob 存储接近满nexus_blobstore_used_bytes / on(blobstore) nexus_storage_total_bytes > 0.85
4.2 仓库统计
指标含义
nexus_repository_count仓库数量(按类型type标签)
nexus_repository_component_count组件总数

虽然后者可能不直接暴露,但有nexus_repository_status等指标。具体指标名可能因版本而异,可通过/metrics确认。常见指标如nexus_http_requests_total等。

按格式分组示例nexus_repository_count{type="docker"}用于观察 Docker 仓库数量。

4.3 任务状态
指标含义
nexus_task_last_run_duration_seconds任务最后一次运行耗时
nexus_task_last_run_status状态(0=成功, 1=失败, 2=运行中, 3=取消 等)
nexus_task_last_run_timestamp_seconds最后运行时间戳

PromQL 示例:

  • 任务失败nexus_task_last_run_status == 1
  • 任务运行超时nexus_task_last_run_duration_seconds > 3600(超过 1 小时)
4.4 HTTP (Jetty) 指标
指标含义
jetty_threads_busy忙碌的 Jetty 线程数
jetty_threads_max最大线程数
jetty_threads_idle空闲线程数
http_server_requests_seconds_count/sum(若暴露)HTTP 请求计数与延迟

PromQL 示例:

  • 线程池饱和度jetty_threads_busy / jetty_threads_max
  • 活跃请求数jetty_threads_busy
4.5 JVM 与系统
指标含义
jvm_memory_used_bytes{area="heap"}/jvm_memory_max_bytes{area="heap"}堆内存使用/上限
jvm_gc_pause_seconds_count/sumGC 暂停次数与总时间
process_cpu_seconds_totalCPU 使用时间
process_open_fds打开的文件描述符数

PromQL 示例:

  • 堆使用率jvm_memory_used_bytes{area="heap"} / jvm_memory_max_bytes{area="heap"} * 100
  • GC 平均暂停rate(jvm_gc_pause_seconds_sum[5m]) / rate(jvm_gc_pause_seconds_count[5m])

5. Grafana 仪表盘推荐

  • Nexus Repository Manager Dashboard:Dashboard ID14642(社区适配),展示存储使用、Blob 存储、仓库统计、任务状态、JVM 堆、HTTP 线程池等。
  • Nexus OSS:ID11512(备选)。
  • 自定义制品仓库大屏:使用 Stat Panel 显示存储使用率,Table 展示失败任务,Time series 绘制 HTTP 请求延迟和 JVM 内存趋势。

导入后选择数据源,变量instance对应你的 Nexus 实例。


6. 告警规则实战

groups:-name:nexus_alertsrules:-alert:NexusDownexpr:up{job="nexus"}== 0for:1mlabels:severity:criticalannotations:summary:"Nexus 实例 {{ $labels.instance }} 不可达"-alert:NexusStorageSpaceLowexpr:(nexus_storage_used_bytes / nexus_storage_total_bytes) * 100>85for:10mlabels:severity:criticalannotations:summary:"Nexus 存储使用率超过 85%,当前 {{ $value }}%"-alert:NexusTaskFailedexpr:nexus_task_last_run_status == 1for:2mlabels:severity:criticalannotations:summary:"Nexus 任务 {{ $labels.task }} 执行失败"-alert:NexusHighHeapUsageexpr:(jvm_memory_used_bytes{area="heap"}/ jvm_memory_max_bytes{area="heap"}) * 100>85for:10mlabels:severity:warningannotations:summary:"Nexus 堆内存使用率超过 85%"-alert:NexusThreadPoolSaturationexpr:(jetty_threads_busy / jetty_threads_max)>0.8for:10mlabels:severity:warningannotations:summary:"Nexus HTTP 线程池使用率超过 80%"-alert:NexusBlobStoreFullexpr:(nexus_blobstore_used_bytes / on(blobstore) nexus_storage_total_bytes)>0.9for:10mlabels:severity:criticalannotations:summary:"Blob 存储 {{ $labels.blobstore }} 使用率超过 90%"

7. 进阶:多实例、安全与旧版本方案

7.1 监控多个 Nexus 实例

每个 Nexus 实例独立启用 Prometheus 端点,Prometheus 中配置多个 target 并用instance标签区分。Grafana 面板通过变量切换。

7.2 安全加固
  • 确保 Prometheus 端点端口(9101)仅被 Prometheus 服务器访问,使用防火墙或安全组。
  • 可在 Nexus 前部署 Nginx,对/metrics添加 Basic Auth,并在 Prometheus 中配置basic_auth
  • 定期轮换 Nexus 管理员密码,尽管指标端点无需认证。
7.3 旧版本 Nexus (3.19 之前)

如果无法升级,可选择部署JMX Exporter。下载jmx_prometheus_javaagent.jar,编写规则文件nexus_jmx.yml,然后在 Nexus 的 JVM 参数中添加:

-javaagent:/path/to/jmx_prometheus_javaagent.jar=9092:/path/to/nexus_jmx.yml

Prometheus 抓取nexus-host:9092/metrics。规则文件需手动定义感兴趣的 MBean,例如org.sonatype.nexus下的指标。这需要一定的手工调试。


8. 总结

借助 Nexus 3.19+ 的原生 Prometheus 端点,制品仓库的内部状态不再是一团迷雾。从存储容量到任务健康,从 Blob 存储到 HTTP 线程池,所有关键信号都实时进入 Prometheus,在 Grafana 中可视化,并通过 Alertmanager 及时告警。将 Nexus 纳入全栈可观测性体系,意味着你的 CI/CD 流水线和制品链路的最后一块拼图也被点亮,真正实现从代码提交到制品管理的全链路透明。部署它,让制品仓库也拥有属于自己的“健康手环”。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询