查看原文
其他

Prometheus+Grafana 监控 Nexus 私服

KL博主 DevOps技术栈 2024-02-25

原文链接:https://my.oschina.net/klblog/blog/5540728

Nexus 是开源的 Maven 私服仓库,同时 Nexus 还支持 Npm、.Net、Golang、Python 等开发语言的包管理。Nexus 也是我们重度使用的一个应用,Nexus 保存着 Tap 各开发组的代码构建产物。Nexus 出现问题会导致项目 CI、CD 流程阻断。本文旨在通过 Prometheus + Grafana 实现 Nexus 运行时监控观测,帮助运维人员更加了解 Nexus ,轻松从容应对线上各种疑难杂症。

Nexus Version:3.29.2-02


 1 
metrics 采集


Nexus 提供了 Prometheus 格式数据的接口,这个接口需要授权 nx-metrics-all 才能访问,所以,将 metrics 采集到 Prometheus 里,需要做如下。

metrics 接口:http://localhost:8081/service/metrics/prometheus

创建 metrics 接口权限账户

给指标接口创建一个单独的 metrics 账户,然后创建一个新的 Role(nx-metrics) , 将 nx-metrics-all 给这个角色,然后将角色给 metrics 账户。如下图。


配置 Prometheus 

metrics 账户准备好后,在 Prometheus 侧添加如下配置项:

global:
  scrape_interval: 15s
  scrape_timeout: 10s
  evaluation_interval: 15s
alerting:
  alertmanagers:
  - static_configs:
    - targets: []
    scheme: http
    timeout: 10s
scrape_configs:
- job_name: nxrm
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /service/metrics/prometheus
  scheme: http
  basic_auth:
    username: metrics
    password: metrics
  static_configs:
  - targets:
    - localhost:8081

配置无误后,metrics 已经收集到 Prometheus 了。可以在 Prometheus 里查询  org_sonatype_nexus_ 打头的指标,有就代表配置成功了。


 2 
Grafana 绘制面板


Nexus metrics 总共有超过 2k 多行。在绘制观测面板前,需要先分析下采集的 metrics 信息

分析 metrics 

Nexus 暴露出来的指标,主要分三个类别:

  • Component:相关组件的运行时指标,比如文件存储组件 FileBlobStore,以 org_sonatype_nexus_ 前缀开头的系列指标。

  • Jetty:Web 容器,负责接收响应请求的,以 org_eclipse_jetty_ 前缀开头的系列指标。

  • JVM:JVM Runtime,反应堆内存、非堆内存、GC 回收等,以 jvm_ 前缀开头的系列指标。

其中,Component 指标是最多的,也有部分 Component 根本就没有使用,指标一直为 0,这部分指标就可以不用绘制面板。

绘制观测面板

经过上面分析,可以绘制出如下观测面板。

Nexus Component:


这个面板绘制了常用的组件运行信息,以 LdapServerComponent 为例,我们启用了这个组件,对接了公司内部的 LDAP。之前有用户反馈登录失败,最后排查到是 Nexus 访问 LDAP Server 出现了问题,如果有了这个观测图,就能很清楚的看到 LdapServerComponent 内部的运行情况,快速定位问题。

另外,Component Exceptions 面板也能集中观测到所有组件的异常信息,这里只要指标大于 0 ,就代表 Nexus 服务出问题了。

Jetty WebAppContext:


Jetty 面板反应了 Nexus 的流量情况,请求响应等信息。其中 Jetty 线程池,可以关注 wait-jobs(等待线程池执行的任务数)这个指标,如果这个指标一直大于 0,则表示 Nexus Server 出现性能问题了。

JVM Runtime:


JVM 的指标不用多说,和一般应用的 JVM 一样。它反应了应用的内存情况,包括堆内存和非堆内存,以及堆外内存,还有 GC 执行情况等。以内存观测为例,我们的 Nexus 服务是从 ECS 迁移的 Kubernetes 环境中的,当时给 Pod 的内存资源设置了 request 、limit 4G,给 JVM Xmx 设置了 2G,运行后还会出现内存告警,实际使用内存远超 Xmx 设置的大小。从贴出截图已经可以看出答案,是因为 Nexus 使用了超过 2G 的堆外内存(Direct Buffers + Mapped Buffers)。


 3 
结语


添加 Nexus 观测指标,一是可以清晰的了解这个软件的运行时情况,更加精准的给运行资源。二是方便出现类似问题时,可以快速排查问题。三是可以根据指标信息制定告警规则,比用户先一步发现问题。上面展示的 Grafana 面板已经分享到 Grafana Dashboards 市场了,可以通过如下链接找到 ID 直接导入到 Grafana 中,欢迎下载。

Nexus Dashboards:https://grafana.com/grafana/dashboards/16459

- END -


 推荐阅读 
















用 Go+Vue 快速开发一套K8s管理平台 万字长文,带你搞懂 Kubernetes 网络模型
K8s 选 cgroupfs 还是 systemd?这是一个问题在 Kubernetes 容器集群,微服务项目最佳实践
2022 年要考虑的 7 种 Docker 替代方案Linux 运维工程师的 6 类好习惯和 23 个教训顶级 DevOps 工具链大盘点
某外企从 0 建设 SRE 运维体系经验分享
Nginx+Redis:高性能缓存利器
主流监控系统 Prometheus 学习指南
基于 eBPF 的 Kubernetes 问题排查全景图发布
一文掌握 Ansible 自动化运维Linux的10个最危险命令24 个 Docker 常见问题处理技巧这篇文章带你全面掌握 Nginx !搭建一套完整的企业级 K8s 集群(kubeadm方式)


点亮,服务器三年不宕机
继续滑动看下一个

Prometheus+Grafana 监控 Nexus 私服

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存