Сенсу и Графит. Настроить передачу через AMQP

Я хочу использовать Sensu в качестве системы мониторинга и Graphite в качестве бэкенда для графики.

Я хочу настроить Sensu для получения данных от RabbitMQ по протоколу AMQP, поэтому я настроил Carbon таким образом:

# vim /etc/carbon/carbon.conf

# Enable AMQP if you want to receve metrics using an amqp broker
ENABLE_AMQP = True

# Verbose means a line will be logged for every metric received
# useful for testing
AMQP_VERBOSE = True

AMQP_HOST = 10.0.3.16
AMQP_PORT = 5672
AMQP_VHOST = /sensu
AMQP_USER = sensu
AMQP_PASSWORD = kubuntu710
AMQP_EXCHANGE = metrics_my
AMQP_METRIC_NAME_IN_BODY = True

Насколько я понимаю, Carbon с некоторой частотой запрашивает данные из RabbitMQ (через AMQP) и сохраняет их через Whisper.

С другой стороны Sensu сохраняет некоторые метрики в RabbitMQ, я настроил это следующим образом:

root@sensu_server:/etc/sensu/conf.d# vim graphite_handler_amqp.json

{
  "handlers": {
    "graphite_amqp": {
      "type": "transport",
      "pipe": {
        "type": "topic",
        "name": "metrics_my",
        "durable": "true"
      },
      "mutator": "only_check_output"
    }
  }
}

И, конечно же, я прикрепил этот обработчик таким образом:

root@sensu_server:/etc/sensu/conf.d# cat metrics_cpu.json
{
  "checks": {
    "metrics_cpu": {
      "type": "metric",
      "command": "/opt/sensu/embedded/bin/metrics-cpu-pcnt-usage.rb",
      "interval": 10,
      "subscribers": ["MONGO"],
      "handlers": ["graphite_amqp"]
    }
  }
}

Все хорошо, но Graphite не умеет рисовать метрики. Это журнал со стороны Graphite:

13/06/2016 18:57:16 :: New AMQP connection made

А это от rabbitMQ на стороне сервера Sensu:

=INFO REPORT==== 13-Jun-2016::15:57:16 ===
accepting AMQP connection <0.25298.0> (10.0.3.95:43722 -> 10.0.3.16:5672)

=ERROR REPORT==== 13-Jun-2016::15:57:16 ===
Channel error on connection <0.25298.0> (10.0.3.95:43722 -> 10.0.3.16:5672, vhost: '/sensu', user: 'sensu'), channel 1:
operation exchange.declare caused a channel exception precondition_failed: "inequivalent arg 'durable' for exchange 'metrics_my' in vhost '/sensu': received 'true' but current is 'false'"

Почему rabbitMQ считает, что «долговечный»: установлен в «ложь», когда Sensu должен установить для него значение «истина»?

Кто-нибудь может поделиться собственным опытом с такой логикой?

PS. Конфигурация только с обработчиком tcp у меня работает нормально.


person ipeacocks    schedule 13.06.2016    source источник


Ответы (1)


operation exchange.declare caused a channel exception precondition_failed: "inequivalent arg 'durable' for exchange 'metrics_my' in vhost '/sensu': received 'true' but current is 'false'"

Биржа metrics_my уже существует, и для ее свойства durable установлено значение false. Какой-то другой процесс теперь пытается повторно объявить тот же самый обмен с другим значением для прочного (true).

Похоже, что когда процессы запускаются, они пытаются настроить RabbitMQ, используя указанную вами конфигурацию, чтобы убедиться, что необходимые обмены и очереди существуют.

Однако RabbitMQ не позволяет изменять некоторые свойства обменов и очередей после того, как они были созданы, поэтому один из процессов запускается, пытаясь убедиться, что обмен существует, но терпит неудачу, поскольку указывает другое значение для устойчивого свойства, чем что это уже есть.

Я предполагаю, что углерод и сенсу были настроены так, чтобы иметь разное значение долговечности для обмена metrics_my.

Основываясь на предоставленных вами фрагментах конфигурации, я не вижу возможности изменить свойство долговечности для углерода, но вы можете изменить его для sensu.

Вам нужно заставить всех договориться о том, какой долбаный должен быть, удалить обмен (если долбаный будет другой) и все перезапустить.

PS: свойство durable указывает, что обмен должен сохраняться на диске и выдерживать перезапуски процесса RabbitMQ.

person Emma    schedule 17.07.2016