2017-05-06 52 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 

我還沒有被telegraf收到來自myapp發送上udp://localhost:8125指標的問題。

從telegraf的連通influxdb和grafana是好的,因爲我跑的應用服務器上運行以下命令:

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

我可以想象裏面Grafana的foobar計數器增量。

所以我猜這個問題是由於myapp或我如何配置Dokku。

在myapp(一個節點JS應用程序)中,我使用hot-shots包發送指標(也嘗試使用lynx而沒有成功)。

這是我用來instanciate 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。

  • 在Dokku中是否有任何配置要授權外部UDP請求到本地主機?
  • 我能做些什麼來進一步調試呢?

回答

2

正如在另一個線程請求筆者的解決方案似乎是:

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

打開端口只有當你要聽不發送的請求所需。默認情況下,Docker爲您的容器提供必要的網絡名稱空間,以便與主機或外部世界進行通信。

所以,你能做到這一點有兩種方式:

  1. 使用--net hostdocker run和發送在這種情況下請求localhost:8125你集裝箱的應用有效地共享主機的網絡堆棧。所以本地主機指向已經在主機上運行的守護進程。

  2. 與容器網絡網關(通常爲172.17.0.1)或您的容器中主機的主機名進行通信。然後,您可以將數據包發送到主機中的守護進程。

相關問題