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

Графитовые метрики из AMQP выдают ошибку, на повторное подключение требуется время

Я пытаюсь перенести некоторые показатели в Graphite через обмен RabbitMQ. Мои издатели весело публикуют данные на бирже под названием metrics, и я настроил carbon.conf со следующим:

ENABLE_AMQP = True
AMQP_HOST = hostname
AMQP_PORT = 5672
AMQP_VHOST = /vhost
AMQP_USER = user
AMQP_PASSWORD = password
AMQP_EXCHANGE = metrics
AMQP_METRIC_NAME_IN_BODY = True

Установка rMQ представляет собой двухузловой кластер за haproxy.

Когда это работает, это работает отлично. Однако довольно часто углерод подбрасывает следующую проблему:

02/05/2013 15:13:14 :: [console] Unhandled error in Deferred:
02/05/2013 15:13:14 :: [console] Unhandled Error
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 421, in errback
    self._startRunCallbacks(fail)
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 488, in _startRunCallbacks
    self._runCallbacks()
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 575, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1126, in gotResult
    _inlineCallbacks(r, g, deferred)
--- <exception caught here> ---
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1068, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/lib/python2.7/dist-packages/twisted/python/failure.py", line 389, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/opt/graphite/lib/carbon/amqp_listener.py", line 70, in connectionMade
    yield self.receive_loop()
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1068, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/lib/python2.7/dist-packages/twisted/python/failure.py", line 389, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/opt/graphite/lib/carbon/amqp_listener.py", line 102, in receive_loop
    msg = yield queue.get()
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 575, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/txamqp/queue.py", line 32, in _raiseIfClosed
    raise Closed()
txamqp.queue.Closed:

02/05/2013 15:13:14 :: [console] <twisted.internet.tcp.Connector instance at 0x2219f80> will retry in 1976 seconds
02/05/2013 15:13:14 :: [console] Stopping factory <carbon.amqp_listener.AMQPReconnectingFactory instance at 0x2214ab8>

Как-то оборвалась связь. Что еще хуже, он хочет переподключиться через полчаса!

Как я

  1. Узнайте, почему он отключается?
  2. Значительно сократить время переподключения?

Программное обеспечение:

txAMQP==0.6.2
graphite 0.9.11
RabbitMQ 3.1.0
Haproxy 1.4.18

Сегодня мы столкнулись с той же проблемой. Я не уверен насчет №1, но я считаю, что вторая проблема заключается в том, что задержка повторного подключения никогда не сбрасывается в amqp_listener.py и должна быть сделана до того, как протокол будет построен в buildProtocol. Я отправил запрос на перенос здесь: https://github.com/graphite-project/carbon/pull/102. Надеюсь это поможет.

До изменения (исключения опущены):

console.log.2013_5_2: 05.02.2013 17:11:14 :: повторит попытку через 2 секунды console.log.2013_5_2: 05.02.2013 17:11:16 :: повторит попытку через 5 секунд console.log. 2013_5_2: 05.02.2013 17:41:18 :: повторит попытку через 12 секунд console.log.2013_5_2: 02/05/2013 18:11:22 :: повторит попытку через 28 секунд console.log.2013_5_2: 02 / 05/2013 18:41:26 :: повторит попытку через 77 секунд console.log.2013_5_2: 02/05/2013 19:11:32 :: повторит попытку через 178 секунд console.log.2013_5_2: 02/05/2013 19 : 41: 39 :: повторит попытку через 455 секунд console.log.2013_5_2: 02/05/2013 20:11:48 :: повторит попытку через 967 секунд console.log.2013_5_2: 02/05/2013 20:42:01 :: повторит попытку через 1831 секунду console.log.2013_5_2: 02/05/2013 21:22:13 :: повторит попытку через 3375 секунд

После изменения (исключения опущены):

console.log.2013_5_2: 02/05/2013 21:42:21 :: повторит попытку через 2 секунды console.log.2013_5_2: 02/05/2013 21:42:24 :: повторит попытку через 9 секунд console.log. 2013_5_2: 05.02.2013 22:12:18 :: повторит попытку через 2 секунды console.log.2013_5_2: 02/05/2013 22:12:21 :: повторит попытку через 9 секунд console.log.2013_5_2: 02 / 05/2013 22:42:32 :: повторит попытку через 2 секунды console.log.2013_5_2: 02/05/2013 22:42:35 :: повторит попытку через 7 секунд console.log.2013_5_2: 02/05/2013 23 : 12: 29 :: повторит попытку через 2 секунды console.log.2013_5_2: 02/05/2013 23:12:32 :: повторит попытку через 5 секунд console.log.2013_5_2: 05.02.2013 23:42:38 :: повторит попытку через 2 секунды console.log.2013_5_2: 02/05/2013 23:42:41 :: повторит попытку через 6 секунд