ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Prometheus NATS Exporter Helm Chart 完整指南:在 Kubernetes 中采集 NATS 监控指标

Prometheus NATS Exporter Helm Chart 完整指南:在 Kubernetes 中采集 NATS 监控指标 【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载导读本文基于当前仓库stable/prometheus-nats-exporterHelm Chart系统讲解如何在 Kubernetes 集群中通过 Helm 部署 prometheus-nats-exporter 监控服务的对接方式、ServiceMonitor 集成方法以及部署后的验证与故障排查手段。注意该 Chart 已标记为 DEPRECATEDdeprecated: true并已迁移至 prometheus-community 的 helm-charts 仓库。本文基于当前仓库内的v2.5.1appVersion0.6.2版本展开说明其配置思路与迁移后的 Chart 保持一致可放心作为参考。背景为什么需要 NATS ExporterNATS 是一个高性能的云原生消息系统其服务端内置了一个基于 HTTP 的监控接口默认监听8222端口对外暴露/varz、/connz、/routez、/subz、/serverz、/gatewayz、/channelz等 JSON 端点可直接在浏览器中查看集群状态。但这些端点输出的是 JSON 格式Prometheus 无法直接抓取。prometheus-nats-exporter的作用就是充当一个适配器它以-varz、-connz等命令行参数指定要拉取的端点定期从 NATS 监控接口抓取 JSON 数据再以 Prometheus 文本格式暴露在/metrics上。本 Chart 则负责把这个 exporter 以 Kubernetes Deployment Service 的形式部署好并可选地生成 ServiceMonitor 对象让 Prometheus Operator 自动发现并抓取指标。快速开始TL;DR在默认配置下一条命令即可完成部署$ helm install incubator/prometheus-nats-exporter当前仓库的 Chart 位于stable/prometheus-nats-exporter使用仓库内路径时请以stable/prometheus-nats-exporter指定。早期版本曾位于incubator/目录下README 中的incubator/前缀属于历史遗留写法。这条命令会在集群中创建一个名为prometheus-nats-exporter的 DeploymentreplicaCount: 1容器镜像为synadia/prometheus-nats-exporter:0.6.2并默认向http://nats-nats-monitoring.default.svc:8222这个 NATS 监控地址抓取全部 7 类指标。安装 Chart指定 release 名称安装$ helm install --name my-release stable/prometheus-nats-exporter该命令会以默认配置在集群中部署 NATS exporter。安装过程中可以通过下面 Configuration 一节列出的参数进行定制例如通过--set keyvalue或自定义values.yaml文件传入。安装前置条件一个可用的 Kubernetes 集群如 Minikube 或任意云厂商集群已安装并配置好 Helm 客户端集群中已部署 NATS 服务本仓库对应的 NATS Chart 位于 stable/nats且其监控服务可从 exporter 所在命名空间访问。卸载 Chart要卸载名为my-release的 release$ helm delete my-release该命令会移除与该 Chart 关联的所有 Kubernetes 组件Deployment、Service、ServiceMonitor 等并删除该 release。Configuration完整参数表以下是stable/prometheus-nats-exporter的全部可配置参数及其默认值与 values.yaml 一一对应ParameterDescriptionDefaultreplicaCount副本数1image.repository镜像仓库synadia/prometheus-nats-exporterimage.tag镜像标签Chart.yaml 中 appVersion0.6.2image.pullPolicy镜像拉取策略IfNotPresentservice.typeService 类型ClusterIPservice.portService 对外端口80service.targetPort容器内 exporter 监听端口即-port参数7777serviceMonitor.enabled是否生成 ServiceMonitor需 Prometheus OperatorfalseserviceMonitor.intervalPrometheus 抓取间隔空使用 Operator 默认值serviceMonitor.namespaceServiceMonitor 部署的命名空间空与 release 同命名空间serviceMonitor.additionalLabels追加到 ServiceMonitor 的标签{}serviceMonitor.scrapeTimeout抓取超时时间空使用 Operator 默认值resources容器资源 requests/limits{}config.nats.serviceNATS 监控 Service 名称nats-nats-monitoringconfig.nats.namespaceNATS 部署所在命名空间defaultconfig.nats.portNATS 监控服务端口8222config.metrics.varz是否抓取 varz 指标trueconfig.metrics.channelz是否抓取 channelz 指标trueconfig.metrics.connz是否抓取 connz 指标trueconfig.metrics.routez是否抓取 routez 指标trueconfig.metrics.serverz是否抓取 serverz 指标trueconfig.metrics.subz是否抓取 subz 指标trueconfig.metrics.gatewayz是否抓取 gatewayz 指标truenodeSelectorPod 调度的节点标签选择器{}tolerationsPod 污点容忍[]affinity节点/Pod 亲和性规则{}annotationsDeployment 注解{}extraContainers额外注入的 sidecar 容器模板字符串空字符串extraVolumes供 extraContainers 使用的额外卷空字符串关键参数详解config.nats.*对接 NATS 监控服务这三个参数决定了 exporter 的指标来源。对照 deployment.yaml 中生成的启动命令-prometheus-nats-exporter http://{{ .Values.config.nats.service }}.{{ .Values.config.nats.namespace }}.svc:{{ .Values.config.nats.port }}即最终访问地址为http://nats-nats-monitoring.default.svc:8222。默认值nats-nats-monitoring的由来本仓库的 stable/nats Chart 会生成名为release-monitoring的监控 Service当 NATS 以 release 名nats部署时即得到nats-nats-monitoring其端口默认8222见 stable/nats/values.yaml。如果你的 NATS release 名不同、或部署在别的命名空间就必须同步修改这三个值。config.metrics.*开关各指标端点7 个布尔开关逐一对应 exporter 的命令行参数。看 deployment.yaml 的渲染逻辑值为true时对应参数被追加进容器args参数生成的 CLI 参数采集的 NATS 监控端点config.metrics.varz-varz/varz服务器整体信息config.metrics.channelz-channelz/channelzJetStream 频道信息config.metrics.connz-connz/connz客户端连接config.metrics.routez-routez/routez路由config.metrics.serverz-serverz/serverz服务器信息config.metrics.subz-subz/subz订阅者config.metrics.gatewayz-gatewayz/gatewayz网关默认全部开启可以按需关闭以减少抓取开销与指标基数。service.*暴露方式service.targetPort: 7777同时被写入容器的-port启动参数deployment.yaml和容器的containerPort是 exporter 暴露/metrics的端口service.port: 80是集群内 Service 的端口targetPort: 7777指向容器Service 的 selector 使用app.kubernetes.io/name与app.kubernetes.io/instance标签service.yaml无需手动修改。serviceMonitor.*Prometheus Operator 集成仅在serviceMonitor.enabled: true且集群安装了monitoring.coreos.com/v1CRD 时模板 servicemonitor.yaml 才会渲染 ServiceMonitor 对象。其关键行为通过endpoints[0].port: http关联上文 Service 中名为http的端口service.yamlhonorLabels: true优先保留 exporter 自带的标签namespaceSelector.matchNames固定为 release 所在命名空间servicemonitor.yamlServiceMonitor 只会发现同命名空间下的 ServiceserviceMonitor.interval与serviceMonitor.scrapeTimeout为空时不写入由 Prometheus Operator 的默认抓取配置兜底serviceMonitor.namespace为空时ServiceMonitor 与 release 同命名空间serviceMonitor.additionalLabels用于追加如release: prometheus-operator之类的选择器标签servicemonitor.yaml。使用--set定制安装安装时通过--set逐个指定参数$ helm install --name my-release stable/prometheus-nats-exporter \ --set config.nats.servicenats-production-nats-monitoring \ --set config.metrics.subzfalse以上命令将 NATS 监控地址改为nats-production-nats-monitoring仍在default命名空间、8222端口并关闭subz指标采集。使用自定义 values 文件更推荐的做法是把配置写入 YAML 文件再传入$ helm install --name my-release stable/prometheus-nats-exporter -f values.yamlvalues.yaml示例对接其他命名空间中的 NATS、启用 ServiceMonitor、并设定资源限额replicaCount: 1 image: repository: synadia/prometheus-nats-exporter tag: 0.6.2 pullPolicy: IfNotPresent service: type: ClusterIP port: 80 targetPort: 7777 serviceMonitor: enabled: true namespace: monitoring interval: 30s scrapeTimeout: 10s additionalLabels: release: prometheus-operator config: nats: service: nats-nats-monitoring namespace: messaging port: 8222 metrics: varz: true channelz: true connz: true routez: true serverz: true subz: true gatewayz: true resources: limits: cpu: 100m memory: 128Mi requests: cpu: 100m memory: 128Mi nodeSelector: {} tolerations: [] affinity: {} annotations: {}注意当config.nats.namespace不是default时请确认 NATS 监控 Servicenats-release-monitoring确实存在且集群网络策略未阻断跨命名空间访问。源码视角Chart 是如何工作的1. 资源形态一览Chart 渲染后会生成三类资源均位于 templates 目录deployment.yamlDeployment内含主容器、探针与资源声明service.yamlClusterIP Service供 Prometheus 抓取servicemonitor.yaml可选的 ServiceMonitor受serviceMonitor.enabled与 CRD 能力双重控制。2. Deployment 的关键细节从 deployment.yaml 可以看到探针livenessProbe与readinessProbe均以HTTP GET /metrics为检查方式deployment.yaml探针端口http即service.targetPort。也就是说只要 exporter 的/metrics端点可访问Pod 就被视为健康。若 NATS 监控地址配置错误导致 exporter 内部抓取失败通常不会直接打挂 Pod探针只关心 HTTP 服务本身但指标内容会缺失需结合 exporter 日志排查。镜像拉取策略imagePullPolicy: IfNotPresent已在本地存在时不会重复拉取。调度能力nodeSelector、affinity、tolerations三个字段分别渲染到 Pod 的nodeSelector、affinity、tolerationsdeployment.yaml适用于把 exporter 调度到特定节点或容忍污点。扩展能力extraVolumes使用tpl渲染后挂在 Pod 的spec.volumes下deployment.yaml配合extraContainers见 values.yaml可注入边车容器。注意模板只挂载了卷卷挂载点需要由你在extraContainers中自行声明。3. 命名辅助模板_helpers.tpl 提供了三个标准辅助函数prometheus-nats-exporter.name取nameOverride或 Chart 名截断至 63 字符prometheus-nats-exporter.fullname组合 release 名与 Chart 名若 release 名已含 Chart 名则直接使用 release 名同样截断至 63 字符并去除尾部-这也是所有资源名的最终来源prometheus-nats-exporter.chart生成chart-version格式的helm.sh/chart标签。所有资源的标签统一使用app.kubernetes.io/name、app.kubernetes.io/instance、app.kubernetes.io/managed-by、helm.sh/chart四件套Service 的 selector 与 Deployment 的matchLabels完全一致从而保证流量正确路由。验证部署与访问指标安装完成后可按 Service 类型采用不同方式访问/metrics端点详见 NOTES.txtClusterIP默认——通过 port-forward 在本地访问$ export POD_NAME$(kubectl get pods --namespace default -l app.kubernetes.io/nameprometheus-nats-exporter,app.kubernetes.io/instancemy-release -o jsonpath{.items[0].metadata.name}) $ echo Visit http://127.0.0.1:7777/metrics to use your application $ kubectl port-forward $POD_NAME 7777:7777NodePort——直接使用节点地址与端口访问$ export NODE_PORT$(kubectl get --namespace default -o jsonpath{.spec.ports[0].nodePort} services my-release-prometheus-nats-exporter) $ export NODE_IP$(kubectl get nodes --namespace default -o jsonpath{.items[0].status.addresses[0].address}) $ echo http://$NODE_IP:$NODE_PORTLoadBalancer——等待云厂商分配外部 IP 后访问$ export SERVICE_IP$(kubectl get svc --namespace default my-release-prometheus-nats-exporter -o jsonpath{.status.loadBalancer.ingress[0].ip}) $ echo http://$SERVICE_IP:80LoadBalancer IP 分配可能需要几分钟可用kubectl get svc -w观察状态。浏览器或curl http://127.0.0.1:7777/metrics应能看到以nats_前缀为主的指标输出。同时可以核对 Deployment 是否就绪$ kubectl get deploy my-release-prometheus-nats-exporter $ kubectl logs -l app.kubernetes.io/nameprometheus-nats-exporter若指标为空或抓取报错优先检查 exporter 日志中针对http://nats-nats-monitoring.default.svc:8222的请求是否成功确认 NATS 监控 Service 名称、命名空间与端口配置正确。与 Prometheus / Prometheus Operator 集成方式一手动配置 Prometheus 抓取若未使用 Prometheus Operator可在自己的prometheus.yml中通过 Service 发现或静态配置添加抓取目标scrape_configs: - job_name: prometheus-nats-exporter kubernetes_sd_configs: - role: endpoints relabel_configs: - source_labels: [__meta_kubernetes_service_name] regex: my-release-prometheus-nats-exporter action: keep抓取地址为http://service:80/metrics。方式二启用 ServiceMonitor推荐需 Prometheus Operator$ helm install --name my-release stable/prometheus-nats-exporter \ --set serviceMonitor.enabledtruePrometheus Operator 会依据 ServiceMonitor 自动发现并抓取指标。要点回顾模板通过.Capabilities.APIVersions.Has monitoring.coreos.com/v1检测集群是否具备该 CRD不具备时即使enabled: true也不会渲染servicemonitor.yaml若你的 Prometheus 实例通过serviceMonitorSelector选择了特定标签务必通过serviceMonitor.additionalLabels补齐建议显式设置serviceMonitor.interval如30s与serviceMonitor.scrapeTimeout避免依赖 Operator 默认值。常见问题排查现象可能原因解决建议Pod 启动后 CrashLoopBackOffNATS 监控地址不可达名称/命名空间/端口错误核对config.nats.*三项参数用kubectl run --rm -it --imagebusybox sh或wget http://nats-nats-monitoring.default.svc:8222/varz测试连通性/metrics有输出但缺某类指标对应config.metrics.*被关闭或 NATS 端未开启相应端点检查 Deployment 的args确认-varz等参数是否在列Prometheus 抓取 404Prometheus 配置的端口/路径与 Service 不符使用service.port: 80与/metrics路径ServiceMonitor 已启用但 Prometheus 不抓取ServiceMonitor 标签未被serviceMonitorSelector选中或命名空间未纳入选择通过serviceMonitor.additionalLabels增加release等标签确认 namespace 在 Operator 的namespaceSelector内小结本 Chart 以极少的配置项完成了部署 exporter → 对接 NATS 监控端点 → 暴露 Prometheus 指标 →可选接入 Prometheus Operator的完整链路。核心配置集中在两处config.nats.*决定从哪抓config.metrics.*决定抓哪些。结合本文提供的参数表、模板源码解读与排错清单你可以快速把 NATS 集群的运行时指标纳入 Prometheus 监控体系。若要在新环境使用请关注 prometheus-community 维护的新版 Chart 以获得持续更新与支持。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐终极指南如何使用werf实现Kubernetes应用的自动化测试全流程终极指南如何使用werf实现Kubernetes应用的自动化测试全流程 werf是一个强大的解决方案旨在为Kubernetes实现高效且一致的软件交付流程人工智能AI 应用语音移动开发后端桌面应用智能硬件MCP 服务Open Interpreter CLI 安装、自动更新、卸载与源码构建实战指南Open Interpreter CLI 安装、自动更新、卸载与源码构建实战指南 Open Interpreter 是面向 Kimi K3、GLM 5.3 等开人工智能大模型AI Agent代码智能体AI 应用CLI如何快速上手GHelper华硕本性能模式与风扇曲线完整配置指南如何快速上手GHelper华硕本性能模式与风扇曲线完整配置指南 奥创控制中心装完常常占着后台内存配置却不一定顺手。GHelper 是一个轻量替代方案单个桌面应用系统编程上一篇Beyond Compare 5终极免费解锁指南三步法快速生成永久密钥下一篇终极QMC音频解密器一键释放QQ音乐加密文件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表