Telegraf守护程序没有从Dokku部署的应用程序接收指标
过去我已经使用Telegraf + InfluxDB + Grafana监控过NodeJS应用程序,但这是我第一次尝试监控Dokku应用程序,目前为止还没有成功。
我有以下设置
app server monitoring serveur - telegraf daemon (listening on udp 8125) ------> InfluxDB + Grafana - dokku - myapp : sending metrics on localhost:udp:8125
我有这个问题,从udp://localhost:8125
myapp
发送的度量标准不被telegraf
接收。
从telegraf到influxdb和grafana的连接是好的,因为我在应用程序服务器上运行了以下命令:
echo "foobar:1|c" | nc -u -w0 127.0.0.1 8125
我可以在Grafana里面看到foobar
counter增量。
所以我猜这个问题是由于myapp
或我如何configurationDokku。
在myapp(一个节点的JS应用程序),我使用热镜头包发送指标(也尝试与l without没有成功)。
这是我用于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]: > 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 $
所以看来,指标有效载荷在正确的端口上正确发送,但它永远不会到达telegraf。
- 在Dokku中有任何configuration要授权外部UDP请求到本地主机?
- 我能做些什么来进一步debugging呢?
正如作者在另一个主题中所要求的,解决scheme似乎是:
默认情况下,docker容器可以调用主机的localhost UDP吗?
只有当您想要收听没有发送的请求时才需要打开端口。 默认情况下,Docker为容器提供必要的networking名称空间,以便与主机或外部世界进行通信。
所以,你可以用两种方法做到这一点:
-
在你的
--net host
docker run
使用--net host
,并发送请求到localhost:8125
在这种情况下,你的集装箱化的应用程序是有效地共享主机的networking堆栈。 所以本地主机指向已经在主机上运行的守护进程。 -
与容器networking网关(通常是
172.17.0.1
)或您的主机的主机名称对话。 然后你可以发送数据包到你的主机的守护进程。
- 我的AJAX代码(将Firebase令牌发送到服务器)有什么问题?
- 带有Post方法和enctype Multipart / form-data的表单没有在Nodejs Express multer模块上提交