MongoDB 监控(四)MongoDB Exporter 的初步使用
这是 MongoDB 监控系列文章的第四篇,前面几篇文章的链接如下:
这篇开始咱们做个实操。根据前面的文章,要监控 MongoDB,需要创建一个账号并分配权限,咱也不知道咋搞,先问问,掌握个大概。
问题:如何创建 MongoDB Exporter 用户?
下面是我的 prompt:
我想使用 MongoDB Exporter 监控 MongoDB,需要创建一个用户并分配相关权限,这样 MongoDB Exporter 才能连接到 MongoDB 实例并获取监控数据。请问如何在 MongoDB 中创建用户并分配权限?
在 MongoDB 中创建用户并分配权限的步骤如下。您可以通过 MongoDB Shell 来执行这些操作。
1. 连接到 MongoDB
首先,使用 MongoDB Shell 连接到您的 MongoDB 实例。可以使用以下命令:
mongo --host <mongodb-host> --port <mongodb-port> -u <admin-username> -p <admin-password> --authenticationDatabase admin
确保将 <mongodb-host>
、<mongodb-port>
、<admin-username>
和 <admin-password>
替换为实际的值。
2. 选择数据库
在创建用户之前,您需要选择要为其创建用户的数据库。通常,为监控用途的用户可以在 admin
数据库中创建,但您也可以选择特定的数据库。
use admin
3. 创建用户
使用 db.createUser()
命令来创建用户并分配权限。以下是创建一个名为 monitoringUser
的用户的示例,该用户将被授予用于监控的权限:
db.createUser({
user: "monitoringUser",
pwd: "yourPassword", // 替换为您选择的密码
roles: [
{ role: "clusterMonitor", db: "admin" }, // 监控集群的权限
{ role: "readAnyDatabase", db: "admin" } // 读取任意数据库的权限
]
})
4. 验证用户创建
可以使用以下命令查看已创建的用户:
db.getUsers()
这将列出当前数据库中的所有用户。确保您看到刚刚创建的 monitoringUser
。
5. 连接 MongoDB Exporter
在 MongoDB Exporter 的连接字符串中,使用刚创建的用户进行身份验证。例如:
docker run -d \
--name mongodb-exporter \
-e MONGODB_URI="mongodb://monitoringUser:yourPassword@<mongodb-host>:<mongodb-port>" \
-p 9216:9216 \
bitnami/mongodb-exporter
确保将 <mongodb-host>
和 <mongodb-port>
替换为实际的 MongoDB 实例信息。
上面的信息已经比较全面了,结合前面的系列文章,我做了如下实操:
test> use admin
switched to db admin
admin> db.createUser({
... user: "exporteruser",
... pwd: "MhxzKhl",
... roles: [
... { role: "clusterMonitor", db: "admin" },
... { role: "read", db: "local" }
... ]
... })
{ ok: 1 }
admin> db.getUsers()
{
users: [
{
_id: 'admin.exporteruser',
userId: UUID('5696bfbf-737c-4d99-8604-804a19c1f6a5'),
user: 'exporteruser',
db: 'admin',
roles: [
{ role: 'read', db: 'local' },
{ role: 'clusterMonitor', db: 'admin' }
],
mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
}
],
ok: 1
}
看起来创建用户的整个流程跑通了,接下来就是验证 MongoDB Exporter 是否能够连接到 MongoDB 实例并获取监控数据了。注意上面的 roles 部分,并没有按照 aigc 给的回复配置,而是根据 MongoDB Exporter README 中的说明来配置的。你也可以直接翻看前面的文章。
安装 MongoDB Exporter
这里我不自己构建了,直接去 MongoDB Exporter 的 Github releases 页面下载他们打好的包,releases 页面地址如下:
https://github.com/percona/mongodb_exporter/releases
我的环境是 Macbook M1 所以下载下面这个发布包:
mongodb_exporter-0.42.1.darwin-arm64.tar.gz
解压缩:tar zxvf mongodb_exporter-0.42.1.darwin-arm64.tar.gz
,然后进入解压后的目录,执行:
./mongodb_exporter --mongodb.uri=mongodb://exporteruser:MhxzKhl@127.0.0.1:27017 --web.listen-address=":9216"
上面的命令运行之后,没有任何输出,比较尴尬,应该是启动成功了,直接测试吧,使用 curl 命令:
curl -s localhost:9216/metrics
会打印出很多指标,因为 MongoDB Exporter 自身这个 Go 进程的指标也暴露出来了,所以你会看到很多 go_*
的指标,这些是 MongoDB Exporter 自身的指标,不是 MongoDB 的指标。这里我 grep 一下,只看 MongoDB 的指标:
$ curl -s localhost:9216/metrics | grep mongodb
collector_scrape_time_ms{collector="general",exporter="mongodb"} 0
# HELP mongodb_up Whether MongoDB is up.
# TYPE mongodb_up gauge
mongodb_up{cluster_role="mongod"} 1
看到 mongodb_up
了,用来表示 MongoDB 是否正常运行的。这里是 1,表示正常。没有更多指标了,按照前文提到的,MongoDB Exporter 类似 Node Exporter,会内置一堆 collector,咱就直接全部启用所有 Collector,看看有哪些指标:
# 增加 --collect-all 参数,重新启动 MongoDB Exporter
./mongodb_exporter --mongodb.uri=mongodb://exporteruser:MhxzKhl@127.0.0.1:27017 --web.listen-address=":9216" --collect-all
稍等片刻,让 Exporter 收集一些数据,然后再次 curl 就可以看到采集了非常多的数据。篇幅所限,就不全部贴出了:
# HELP mongodb_asserts_msg asserts.
# TYPE mongodb_asserts_msg untyped
mongodb_asserts_msg{cl_id="",cl_role=""} 0
# HELP mongodb_asserts_regular asserts.
# TYPE mongodb_asserts_regular untyped
mongodb_asserts_regular{cl_id="",cl_role=""} 0
# HELP mongodb_asserts_rollovers asserts.
# TYPE mongodb_asserts_rollovers untyped
mongodb_asserts_rollovers{cl_id="",cl_role=""} 0
...
上例中的指标有两个标签,cl_id 和 cl_role,都是空字符串,还记得之前文章的说明么?
如果你的 server type 是 standalone,那么 cl_role 将是 (empty string)。
总结
本文介绍了如何在 MongoDB 中创建用户并分配权限,以及如何安装和启动 MongoDB Exporter。通过创建用户并分配权限,MongoDB Exporter 可以连接到 MongoDB 实例并获取监控数据。安装和启动 MongoDB Exporter 后,您可以通过访问 Exporter 的 /metrics
端点来查看 MongoDB 的监控指标。下一篇文章我会使用 Prometheus 抓取一下这些指标,然后找个 Grafana 仪表盘来展示一下。