MongoDB Exporter数据库指标全掌握,跨网监控不折腾!cpolar内网穿透实验室第888个成功挑战 软件名称MongoDB Exporter核心、cpolar内网穿透配套操作系统支持MongoDB Exporter 支持 LinuxCentOS、Ubuntu 等、Windows、macOScpolar 支持 LinuxCentOS7/8、Ubuntu 等、Windows、macOS、Docker 等主流系统本次实操以 CentOS7 为例。软件介绍MongoDB Exporter 是专门给 MongoDB 数据库做 “体检” 的工具能把数据库的连接数、操作延迟、复制状态、内存使用这些藏在 “黑盒” 里的指标转换成 Prometheus 能看懂的格式相当于给 MongoDB 装了个 “体检仪”cpolar 是轻量级内网穿透工具不用折腾公网 IP、端口映射能把内网里 MongoDB Exporter 的监控端口安全映射到公网让异地的监控平台也能轻松抓取数据。MongoDB Exporter 的出色功能MongoDB Exporter 最核心的能力是 “精准采集 标准化输出”它能定期从 MongoDB 单机、副本集或分片集群里抓取 db.serverStatus ()、db.replSetGetStatus () 等管理命令的核心数据转换成 Prometheus 标准的 metrics 格式通过 9216 端口暴露出来还支持用户名密码、x.509 证书等安全认证方式不用担心数据库连接的安全问题同时能兼容不同版本的 MongoDB采集的指标覆盖连接、存储、复制、锁等待等全维度不用自己写脚本去扒数据。实用场景场景 1中小公司跨地域 MongoDB 监控痛点公司总部在上海研发和运维团队在北京MongoDB 数据库部署在上海机房内网北京团队想监控数据库状态要么搭复杂的 VPN要么每次远程登上海服务器操作繁琐还容易误操作而且没法实时告警。爽点在上海机房部署 MongoDB Exporter用 cpolar 把 9216 端口映射成公网地址北京的 Prometheus 服务器直接通过这个公网地址抓取指标Grafana 可视化面板实时展示数据告警规则配置好后北京团队能第一时间收到上海数据库的异常提醒不用再频繁跨地域沟通监控效率提升 80%。场景 2居家办公排查数据库问题痛点运维工程师小李周末居家办公公司测试环境的 MongoDB 部署在办公室内网测试反馈数据库查询慢小李没法远程登办公室服务器只能等周一到公司排查导致测试进度延误。爽点提前在办公室服务器部署了 MongoDB Exporter并用 cpolar 配置了固定的公网二级子域名小李居家通过这个公网地址查看 Exporter 暴露的数据库查询延迟、缓存命中率等指标快速定位到是索引缺失导致的慢查询远程指导测试同学创建索引问题当天就解决没耽误测试进度。cpolar 内网穿透技术带来的便利无需公网 IP省去网络配置麻烦传统要让外网访问内网的 MongoDB Exporter得找运维申请公网 IP、配置防火墙端口转发流程少则半天多则几天cpolar 不用这些操作一条命令就能安装几分钟就能把 9216 端口映射到公网不用懂复杂的网络知识也能搞定。公网地址可固定避免频繁修改配置cpolar 支持保留二级子域名生成固定的公网地址不用每次重启 Exporter 或服务器后都去修改 Prometheus 的抓取配置像我们实操中配置的固定子域名不管内网 IP 怎么变外网都能通过这个固定地址访问稳定性拉满。安全且轻量化不占用服务器资源cpolar 的穿透流量经过加密不用担心 MongoDB 监控数据在传输过程中泄露而且 cpolar 是轻量级服务安装包只有几 M运行时占用的 CPU 和内存几乎可以忽略不会给本就承载 MongoDB 的服务器增加额外负担。跨平台兼容适配不同部署环境不管 MongoDB Exporter 部署在 CentOS 服务器、Windows 工作站还是 macOS 开发机上cpolar 都能适配不用为不同系统单独配置穿透规则居家办公用 Windows、公司服务器用 Linux一套 cpolar 配置就能通用。无需修改数据库原有配置不用为了外网监控去修改 MongoDB 的绑定 IP、防火墙规则只需要给 MongoDB Exporter 配置好连接信息再用 cpolar 穿透 Exporter 的端口即可完全不影响数据库的原有运行状态避免因修改数据库配置引发新的问题。总结MongoDB Exporter 是 MongoDB 数据库监控的 “刚需工具”能把数据库的核心指标从 “不可见” 变成 “可视化”帮运维和开发快速发现性能瓶颈、异常状态而 cpolar 则是打破网络边界的 “神器”解决了内网 MongoDB Exporter 无法被外网监控平台抓取的痛点两者组合起来不管是跨地域监控、居家办公排查问题还是小团队低成本搭建监控体系都能做到简单、高效、稳定。对于依赖 MongoDB 的企业来说不用投入大量成本搭建复杂的网络架构就能实现专业级的数据库可观测性从 “被动救火” 变成 “主动预防”这也是为什么越来越多中小公司和运维工程师选择这个组合的原因。想省心又省事的朋友们赶紧按照下面的教程去安装吧本文将深入介绍MongoDB Exporter的部署方法、核心指标解读以及与Prometheus Alertmanager的集成实践帮助运维工程师构建一套高效、可靠的MongoDB监控告警体系让数据库运维从“被动救火”走向“主动预防”。1.什么是MongoDB ExporterMongoDB Exporter是一个开源的监控数据采集工具专门用于从MongoDB数据库实例中提取运行时指标并以Prometheus可识别的格式暴露这些指标从而实现对MongoDB的可观测性与性能监控。核心作用MongoDB Exporter的主要功能包括采集MongoDB内部指标如连接数、操作计数insert/update/delete、查询延迟、复制集状态、WiredTiger 存储引擎统计、内存使用、缓存命中率等。暴露标准HTTP接口通过 /metrics端点以文本格式输出Prometheus指标便于Prometheus Server抓取。支持多种部署模式可监控单机、副本集Replica Set或分片集群Sharded Cluster架构的MongoDB实例。集成认证与TLS支持通过用户名/密码、SCRAM认证、x.509证书等方式安全连接MongoDB。工作原理简述MongoDB Exporter作为一个独立进程运行通常以容器或服务形式部署。它定期连接到目标MongoDB实例执行db.serverStatus()、db.replSetGetStatus() 等管理命令获取内部状态。将原始数据转换为Prometheus格式的指标如mongodb_connections{state“current”}。启动一个HTTP服务默认端口如 9216供Prometheus主动拉取pull数据。Prometheus存储这些时间序列数据后可通过Grafana进行可视化或通过Alertmanager配置告警规则常用开源实现目前最主流的MongoDB Exporter是由percona维护的版本原为dcu/mongodb_exporter的社区分支它功能完善、活跃更新并广泛用于生产环境。GitHub地址 https://github.com/percona/mongodb_exporter为什么运维需要它可视化数据库健康状态告别“黑盒”实时掌握负载与瓶颈。精准告警基于真实指标如复制延迟 30s、连接数突增触发告警避免误报漏报。容量规划依据长期指标趋势帮助预测资源需求。故障快速定位结合历史数据快速判断是应用层问题还是数据库层问题。简言之MongoDB Exporter是连接MongoDB与现代监控体系Prometheus Grafana的关键桥梁是构建可观测性基础设施不可或缺的一环。对于任何依赖MongoDB的生产系统部署Exporter几乎已成为运维标配。2.Centos7安装MongoDB_Exporter实时监控MongoDB数据本地下载后上传到linux服务器下载地址https://github.com/percona/mongodb_exporter/releases/download/v0.43.1/或者直接在linux服务器上wget方式下载# 进入目标目录cd/app/wgethttps://github.com/percona/mongodb_exporter/releases/download/v0.43.1/mongodb_exporter-0.43.1.linux-amd64.tar.gz解压tar-vxzfmongodb_exporter-0.43.1.linux-amd64.tar.gzmvmongodb_exporter-0.43.1.linux-amd64 mongodb_exporter启动Exporter服务:/app/mongodb_exporter/mongodb_exporter\--mongodb.urimongodb://mongodb_exporter:shanjixin520192.168.42.140:27017/admin\--web.listen-address:9216\--compatible-mode配置Systemd服务vim/usr/lib/systemd/system/mongodb_exporter.service[Unit]DescriptionMongoDB ExporterAfternetwork.target[Service]UserrootGrouprootTypesimpleExecStart/app/mongodb_exporter/mongodb_exporter\--mongodb.urimongodb://mongodb_exporter:shanjixin520192.168.42.140:27017/admin\--web.listen-address:9216\--compatible-modeRestartalwaysRestartSec3[Install]WantedBymulti-user.target服务管理命令# 重载systemd配置systemctl daemon-reload# 设置开机自启systemctlenablemongodb_exporter# 服务控制systemctl stop mongodb_exporter systemctl restart mongodb_exporter systemctl status mongodb_exporter3.设置MongoDB监控专属用户以管理员身份登录MongoDBmongo-uadmin-p--authenticationDatabaseadmin切换至admin数据库:use admin创建监控用户db.createUser({user:mongodb_expo, pwd:shanjixin520, roles:[{role:clusterMonitor, db:admin},{role:read, db:local}]});验证用户创建db.getUser(mongodb_exporter)4.配置prometheus监控MongoDB_exporter找到prometheus的配置文件编辑添加如下内容viprometheus.yml- targets:[localhost:9216]labels: app:mongodb_exporter重启prometheus服务:systemctl restart prometheus使用浏览器Ip9090打开promethues的页面我们可以看到成功的检测到了mongodb_exporter服务啦5.配置MongoDB告警进入到prometheus配置目录下cd/app/prometheus创建一个规则文件例如mongodb_alerts.ymlvimongodb_alerts.ymlgroups: - name: mongodb-alerts rules:# 1. MongoDB 实例不可达Exporter 挂了或 MongoDB 连不上- alert: MongoDBDown expr: up{jobmongodb}0for: 1m labels: severity: critical annotations: summary:MongoDB instance downdescription:MongoDB Exporter ({{$labels.instance }}) has been down for more than 1 minute.# 2. 主节点变更副本集主节点切换可能表示异常故障转移- alert: MongoDBPrimaryChanged expr: changes(mongodb_replset_member_state{name~.*PRIMARY.*}[5m])0for: 1m labels: severity: warning annotations: summary:MongoDB primary node changeddescription:MongoDB replica set primary has changed in the last 5 minutes on {{$labels.instance }}.# 3. 复制延迟过高仅适用于副本集- alert: MongoDBReplicationLagHigh expr: mongodb_replset_member_optime_date{statePRIMARY}- ignoring(state,name)mongodb_replset_member_optime_date{stateSECONDARY}30for: 2m labels: severity: warning annotations: summary:MongoDB replication lag too highdescription:Replication lag on {{$labels.instance }} is over 30 seconds.# 4. 连接数过高接近最大连接限制默认通常是 20000- alert: MongoDBTooManyConnections expr: mongodb_connections{statecurrent}15000for: 5m labels: severity: warning annotations: summary:High MongoDB connectionsdescription:{{$value}} current connections on {{$labels.instance }}, approaching limit.# 5. 查询延迟高可选需 exporter 支持 detailed metrics- alert: MongoDBSlowOperations expr: rate(mongodb_op_counters{typequery}[5m])0and rate(mongodb_mongod_global_lock_current_queue_total[5m])10for: 3m labels: severity: warning annotations: summary:MongoDB slow operations detecteddescription:High query queue or slow ops on {{$labels.instance }}.# 6. 内存使用过高WiredTiger 缓存接近上限- alert: MongoDBHighCacheUsage expr: mongodb_wt_cache_bytes_in_use / mongodb_wt_cache_max_bytes0.9for: 5m labels: severity: warning annotations: summary:MongoDB cache usage too highdescription:WiredTiger cache usage is over 90% on {{$labels.instance }}.在Prometheus中加载告警规则修改prometheus.yml加入rule_filesrule_files: -/app/prometheus//mongodb_alerts.yml配置Alertmanager确保Prometheus的alerting指向Alertmanager# prometheus.ymlalerting: alertmanagers: - static_configs: - targets:[localhost:9093]重启prometheus服务:systemctl restart prometheus使用浏览器Ip9090打开promethues的页面我们可以看到成功的检测到了mongodbd的告警啦为了实现Prometheus对位于公网或不同局域网中的MongoDB数据库的监控可在目标机器上部署mongodb_exporter以暴露数据库指标并通过内网穿透工具cpolar将其本地监听端口如9216安全地映射到公网。Prometheus服务器即可通过cpolar 提供的公网地址拉取远端MongoDB实例的监控数据从而在不依赖复杂网络配置或无需直接暴露数据库本身的前提下完成跨网络的安全监控集成。6.安装cpolar实现随时随地开发6.1 什么是cpolarcpolar是一款安全高效的内网穿透工具无需公网IP或复杂配置只需一条命令即可将本地服务器、Web服务或任意端口映射到公网让你随时随地远程访问内网应用特别适合开发调试、远程运维和应急部署等场景。6.2 部署cpolarcpolar 可以将你本地电脑中的服务如 SSH、Web、数据库映射到公网。即使你在家里或外出时也可以通过公网地址连接回本地运行的开发环境。❤️以下是安装cpolar步骤使用一键脚本安装命令sudocurlhttps://get.cpolar.sh|sh安装完成后执行下方命令查看cpolar服务状态如图所示即为正常启动sudosystemctl status cpolarCpolar安装和成功启动服务后在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可打开浏览器访问本地9200端口使用cpolar账户密码登录即可,登录后即可对隧道进行管理。7.配置公网地址登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道隧道名称可自定义本例使用了:mongodb_exporter注意不要与已有的隧道名称重复协议http本地地址9216域名类型随机域名地区选择China Top创建成功后打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址接下来就可以在其他电脑或者移动端设备异地上使用地址访问。访问成功。8.将本MongoDB_exporter暴露给Prometheus进行远程抓取Prometheus可以通过这个公网地址23c13f8d.r6.cpolar.top访问到运行在本地9216端口的MongoDB_exporter服务从而抓取系统指标。- targets:[23c13f8d.r6.cpolar.top]labels: app:mongodb_exporter重启prometheus服务:systemctl restart prometheus使用浏览器Ip9090打开promethues的页面我们可以看到成功的抓取服务啦9.保留固定公网地址使用cpolar为其配置二级子域名该地址为固定地址不会随机变化。点击左侧的预留选择保留二级子域名地区选择china Top然后设置一个二级子域名名称我这里演示使用的是mongodb大家可以自定义。填写备注信息点击保留。登录cpolar web UI管理界面点击左侧仪表盘的隧道管理——隧道列表找到所要配置的隧道postgres点击右侧的编辑。修改隧道信息将保留成功的二级子域名配置到隧道中域名类型选择二级子域名Sub Domain填写保留成功的二级子域名地区: China Top点击更新更新完成后打开在线隧道列表此时可以看到随机的公网地址已经发生变化地址名称也变成了保留和固定的二级子域名名称。最后我们使用固定的公网地址在任意设备的浏览器中访问可以看到成功访问本地部署的页面这样一个永久不会变化的二级子域名公网网址即设置好了。结尾数据库可观测性不再是“锦上添花”而是运维工作的“基础设施”。MongoDB Exporter作为连接MongoDB与云原生监控生态的桥梁是每一位DBA和SRE的必备利器。唯有让指标“看得见”才能让风险“防得住”唯有让告警“告得准”才能让系统“稳得住”。在迈向智能运维的道路上从部署一个Exporter开始为你的MongoDB装上“眼睛”和“哨兵”。