MongoDB exporter
这是新的 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_exporter 或 mongodb_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 用户名/密码,
但用户名和密码信息会通过 ps 或 top 命令泄露,出于安全考虑,您可以使用 MONGODB_USER 和 MONGODB_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)
| Level | Description |
|---|---|
| 0 | 分析器处于关闭状态,不收集任何数据。这是默认的分析器级别。 |
| 1 | 分析器收集耗时超过 slowms 值或匹配过滤条件的操作数据。当设置过滤器时:
|
| 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 type | Label |
|---|---|
| mongos | mongos |
| regular instance (primary or secondary) | shardsvr |
| arbiter | shardsvr |
| standalone | (empty string) |
- cl_id: 集群 ID
- rs_nm: 副本集名称
- rs_state: 副本集状态是
getDiagnosticData()到replSetGetStatus.myState之间的整数。 有关副本集状态值的详细信息,请参阅 官方文档。
使用参考
有关使用导出器的详细信息,请参阅 参考指南。
错误报告 / 功能 PR
请参阅 贡献指南。