MongoDB 监控(四)MongoDB Exporter 的初步使用

快猫实习生 2024-11-14 11:26:41

MongoDB 监控

这是 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 仪表盘来展示一下。

联系我们交流

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat