2017-05-06 4 views
2

これまでTelegraph + InfluxDB + GrafanaでNodeJSアプリを監視していましたが、これまではDokkuアプリを監視しようとしています。TelegrafデーモンがDokkuと一緒にデプロイされたアプリケーションからメトリックを受信しない

私はudp://localhost:8125myappから送信されたメトリックはtelegrafによって受信されない問題を持って次のセットアップ

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

を持っています。 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はコンテナがホストまたは外部に通信するために必要なネットワークネームスペースを提供します。

ので、次の2つの方法でそれを行うことができます:

  1. あなたは、コンテナアプリが効果的にホストのネットワークスタックを共有しているあなたのdocker run--net hostを使用し、この場合にはlocalhost:8125に要求を送信します。したがって、localhostはあなたのホストですでに動作しているデーモンを指しています。

  2. コンテナネットワークゲートウェイ(通常は172.17.0.1)またはコンテナのホストのホスト名と対話します。それであなたのホストのあなたのデーモンにパケットを送ることができます。

関連する問題