ITADN
percona/mongodb_exporter
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

MongoDB exporter

Release Build Status codecov.io Code Coverage Go Report Card OpenSSF Scorecard CLA assistant Forum

这是新的 MongoDB exporter 实现,它处理 MongoDB 监控命令暴露的所有指标。 此新实现会遍历诊断命令中暴露的所有字段,并尝试从中获取数据。

目前,已实现以下指标来源:

  • $collStats
  • $indexStats
  • getDiagnosticData
  • replSetGetStatus
  • replSetGetConfig
  • serverStatus

支持的 MongoDB 版本

该 exporter 适用于 Percona Server for MongoDB 以及 MongoDB Community 或 Enterprise Edition 6.0 及更高版本。旧版本可能也能工作,但不再进行测试。

关于 Percona MongoDB exporter 版本的信息

旧的 0.1x.y 版本(例如 master 分支)已迁移至 release-0.1x 分支。

已实现一个标志 --compatible-mode,用于暴露与 0.1x 兼容的指标名称,从而简化从旧版本到当前版本的迁移。

构建 exporter

构建过程使用 docker 化的 goreleaser,因此您无需安装 Go。 只需运行 make release,新的二进制文件将生成在 build 目录下。

├── build
│ ├── config.yaml
│ ├── mongodb_exporter_7c73946_checksums.txt
│ ├── mongodb_exporter-7c73946.darwin-amd64.tar.gz
│ ├── mongodb_exporter-7c73946.linux-amd64.tar.gz
│ ├── mongodb_exporter_darwin_amd64
│ │ └── mongodb_exporter <--- MacOS binary
│ └── mongodb_exporter_linux_amd64
│ └── mongodb_exporter <--- Linux binary

运行 exporter

如果您使用上一节中提到的方法构建了 exporter,生成的二进制文件位于 mongodb_exporter_linux_amd64/mongodb_exportermongodb_exporter_darwin_amd64/mongodb_exporter

Docker

Docker 镜像可在 官方 percona 仓库 上获取。

示例
# with podman
podman run -d -p 9216:9216 percona/mongodb_exporter:0.40 --mongodb.uri=mongodb://127.0.0.1:17001

# with docker
docker run -d -p 9216:9216 percona/mongodb_exporter:0.40 --mongodb.uri=mongodb://127.0.0.1:17001

权限

连接用户应具备查询所需统计信息的足够权限:

      {
         "role":"clusterMonitor",
         "db":"admin"
      },
      {
         "role":"read",
         "db":"local"
      }

当使用 PBM 收集器从 Percona Backup for MongoDB 获取指标时,用户还应具备查询 PBM 内部集合(位于 admin 数据库中)的足够权限。一种选择是在 admin 集合上授予 find 权限:

privileges: [
        { resource: { db: "admin", collection: "" }, actions: [ "find" ] },
],

或者,您可以为每个 PBM 内部集合授予 find 权限(参见:https://docs.percona.com/percona-backup-mongodb/details/control-collections.html):

privileges: [
       { resource: { db: "admin", collection: "pbmBackups" }, actions: [ "find" ] },
       { resource: { db: "admin", collection: "pbmAgents" }, actions: [ "find" ] },
       { resource: { db: "admin", collection: "pbmConfig" }, actions: [ "find" ] },
       ...
],

然而,不推荐这样做,因为内部集合的列表可能会在未来的版本中发生变化。

有关 MongoDB 角色的更多信息,请参阅 文档

示例

mongodb_exporter_linux_amd64/mongodb_exporter --mongodb.uri=mongodb://127.0.0.1:17001

MongoDB 身份验证

您可以直接在 --mongodb.uri= 中提供 mongodb 用户名/密码,例如 --mongodb.uri=mongodb://user:pass@127.0.0.1:17001,您也可以使用 --mongodb.user=--mongodb.password= 提供 mongodb 用户名/密码, 但用户名和密码信息会通过 pstop 命令泄露,出于安全考虑,您可以使用 MONGODB_USERMONGODB_PASSWORD 环境变量为给定的 uri 设置用户名/密码

MONGODB_USER=XXX MONGODB_PASSWORD=YYY mongodb_exporter_linux_amd64/mongodb_exporter --mongodb.uri=mongodb://127.0.0.1:17001 --mongodb.collstats-colls=db1.c1,db2.c2
# or
export MONGODB_USER=XXX
export MONGODB_PASSWORD=YYY
mongodb_exporter_linux_amd64/mongodb_exporter --mongodb.uri=mongodb://127.0.0.1:17001 --mongodb.collstats-colls=db1.c1,db2.c2

多目标支持

您可以通过在 --mongodb.uri 选项或 MONGODB_URI 环境变量中指定多个以逗号分隔的 URI 来运行导出器,从而使用单个 mongodb_exporter 实例监控多个 mongodb 实例。

--mongodb.uri=mongodb://user:pass@127.0.0.1:27017/admin,mongodb://user2:pass2@127.0.0.1:27018/admin

在这种情况下,您可以使用带有 target 参数的 /scrape 端点来获取指定目标的指标。 在查询数据时,您可以在 target 参数中仅使用 mongodb://host:port,无需其他参数,当然也无需主机凭据

GET /scrape?target=mongodb://127.0.0.1:27018

如果您的 URI 以 mongodb:// 或 mongodb+srv:// 模式为前缀,则逗号后未加该前缀的任何主机将被视为集群的一部分,而不是独立主机。 因此,可以像这样组合集群和独立主机:

--mongodb.uri=mongodb+srv://user:pass@host1:27017,host2:27017,host3:27017/admin,mongodb://user2:pass2@host4:27018/admin

您可以使用 --split-cluster 选项将所有集群节点拆分为独立的目标。 当集群节点定义为 SRV 记录且 mongodb_exporter 使用指定的 mongodb+srv 域名运行时,此模式非常有用。 在这种情况下,将在 mongodb_exporter 启动时查询 SRV 记录,并且可以使用多目标端点的 target 参数查询每个集群节点。

总体目标请求端点

有一个总体目标端点 /scrapeall,它可以在一次请求中查询所有目标。它可以用于存储多个节点指标,而无需单独的目标请求。在这种情况下,每个节点指标都将包含一个 instance 标签,其中包含节点名称,格式为 host:port 对(如果未指定端口,则仅为 host)。例如,对于以以下选项运行的 mongodb_exporter:

--mongodb.uri="mongodb://host1:27015,host2:27016" --split-cluster=true

我们得到如下指标:

mongodb_up{instance="host1:27015"} 1
mongodb_up{instance="host2:27016"} 1

启用 collstats 指标收集

--mongodb.collstats-colls 接收一个使用 collstats 进行监控的数据库和集合列表。 用法示例:--mongodb.collstats-colls=database1.collection1,database2.collection2

mongodb_exporter_linux_amd64/mongodb_exporter --mongodb.uri=mongodb://127.0.0.1:17001 --mongodb.collstats-colls=db1.c1,db2.c2

启用兼容模式。

当通过 --compatible-mode 启用兼容模式时,exporter 将以新的命名和标签模式公开所有新指标,同时以版本 1 兼容的方式公开指标。 例如,如果启用了兼容模式,指标 mongodb_ss_wt_log_log_bytes_written(新格式)

# HELP mongodb_ss_wt_log_log_bytes_written serverStatus.wiredTiger.log.
# TYPE mongodb_ss_wt_log_log_bytes_written untyped
mongodb_ss_wt_log_log_bytes_written 2.6208e+06

也将作为 mongodb_mongod_wiredtiger_log_bytes_total 公开,并带有 unwritten 标签。

HELP mongodb_mongod_wiredtiger_log_bytes_total mongodb_mongod_wiredtiger_log_bytes_total
# TYPE mongodb_mongod_wiredtiger_log_bytes_total untyped
mongodb_mongod_wiredtiger_log_bytes_total{type="unwritten"} 2.6208e+06

启用 profile 指标收集

--collector.profile 要收集指标,您需要在 MongoDB 中启用 profiler: 用法示例:db.setProfilingLevel(2)

LevelDescription
0分析器处于关闭状态,不收集任何数据。这是默认的分析器级别。
1分析器收集耗时超过 slowms 值或匹配过滤条件的操作数据。
当设置过滤器时:
  • slowmssampleRate 选项不用于分析。
  • 分析器仅捕获匹配过滤器的操作。
2分析器收集所有操作的数据。

启用分片指标收集

当通过 --collector.shards 启用分片指标收集时,导出器将暴露与分片 Mongo 相关的指标。 例如,如果启用了分片收集器:

# HELP mongodb_shards_collection_chunks_count sharded collection chunks.
# TYPE mongodb_shards_collection_chunks_count counter
mongodb_shards_collection_chunks_count{collection="system.sessions",database="config",shard="rs1"} 250
mongodb_shards_collection_chunks_count{collection="system.sessions",database="config",shard="rs2"} 250

您可以看到分片名称、其集合、数据库和计数。

集群角色标签

导出器在所有指标中设置了一些拓扑标签。 标签如下:

  • cl_role: 根据此表确定的集群角色:
Server typeLabel
mongosmongos
regular instance (primary or secondary)shardsvr
arbitershardsvr
standalone(empty string)
  • cl_id: 集群 ID
  • rs_nm: 副本集名称
  • rs_state: 副本集状态是 getDiagnosticData()replSetGetStatus.myState 之间的整数。 有关副本集状态值的详细信息,请参阅 官方文档

使用参考

有关使用导出器的详细信息,请参阅 参考指南

错误报告 / 功能 PR

请参阅 贡献指南