Назад | Перейти на главную страницу

Мониторинг MongoDB 3 с помощью StackDriver в GCE

Кому-нибудь удалось успешно контролировать кластер 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, потому что:

Любая помощь будет очень оценена.

Детали конфигурации:

Mongodb:

Плагин 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 и создать там своих пользователей, а затем обновить или сделать следующее (в зависимости от этот комментарий):

  • Запустите 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. Как только они обновят драйвер, эта проблема должна исчезнуть - пока вам придется ее обойти.