Кому-нибудь удалось успешно контролировать кластер MongoDB 3 (или автономный db) с помощью StackDriver в GCE?
Я установил кластер MongoDB 3.0.6 в GCE (набор реплик с 2 репликами и 1 арбитром)
Я пытаюсь контролировать это через StackDriver, предоставленный Google.
Я выполнил все инструкции по установке агента мониторинга и плагина 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 для создания кластера и мог контролировать его с помощью StackDriver. В то время это было с MongoDB 2.6.x.
Я быстро снова установил автономную установку MongoDB 2.6.x, настроил агент StackDriver таким же образом и ... он работает :-(
Любая помощь будет очень оценена.
Детали конфигурации:
Mongodb:
auth = true
в админке базы данных пользователь с ролями: dbAdminAnyDatabase, clusterAdmin и readAnyDatabase
Плагин Stackdriver Mongodb:
Дополнительная информация :
Нет авторизации : плагин инициализирует успешно
/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.
Я адаптировал решение, предложенное Адамом 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});
Я работаю в Google над агентом Stackdriver. Ответ Адама С. правильный. Я работал над этим в последнее время, и теперь у нас есть бета-версия, которая хорошо себя зарекомендовала в нашем собственном тестировании. Эта новая версия решает не только проблему SCRAM-SHA-1, но также имеет некоторые улучшения производительности. Прежде чем выпускать его в более широком масштабе, мы хотели бы иметь возможность протестировать его в нескольких клиентских средах.
Если кто-то желает участвовать в бета-тестировании новой версии нашего агента, я могу организовать доставку вам файла .deb или .rpm, соответствующего вашей платформе. Как всегда, существует небольшой риск того, что что-то может пойти не так, поэтому я думаю, что это имеет смысл, только если у вас есть непроизводственная среда, в которой вы можете попробовать это.
РЕДАКТИРОВАТЬ: с 12 июля 2016 г. это изменение доступно в рабочей среде!
Я подозреваю, что драйвер стека (пока) не поддерживает новый SCRAM-SHA-1
Механизм аутентификации. Этот новый механизм был добавлено в 3.0 заменить MONGODB-CR
и является значением по умолчанию в версии 3.0+, однако требует, чтобы драйвер поддерживал новый механизм.
Чтобы заставить MongoDB 3.0 использовать старый механизм, вы можете начать с 2.6 и создать там своих пользователей, а затем обновить или сделать следующее (в зависимости от этот комментарий):
Подключитесь к экземпляру и запустите следующее:
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. Как только они обновят драйвер, эта проблема должна исчезнуть - пока вам придется ее обойти.