是否有人成功地使用 GCE 中的 StackDriver 监控 MongoDB 3 集群(或独立数据库)?
我在 GCE 中设置了一个 MongoDB 3.0.6 集群(副本集有 2 个副本和 1 个仲裁器)
我正在尝试通过 Google 提供的 StackDriver 来监控它。
我已按照此处的所有说明安装监控代理和 mongodb 插件: https://cloud.google.com/monitoring/agent/plugins/mongodb
当我在配置它的副本上启动代理时:
sudo /etc/init.d/stackdriver-agent restart
我在 /var/log/syslog 中收到以下错误:
collectd[6013]: tcpconns plugin: Reading from netlink succeeded. Will use the netlink method from now on.
collectd[6013]: mongo plugin: Authenticating to localhost:27017 failed:
collectd[6013]: mongo plugin: Connecting to localhost:27017 failed:
collectd[6013]: read-function of plugin `mongodb' failed. Will suspend it for 120.000 seconds.
我怀疑 StackDriver 代理与 MongoDB 3 不兼容,因为:
过去,我曾使用 GCE 的 Click-to-deploy 功能创建集群,并能够使用 StackDriver 对其进行监控。当时使用的是 MongoDB 2.6.x。
我很快再次设置了 MongoDB 2.6.x 的独立安装,以相同的方式配置了 StackDriver 代理,并且......它可以正常工作 :-(
任何帮助都将不胜感激。
配置详情:
MongoDB:
身份验证=真
在数据库管理员中,具有角色的用户:dbAdminAnyDatabase、clusterAdmin 和 readAnyDatabase
Stackdriver Mongodb插件:
- /opt/stackdriver/collectd/etc/collectd.d/mongodb.conf 中使用的用户和密码
附加信息 :
沒有授權:插件初始化成功地
/etc/mongod.conf:
# Turn on/off security. Off is currently the default
#noauth = true
#auth = true
/opt/stackdriver/collectd/etc/collectd.d/mongodb.conf:
LoadPlugin mongodb
<Plugin "mongodb">
Host "localhost"
Port "27017"
# If you restricted access to the database, you can
# set the username and password here
# User "user_name"
# Password "user_password"
# For performance/eventually consistent trade-offs you may add this line
# PreferSecondaryQuery true
</Plugin>
身份验证模式:重新启动代理时出现身份验证错误
/etc/mongod.conf:
# Turn on/off security. Off is currently the default
#noauth = true
auth = true
配置了 3 个用户
use admin
db.createUser(
{
user: "siteUserAdmin",
pwd: "xxx",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
db.auth("siteUserAdmin", "xxx");
db.createUser( {
user: "siteRootAdmin",
pwd: "xxx",
roles: [ { role: "root", db: "admin" } ]
});
db.createUser(
{
user: "monitoring",
pwd: "xxx",
roles: [
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" } ]
}
)
/opt/stackdriver/collectd/etc/collectd.d/mongodb.conf:
LoadPlugin mongodb
<Plugin "mongodb">
Host "localhost"
Port "27017"
# If you restricted access to the database, you can
# set the username and password here
User "monitoring"
Password "xxx"
# For performance/eventually consistent trade-offs you may add this line
# PreferSecondaryQuery true
</Plugin>
当我在插件配置中使用 siteRootAdmin 时出现同样的错误。
解释和解决方案
罪魁祸首实际上是 StackDriver 代理使用的身份验证模式
我适应了Adam C 建议的解决方案,因为我已经使用 SCRAM-SHA-1 模式创建了用户。
其实我只需要监控的用户使用MONGODB-CR就可以了。
要做到这一点:
使用以下命令重新启动 MongoDB 3.0授权已禁用
连接到实例
将身份验证模式暂时更改为 MONGODB-CR
use admin
var schema = db.system.version.findOne({"_id" : "authSchema"});
schema.currentVersion = 3;
db.system.version.save(schema);
为 StackDriver 插件创建用户
db.createUser(
{
user: "monitoring",
pwd: "xxx",
roles: [
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" } ]
}
)
检查它具有正确的身份验证模式:MONGODB-CR
> db.system.users.find({"user":"monitoring"})
{ "_id" : "admin.monitoring", "user" : "monitoring", "db" : "admin", "credentials" : { "MONGODB-CR" ...
将身份验证架构重新设置为 SCRAM-SHA-1
var schema = db.system.version.findOne({"_id" : "authSchema"});
schema.currentVersion = 5;
db.system.version.save(schema);
使用以下命令重新启动 MongoDB 3.0已启用身份验证
重启 StackDriver 代理
当 StackDriver 支持 SCRAM-SHA-1 时,升级此用户的身份验证架构将会很有用
db.adminCommand({authSchemaUpgrade: 1});
答案1
我怀疑 Stack Driver 还不支持新的SCRAM-SHA-1
身份验证机制。这种新机制在 3.0 版中新增来替代MONGODB-CR
并在 3.0+ 中成为默认设置,但是它要求驱动程序支持新机制。
要让 MongoDB 3.0 使用旧机制,您可以从 2.6 开始并在其中创建用户,然后升级,或者您可以执行以下操作(基于此评论):
- 启动 MongoDB 3.0 并禁用身份验证(确保尚未添加任何用户)
连接到实例并运行以下命令:
var schema = db.system.version.findOne({"_id" : "authSchema"}); schema.currentVersion = 3; db.system.version.save(schema);
启动 MongoDB 并启用身份验证并创建用户
现在应该使用 创建这些用途MONGODB-CR
。 StackDriver 正在使用libmongoc
,它自 起支持 SCRAM-SHA-1版本 1.1但根据 Github 浏览,他们的版本看起来要旧得多。一旦他们更新了驱动程序,这个问题就会消失 - 现在你必须解决这个问题。
答案2
我在 Google 从事 Stackdriver 代理工作。Adam C 的回答是正确的。我最近一直在研究这个问题,现在我们有一个测试版,在我们自己的测试中运行良好。这个新版本不仅解决了 SCRAM-SHA-1 问题,而且还有一些性能改进。在更广泛地发布它之前,我们希望有机会在几个客户环境中对其进行测试。
如果有人愿意成为我们新版本代理的 beta 测试员,我可以安排向您提供适合您平台的 .deb 或 .rpm 文件。一如既往,可能会出现一些小问题,所以我认为只有在您有可以尝试的非生产环境时,这才有意义。
编辑:截至 2016 年 7 月 12 日,此更改现已在生产中可用!