Laf 项目中的 Prometheus MongoDB Exporter Helm Chart 部署与配置指南

Laf 项目中的 Prometheus MongoDB Exporter Helm Chart 部署与配置指南 Laf 项目中的 Prometheus MongoDB Exporter Helm Chart 部署与配置指南【免费下载链接】lafLaf is a vibrant cloud development platform that provides essential tools like cloud functions, databases, and storage solutions. It enables developers to quickly unleash their creativity and bring innovative ideas to life with ease.项目地址: https://gitcode.com/GitHub_Trending/la/laf导读本指南围绕 Laf 仓库build/charts/prometheus-mongodb-exporter/目录下的 Helm Chart 展开讲解如何在 Kubernetes 集群中为 MongoDB 部署 Prometheus 指标导出器exporter完成连接串配置、ServiceMonitor 对接、探针与安全上下文调优等关键步骤。读完本文你将掌握该 Chart 的完整参数体系、底层模板实现原理以及它在 Laf 监控体系中与 kube-prometheus-stack 配合的落地方式。一、Chart 概述为 MongoDB 收集 Prometheus 指标prometheus-mongodb-exporter 是一个基于 Percona mongodb_exporter 的 Helm Chart。它把 MongoDB 实例暴露为 Prometheus 指标端点采集并导出以下四类核心指标oplogoplog 容量、使用率与时间窗口等复制相关指标replica set副本集成员状态、主从选举信息server status连接数、内存、网络、操作计数等实时运行状态sharding / storage engine分片集群元数据与存储引擎如 WiredTiger的指标。从当前仓库的 Chart.yaml 可以看出本 Chart 版本为3.2.0API 版本为 Helm v2apiVersion: v2意味着需要 Helm 3对应上游 exporter 镜像的应用版本为0.39.0。在 Laf 中的定位Laf 的集群部署脚本位于 build 目录。其中 prometheus-helm.yaml 通过 kube-prometheus-stack 部署了 Prometheus关闭了 Alertmanager、Grafana 及大部分系统 exporter 组件仅保留核心 Prometheus 服务并配置了 PV 与网络策略而本 Chart 正是为该 Prometheus 实例补充 MongoDB 指标来源的配套组件。换言之它是 Laf 监控体系里连接「数据库」与「监控面板」的桥梁。二、安装、卸载与升级1. 添加 Helm 仓库helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update2. 安装 Charthelm install [RELEASE_NAME] prometheus-community/prometheus-mongodb-exporter建议在安装前先通过helm show values查看完整可配置项helm show values prometheus-community/prometheus-mongodb-exporter也可以直接阅读仓库内的 values.yaml其中带有详细的注释说明。3. 卸载 Charthelm uninstall [RELEASE_NAME]该命令会移除 Chart 创建的所有 Kubernetes 资源并删除该 release。4. 升级 Charthelm upgrade [RELEASE_NAME] [CHART] --install5. 大版本升级注意事项2.x → 3.x本仓库 Chart 已是 3.x 版本若从 2.x 升级需要注意以下破坏性变更镜像回归上游3.x 重新使用官方维护、构建频繁的percona/mongodb_exporter镜像见 values.yaml安全性更有保障命令行参数变更如果自定义过extraArgs需要按新版本 exporter 的参数格式调整由于新版镜像的指标可能略有差异原有 Dashboard 查询语句可能需要适配可尝试在extraArgs中加入--compatible-mode保持兼容URI 默认值mongodb.uri增加了默认值mongodb://mongodb:27017见 values.yamlHelm 版本要求Chart API 提升到 v2不再支持 Helm 2ServiceMonitor 默认关闭因为集群中未必安装了 Prometheus OperatorserviceMonitor.enabled默认置为false。三、核心配置项全解析本 Chart 的完整参数以 values.yaml 为权威来源下表整理了核心配置项及其作用配置项默认值说明image.repositorypercona/mongodb_exporterexporter 镜像仓库image.tag空默认 Chart AppVersion0.39.0镜像标签image.pullPolicyIfNotPresent镜像拉取策略mongodb.urimongodb://mongodb:27017MongoDB 连接串格式为[mongodb[srv]://][user:pass]host1[:port1][,host2[:port2],...][/database][?options]existingSecret.name空外部 Secret 名称与 exporter 同命名空间设置后mongodb.uri将被忽略existingSecret.keymongodb-uri外部 Secret 中存放连接串的键名port9216exporter 暴露的指标端口对应容器端口metricsextraArgs[--collect-all]传给 exporter 的额外命令行参数如--compatible-mode、--mongodb.collstats-collscan等env{}注入到 exporter Pod 的额外环境变量replicas1Deployment 副本数service.typeClusterIPService 类型service.port/service.portName9216/metricsService 端口与端口名serviceMonitor.enabledfalse是否创建 ServiceMonitorserviceMonitor.interval30sPrometheus 抓取间隔serviceMonitor.scrapeTimeout10s抓取超时livenessProbehttpGet / :metrics延迟 10s存活探针readinessProbehttpGet / :metrics延迟 10s就绪探针securityContext非 root10000、只读根文件系统、丢弃全部 capabilityPod 安全上下文resources{}资源请求与限制podAnnotations/podLabels{}Pod 注解与标签serviceAccount.createtrue是否自动创建 ServiceAccountaffinity/nodeSelector/tolerations/priorityClassName空调度相关配置volumes/volumeMounts[]附加卷与挂载点annotations/customLabels{}资源注解与额外标签从模板看参数的实际作用连接串注入在 deployment.yaml 中exporter 容器通过环境变量MONGODB_URI读取 Secret 中的连接串secret.yaml 则会把mongodb.uri值进行 base64 编码写入自建 Secret键名固定为mongodb-uri并使用required强制要求连接串非空配置变更自动滚动Deployment 的 Pod 注解上带有checksum/config见 deployment.yaml当 Secret 内容变化时 Deployment 会自动滚动更新保证连接串改动即时生效监听地址exporter 的启动参数固定为--web.listen-address:port见 deployment.yaml端口与values.port保持一致Secret 命名决策_helpers.tpl 中的secretName模板决定设置了existingSecret.name时使用外部 Secret否则使用 Chart 自动生成的 Secret 名。四、MongoDB 服务器连接配置使用该 Chart 前必须保证mongodb.uri指向一个合法的 MongoDB URI或者提供一个位于 release 命名空间的现成 Secret。两种方式选其一方式一直接在 values 中写连接串mongodb: uri: mongodb://user:passwordmongodb:27017如果 MongoDB 服务端开启了认证需要把用户名和密码一并写入连接串。Exporter 支持连接副本集成员、分片或单机实例。方式二引用已有 SecretexistingSecret: name: my-mongodb-secret # 与 exporter 同命名空间下的 Secret key: mongodb-uri # 默认为 mongodb-uri当设置了existingSecret.name后mongodb.uri的值会被忽略见 secret.yaml 的条件判断连接串从外部 Secret 中读取适合连接串含敏感信息、需要独立权限管理的场景。附加环境变量若需要在 Pod 中注入额外环境变量例如覆盖 URI、设置日志级别可通过env注入。仓库 CI 测试用例 env-values.yaml 演示了这种方式mongodb: uri: mongodb://localhost:9216 serviceMonitor: enabled: false env: TEST_ENV: test MONGODB_URI: mongodb://hostfromenv:9216这些变量会以名称/值形式追加到容器环境变量列表见 deployment.yaml。五、指标抓取ServiceMonitor 与 Prometheus 注解1. 通过 ServiceMonitor 对接 Prometheus OperatorChart 自带 ServiceMonitor 资源模板见 servicemonitor.yaml用于与 Prometheus Operator 协作实现自动抓取serviceMonitor: enabled: true interval: 30s scrapeTimeout: 10s namespace: # 为空则与 release 同命名空间 additionalLabels: {} targetLabels: [] metricRelabelings: [] scheme: tlsConfig: {}关键点默认关闭serviceMonitor.enabled默认是false因为集群中不一定装有 Prometheus Operator选择器标签要让 Prometheus Operator 识别该 ServiceMonitor必须通过serviceMonitor.additionalLabels添加与 Prometheus CRD 中spec.serviceMonitorSelector匹配的标签见 servicemonitor.yaml端点抓取endpoints引用 Service 的端口名metrics并透传interval、scrapeTimeout、metricRelabelings、scheme、tlsConfig等参数见 servicemonitor.yaml命名空间选择namespaceSelector.matchNames固定为 release 所在命名空间见 servicemonitor.yaml。从模板结构看prometheus.coreos.com/v1这一 CRD 的存在是启用该功能的硬前提可推断出未安装 Prometheus Operator 时开启此项会导致模板渲染出的资源无法创建。2. 不使用 Operator改用 Pod 注解如果集群没有 Prometheus Operator可以直接在podAnnotations中声明抓取信息让带注解发现能力的 Prometheus 抓取podAnnotations: prometheus.io/scrape: true prometheus.io/port: metrics这正是 values.yaml 中注释示例给出的做法注解会合并进 Deployment 的 Pod 模板见 deployment.yaml。3. 验证抓取端点安装完成后根据 Service 类型选择验证方式Chart 安装完成提示 NOTES.txt 给出了完整命令ClusterIP默认kubectl port-forward service/RELEASE_NAME-prometheus-mongodb-exporter 9216 curl http://127.0.0.1:9216/metricsNodePort取节点 IP 与 NodePort直接curl http://$NODE_IP:$NODE_PORT/metricsLoadBalancer等待 LoadBalancer IP 就绪后curl http://$SERVICE_IP:9216/metrics。返回的文本包含mongodb_前缀的大量指标即表示 exporter 工作正常。六、探针、安全与调度配置存活/就绪探针默认探针均以 HTTP GET 方式请求根路径/的metrics端口initialDelaySeconds为 10 秒见 values.yaml 与 deployment.yaml。可根据 MongoDB 规模调整initialDelaySeconds、periodSeconds、timeoutSeconds等字段。安全上下文默认 securityContext 遵循容器安全最佳实践runAsNonRoot: true且runAsUser/runAsGroup: 10000禁止 root 运行readOnlyRootFilesystem: true根文件系统只读capabilities.drop: [all]且allowPrivilegeEscalation: false丢弃全部 Linux capabilities 并禁止提权。如果 exporter 需要写入文件如启用--mongodb.trace等特性需通过volumeMounts挂载可写卷模板已预留volumes/volumeMounts透传能力。资源与调度通过resources设置 CPU/内存请求与限制模板中已有注释示例通过affinity、nodeSelector、tolerations、priorityClassName控制调度位置通过imagePullSecrets配置私有镜像仓库凭证——这些字段都会原样渲染进 Deployment见 deployment.yaml。七、CI 验证与常见问题仓库的 ci 目录提供了 Helm 模板渲染的测试用例env-values.yaml验证自定义 URI env环境变量注入的组合servicemonitor-disabled-values.yaml验证serviceMonitor.enabled: false时不生成 ServiceMonitor 资源模板外层{{ if }}包裹即可保证。常见排错清单Pod 一直 CrashLoopBackOff检查MONGODB_URI是否可达——用kubectl exec进入 Pod 执行mongosh $MONGODB_URI --eval db.runCommand({ping:1})验证注意默认 URI 指向mongodb://mongodb:27017这类集群内服务名确认 MongoDB Service 存在抓不到指标确认 Service 端口名默认metrics与抓取配置一致若用 ServiceMonitor确认additionalLabels与 Prometheus 的serviceMonitorSelector匹配指标与旧版不一致3.x 使用新版本 exporter 镜像可尝试在extraArgs中加入--compatible-modeSecret 变更不生效由于 Deployment 带有checksum/config注解Secret 变更应自动触发滚动更新若未生效可执行helm upgrade强制刷新。八、小结Prometheus MongoDB Exporter Chart 以极少的配置即可为任意 MongoDB单机、副本集、分片集群建立指标采集链路连接串经 Secret 安全注入指标通过:9216/metrics暴露再经由 ServiceMonitor 或 Pod 注解接入 Prometheus。在 Laf 项目中它与 prometheus-helm.yaml 部署的 Prometheus 实例共同构成可观测性底座为数据库健康度监控提供了数据来源。完整的可配置项以仓库内 values.yaml 为准模板实现细节可继续阅读 deployment.yaml 与 servicemonitor.yaml 深入理解。【免费下载链接】lafLaf is a vibrant cloud development platform that provides essential tools like cloud functions, databases, and storage solutions. It enables developers to quickly unleash their creativity and bring innovative ideas to life with ease.项目地址: https://gitcode.com/GitHub_Trending/la/laf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考