como configurar o servidor sensu com rabbitmq?

1

Eu quero instalar sensu-server e sensu-client ambos em nó único (ubuntu 14.04) para fins práticos. quando estou usando redis como transporte está funcionando bem. mas quando eu estou tentando configurar rabbitmq como transporte que me dá erro. minha estrutura de configuração é:

├── conf.d
│   ├── api.json
│   ├── check_apache.json
│   ├── client.json
│   ├── default_handler.json
│   ├── rabbitmq.json
│   ├── redis.json
│   └── transport.json
├── config.json.example
├── dashboard.d
├── extensions
├── plugins
│   └── check-apache.rb
├── ssl
│   ├── cert.pem
│   └── key.pem
└── uchiwa.json

/etc/sensu/uchiwa.json

{
    "sensu": [
        {
            "name": "Sensu",
            "host": "localhost",
            "ssl": false,
            "port": 4567,
            "path": "",
            "timeout": 5000
        }
    ],
    "uchiwa": {
        "port": 3000,
        "stats": 10,
        "refresh": 10000
    }
}

/etc/sensu/conf.d/api.json

{
    "api": {
        "host": "localhost",
        "port": 4567
    }
}

/etc/sensu/conf.d/client.json

{
    "client": {
        "name": "server",
        "address": "localhost",
        "subscriptions": [ "ALL" ]
    }
}

/etc/sensu/conf.d/rabbitmq.json

{
    "rabbitmq": {
        "host": "127.0.0.1",
        "port": 5671,
        "vhost": "/sensu",
        "user": "sensu",
        "password": "pass",
        "heartbeat": 30,
        "prefetch": 50,
        "ssl": {
            "cert_chain_file": "/etc/sensu/ssl/cert.pem",
            "private_key_file": "/etc/sensu/ssl/key.pem"
        }
    }
}

/etc/sensu/conf.d/redis.json

{
    "redis": {
        "host": "localhost",
        "port": 6379
    }
}

/etc/sensu/conf.d/transport.json

{
    "transport": {
        "name": "rabbitmq",
        "reconnect_on_error": true
    }
}

quando eu replico o rabbitmq para redis no arquivo transport.json minha configuração está funcionando bem, mas no caso de o rabbitmq não funcionar. Nos logs, recebemos esse erro, mas o nome de usuário e a senha estão corretos e são fornecidos no arquivo de configuração.

{"timestamp":"2017-03-21T18:44:28.167638+0000","level":"warn","message":"transport connection error","reason":"possible authentication failure. wrong credentials?","user":"sensu"}
    
por Tiger 21.03.2017 / 19:48

1 resposta

1

Eu tive o mesmo problema e passei boa parte da minha manhã resolvendo isso. Esse problema surge ao usar o Certificado SSL para o RabbitMQ como um transporte.

1) Sem SSL: Pode-se conseguir transporte via RabbitMQ tendo o seguinte arquivo de configuração config.json (/ etc / sensu)

{
  "rabbitmq": {
    "host": "172.19.4.81",
    "port": 5671,
    "vhost": "/sensu",
    "user": "sensu",
    "password": "secret"
  },
 "transport": {
    "name": "rabbitmq",
    "reconnect_on_error": true
  },
  "api": {
    "host": "localhost",
    "bind": "0.0.0.0",
    "port": 4567
  },
"checks": {
    "check_http": {
      "type": "metric",
      "command": "/usr/lib64/nagios/plugins/check_http -I 127.0.0.1",
      "interval": 40,
      "standalone": true,
    }
  },
  "client": {
    "subscriptions": [
      "production"
    ]
  }
}

Isso pode ser dividido em arquivos diferentes e armazenado em /etc/sensu/conf.d. Sensu carrega todos os arquivos presentes em conf.d e config.json. Então a localização não importa. Apenas me serve como toda a configuração está em um lugar.

2) Com SSL: A causa exata do problema pode estar localizada em / var / log / rabbitmq. No entanto, para o meu caso, mostrou

RABBITMQ ERROR LOG :
** Reason for termination =
** {function_clause,[{tls_v1,enum_to_oid,
[28],
[{file,"tls_v1.erl"},{line,404}]},
{ssl_handshake,'-dec_hello_extensions/2-blc$^1/1-0-',1,
[{file,"ssl_handshake.erl"},{line,1653}]},
{ssl_handshake,'-dec_hello_extensions/2-blc$^1/1-0-',1,
[{file,"ssl_handshake.erl"},{line,1653}]},
{ssl_handshake,dec_hello_extensions,2,
[{file,"ssl_handshake.erl"},{line,1653}]},
{tls_handshake,decode_handshake,3,
[{file,"tls_handshake.erl"},{line,182}]},
{tls_handshake,get_tls_handshake_aux,3,
[{file,"tls_handshake.erl"},{line,153}]},
{tls_connection,next_state,4,
[{file,"tls_connection.erl"},{line,454}]},
{gen_fsm,handle_msg,7,
[{file,"gen_fsm.erl"},{line,505}]}]}

e a solução foi atualizada para Erlang > = 17,5. como mencionado aqui e no portal devops.

O erlang fornecido pelo repositório epel é da versão R16B03 e é melhor removê-lo e atualizá-lo. Como por algum motivo o Erlang do repositório da Erlang Solutions não foi instalado, eu usei o Erlang RPM de dependência zero para o RabbitMQ fornecido pela Rabbitmq. erlang repo e configurei o ssl como mencionado por sensu (baixe os certificados ssl, forneça o caminho exato nos arquivos de configuração rabbitmq e sensu )

a. Certificados SSL Faça o download em

wget http://sensuapp.org/docs/1.0/files/sensu_ssl_tool.tar
tar -xvf sensu_ssl_tool.tar

Gere a autoridade de certificação OpenSSL e os certificados autoassinados usando a ferramenta Sensu SSL:

cd sensu_ssl_tool
./ssl_certs.sh generate

b. Coloque esses certificados no diretório que pode ser encontrado pelo Rabbitmq.

mkdir /etc/rabbitmq/ssl
cp server_key.pem /etc/rabbitmq/ssl/
cp server_cert.pem /etc/rabbitmq/ssl/
cp testca/cacert.pem /etc/rabbitmq/ssl/

O arquivo RabbitMQ Config, se ausente, pode ser criado em / etc / rabbitmq como

/etc/rabbitmq/rabbitmq.conf
[
  {rabbit, [
     {ssl_listeners, [5671]},
     {ssl_options, [{cacertfile,"/etc/rabbitmq/ssl/cacert.pem"},
                    {certfile,"/etc/rabbitmq/ssl/cert.pem"},
                    {keyfile,"/etc/rabbitmq/ssl/key.pem"},
                    {versions, ['tlsv1.2']},
                    {ciphers,  [{rsa,aes_256_cbc,sha256}]},
                    {verify,verify_peer},   
                    {fail_if_no_peer_cert,false}]}
   ]}
].

Agora, onde quer que os componentes sensu (client, api, server) estejam instalados, a pasta / etc / sensu / ssl deve ter o client / key.pem e client / cert.pem

cp client/key.pem client/cert.pem  /etc/sensu/ssl/

Agora, essas pastas devem ser mencionadas no arquivo de configuração do sensu.

/etc/sensu/config.json
{
  "rabbitmq": {
    "host": "172.19.4.81",
    "port": 5672,
    "vhost": "/sensu",
    "user": "sensu",
    "password": "secret",
    "ssl": {
       "cert_chain_file": "/etc/sensu/ssl/cert.pem",
       "private_key_file": "/etc/sensu/ssl/key.pem"
     }
  },
  "transport": {
    "name": "rabbitmq",
    "reconnect_on_error": true
  },
  "api": {
    "host": "localhost",
    "bind": "0.0.0.0",
    "port": 4567
  },
"client": {
    "subscriptions": [
      "production"
    ]
  }
}

Porta padrão para rabbitmq é 5671, enquanto que ssl é 5672.

    
por 19.09.2017 / 11:54