Monitorando o MongoDB 3 usando o StackDriver no GCE

3

Alguém conseguiu com sucesso monitorar um cluster do MongoDB 3 (ou banco de dados autônomo) com o StackDriver no GCE?

Eu configurei um cluster do MongoDB 3.0.6 no GCE (conjunto de réplicas com 2 réplicas e 1 árbitro)

Estou tentando monitorá-lo por meio do StackDriver fornecido pelo Google.

Eu segui todas as instruções para instalar o agente de monitoramento e o plug-in mongodb encontrados aqui: link

Quando eu inicio o agente na réplica onde ele está configurado:

sudo /etc/init.d/stackdriver-agent restart

Eu recebo os seguintes erros em / 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.

Eu suspeito que o agente StackDriver não seja compatível com o MongoDB 3, porque:

  • No passado, usei o recurso Clique para implantar do GCE para criar um cluster e consegui monitorá-lo com o StackDriver. Naquela época, estava com o MongoDB 2.6.x.

  • Eu rapidamente instalei novamente uma instalação autônoma do MongoDB 2.6.x, configurei o agente StackDriver da mesma maneira e ... ele funciona: - (

Qualquer ajuda será muito apreciada.

Detalhes da configuração:

Mongodb:

  • auth = true

  • no administrador do banco de dados, usuário com funções: dbAdminAnyDatabase, clusterAdmin e readAnyDatabase

Stackdriver Mongodb plugin:

  • este usuário e senha usados em /opt/stackdriver/collectd/etc/collectd.d/mongodb.conf

Informações adicionais:

Sem autenticação : o plug-in inicializa com êxito

/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>

Modo de autenticação: erros de autenticação ao reiniciar o agente

/etc/mongod.conf:

# Turn on/off security.  Off is currently the default
#noauth = true
auth = true

3 usuários configurados

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>

Mesmos erros quando uso o siteRootAdmin na configuração do plugin.

Explicação e solução

O culpado foi, na verdade, o esquema de autenticação usado pelo agente StackDriver

Eu adaptei a solução sugerida por Adam C , porque eu já tenho usuários criados com o esquema SCRAM-SHA-1 .

Na verdade, eu só preciso que o usuário para o monitoramento use o MONGODB-CR.

Para fazer isso:

Reinicie o MongoDB 3.0 com a autenticação desativada

Conecte-se à instância

Altere temporariamente o esquema de autenticação para MONGODB-CR

use admin
var schema = db.system.version.findOne({"_id" : "authSchema"});
schema.currentVersion = 3;
db.system.version.save(schema);

Crie o usuário para o plug-in do StackDriver

db.createUser(
      {
        user: "monitoring",
        pwd: "xxx",
        roles: [ 
        { role: "dbAdminAnyDatabase", db: "admin" },
        { role: "clusterAdmin", db: "admin" },
        { role: "readAnyDatabase", db: "admin" } ]
      }
    )

Verifique se tem o esquema de autenticação correto: MONGODB-CR

> db.system.users.find({"user":"monitoring"})
{ "_id" : "admin.monitoring", "user" : "monitoring", "db" : "admin", "credentials" : { "MONGODB-CR" ...

Defina o esquema de autenticação para SCRAM-SHA-1

var schema = db.system.version.findOne({"_id" : "authSchema"});
schema.currentVersion = 5;
db.system.version.save(schema);

Reinicie o MongoDB 3.0 com a autenticação ativada

Reinicie o agente StackDriver

Quando o StackDriver for compatível com SCRAM-SHA-1, será útil atualizar o esquema de autenticação deste usuário

db.adminCommand({authSchemaUpgrade: 1});
    
por Arnaud J 18.09.2015 / 19:14

2 respostas

1

Eu suspeito que o Stack Driver não suporta (ainda) o novo mecanismo de autenticação SCRAM-SHA-1 . Este novo mecanismo foi adicionado em 3.0 para substituir MONGODB-CR e é o padrão em 3.0+, no entanto, requer que o driver suporte o novo mecanismo.

Para fazer com que o MongoDB 3.0 use o mecanismo mais antigo, você pode começar com o 2.6 e criar seus usuários lá, fazer upgrade ou fazer o seguinte (com base em este comentário ):

  • Inicie o MongoDB 3.0 com a autenticação desativada (certifique-se de que nenhum usuário tenha sido adicionado ainda)
  • Conecte-se à instância e execute o seguinte:

    var schema = db.system.version.findOne({"_id" : "authSchema"}); schema.currentVersion = 3; db.system.version.save(schema);

  • Inicie o MongoDB com a autenticação ativada e crie seus usuários

Esses usos agora devem ser criados com MONGODB-CR . O StackDriver está usando libmongoc , que suporta SCRAM-SHA-1 a partir da versão 1.1 , mas sua versão parece muito mais antigos com base em alguma navegação no Github. Depois de atualizar o driver, esse problema deve desaparecer - por enquanto, você terá que contorná-lo.

    
por 21.09.2015 / 20:34
3

Eu trabalho no Google no agente do Stackdriver. A resposta de Adam C está correta. Eu tenho trabalhado nisso ultimamente, e agora temos uma versão disso em beta que tem funcionado bem em nossos próprios testes. Essa nova versão aborda não apenas o problema SCRAM-SHA-1, mas também apresenta algumas melhorias de desempenho. Antes de lançá-lo mais amplamente, gostaríamos da oportunidade de testá-lo em alguns ambientes de clientes.

Se alguém estiver disposto a ser um beta tester para a nova versão do nosso agente, posso providenciar a entrega de um arquivo .deb ou .rpm para você na sua plataforma. Como sempre, há um pequeno risco de que algo possa dar errado, então acho que isso só faz sentido se você tiver um ambiente de não produção em que você possa testá-lo.

EDIT: a partir de 12 de julho de 2016, esta alteração está agora disponível em produção!

    
por 24.06.2016 / 23:09