2017-05-06 17 views
2

Telegraf + InfluxDB + Grafana를 사용하여 이전에 NodeJS 응용 프로그램을 이미 모니터링했지만 지금까지 성공하지 못한 채 Dokku 응용 프로그램을 모니터링하려고 시도한 것은 처음입니다.Telegraf 데몬이 Dokku와 함께 배포 된 응용 프로그램의 메트릭을 수신하지 않음

나는 다음 설치

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

내가 메트릭 udp://localhost:8125myapp에서 보낸 문제가 telegraf에 의해 수신되지 않은에게 있습니다. telegraf에서

연결성은 influxdb하고 grafana 괜찮습니다, 내가 응용 프로그램 서버에서 다음 명령을 실행하기 때문에 :

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

그리고 Grafana 내부 foobar 카운터 증가를 시각화 할 수있다.

나는이 문제가 myapp이거나 Doku를 어떻게 구성했는지 추측하고 있습니다.

myapp (노드 JS 앱)에서 hot-shots 패키지를 사용하여 메트릭을 보내고 (성공한 경우 lynx 시도)

이것은 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]: > [email protected] 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 
$ 

그래서는 측정 페이로드가 제대로 올바른 포트에 전송되는 것 같다 다음과 같은 출력을 얻을 수 있지만, telegraf에 도달하지 않습니다.

  • 로컬 호스트에 대한 외부 UDP 요청을 승인하기 위해 Dokku에서 수행 할 구성이 있습니까?
  • 더 자세히 디버깅하려면 어떻게해야합니까? 다른 스레드에서 요청 된 저자로

답변

2

솔루션이 될 것으로 보인다 :

By default, can a docker container call host's localhost UDP?

열기 포트에만 전송하지 요청을 수신 할 때 필요합니다. 기본적으로 Docker는 컨테이너가 호스트 또는 외부 세계와 통신하는 데 필요한 네트워크 네임 스페이스를 제공합니다. 당신의 docker run

  1. 사용 --net host을하고 컨테이너 응용 프로그램이 효율적으로 호스트의 네트워크 스택을 공유하고이 경우 localhost:8125에 요청을 보내

    그래서, 당신은 두 가지 방법으로 그것을 할 수 있습니다. 따라서 localhost는 이미 호스트에서 실행중인 데몬을 가리 킵니다.

  2. 컨테이너 네트워크 게이트웨이 (일반적으로 172.17.0.1) 또는 컨테이너의 호스트 호스트 이름과 대화하십시오. 그러면 호스트의 데몬에 패킷을 보낼 수 있습니다.