Демон Telegraf не получает метрики из приложения, развернутого с помощью Dokku

Я уже наблюдал за приложениями NodeJS в прошлом с Telegraf + InfluxDB + Grafana, но в первый раз я пытаюсь контролировать приложение Dokku без успеха до сих пор.

У меня есть следующая настройка

app server monitoring serveur - telegraf daemon (listening on udp 8125) ------> InfluxDB + Grafana - dokku - myapp : sending metrics on localhost:udp:8125 

У меня проблема, что метрики, отправленные из myapp на udp://localhost:8125 , не получены telegraf .

Связь с telegraf на infuxdb и grafana в порядке, потому что я выполнил следующую команду на сервере приложений:

 echo "foobar:1|c" | nc -u -w0 127.0.0.1 8125 

И я мог визуализировать внутри Grafana прирост счетчика foobar .

Поэтому я предполагаю, что проблема связана с myapp или тем, как я настроил Dokku.

В myapp (приложение узла JS) я использую пакет горячих кадров для отправки показателей (также безуспешно пытался с рысью ).

Это код, который я использую для создания клиента statsd.

 var StatsD = require('hot-shots'); var client = new StatsD(); // Attaching an error handler to client's socket client.socket.on('error', function(error) { console.error('StatsD client error in socket: ', error); }); 

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

 metrics.increment('server_restart', function(err, bytes) { if (err) { console.log(err); } else { console.log('StatsD sent : ', bytes); } }); 

Внутри сервера приложений я запускал dokku logs myapp после выполнения развертывания.

Я получаю следующий вывод

 $ dokku logs myapp 2017-05-06T14:51:19.977938845Z app[web.1]: 2017-05-06T14:51:19.977996938Z app[web.1]: > myapp@1.0.0 start /app 2017-05-06T14:51:19.978002950Z app[web.1]: > node . 2017-05-06T14:51:19.978005766Z app[web.1]: 2017-05-06T14:51:21.849086537Z app[web.1]: StatsD sent : 18 $ 

Таким образом, кажется, что полезная нагрузка метрики правильно отправлена ​​на правый порт, но она никогда не достигает телеграфа.

  • Есть ли какая-либо конфигурация в Dokku для авторизации внешних запросов UDP на localhost?
  • Что я могу сделать, чтобы отладить это дальше?

Как просил автор в другом streamе, решение выглядит следующим образом:

По умолчанию, может ли контейнер-docker вызывать хост-узел localhost UDP?

Открытие портов требуется только тогда, когда вы хотите прослушивать запросы, не отправляемые. По умолчанию Docker предоставляет необходимое сетевое пространство имен для вашего контейнера для связи с хостом или внешним миром.

Таким образом, вы можете сделать это двумя способами:

  1. используйте --net host в --net host вашего docker run и отправляйте запросы на localhost:8125 в этом случае контейнерное приложение эффективно разделяет сетевой стек хоста. Таким образом, localhost указывает на демона, который уже запущен на вашем хосте.

  2. поговорите с сетевым шлюзом контейнера (который обычно 172.17.0.1 ) или именем хоста вашего хоста из вашего контейнера. Затем вы сможете отправлять пакеты вашему демону на своем хосте.