Rabbitmq를 사용하여 sensu 서버를 구성하는 방법은 무엇입니까?

Rabbitmq를 사용하여 sensu 서버를 구성하는 방법은 무엇입니까?

sensu-server실용적인 목적으로 두 가지를 모두 단일 노드(ubuntu 14.04)에 설치하고 싶습니다 . 차량 sensu-client으로 사용하면 잘 작동합니다. redis하지만 전송으로 구성하려고 하면 rabbitmq오류가 발생합니다. 내 구성 구조는 다음과 같습니다

├── 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
    }
}

내 설정은 rabbitmq파일 redis에 다시 넣으면 잘 작동하지만, Rabbitmq의 경우에는 작동하지 않습니다. transport.json로그에는 이 오류가 표시되지만 구성 파일에 제공된 사용자 이름과 비밀번호는 정확합니다.

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

답변1

나는 같은 문제가 있었고 대부분의 아침을 문제를 해결하는 데 보냈습니다. 이 문제는 RabbitMQ의 SSL 인증서를 전송으로 사용할 때 발생합니다.

1) SSL 없음: 다음 구성 파일 config.json(/etc/sensu)을 통해 RabbitMQ를 통해 전송이 가능합니다.

{
  "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"
    ]
  }
}

이는 여러 파일로 분할되어 /etc/sensu/conf.d에 저장될 수 있습니다. Sensu는 conf.d 및 config.json에 있는 모든 파일을 로드합니다. 그러니 위치는 중요하지 않습니다. 모든 구성이 한곳에 있기 때문에 저에게는 매우 효과적입니다.

2) SSL 사용: 문제의 정확한 원인은 /var/log/rabbitmq에서 찾을 수 있습니다. 그러나 내 경우에는

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}]}]}

Erlang >= 17.5로 솔루션 업그레이드. 상술 한 바와 같이여기그리고 DevOps 포털에서요.

epel 저장소에서 제공하는 erlang 버전은 R16B03이므로 삭제하고 업그레이드하는 것이 좋습니다. 어떤 이유로 Erlang 솔루션 저장소의 Erlang이 설치되지 않았기 때문에 Rabbitmq에서 제공하는 RabbitMQ용 종속성이 없는 Erlang RPM을 사용했습니다.얼랭 환매 계약sensu의 설명에 따라 SSL을 구성합니다. (SSL 인증서를 다운로드하고 Rabbitmq 및 sensu 구성 파일에 정확한 경로를 제공하세요)

ㅏ. SSL 인증서 다운로드 주소

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

Sensu SSL 도구를 사용하여 OpenSSL 인증 기관 및 자체 서명 인증서를 생성하세요.

cd sensu_ssl_tool
./ssl_certs.sh generate

b. 이러한 인증서를 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/

RabbitMQ 구성 파일(존재하지 않는 경우)은 /etc/rabbitmq에 다음과 같이 생성될 수 있습니다.

/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}]}
   ]}
].

이제 sensu 구성 요소(클라이언트, API, 서버)가 설치될 때마다 /etc/sensu/ssl 폴더에 client/key.pem 및 client/cert.pem이 포함되어야 합니다.

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

이제 이러한 폴더가 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"
    ]
  }
}

Rabbitmq의 기본 포트는 5671이고 SSL의 기본 포트는 5672입니다.

관련 정보