无法从docker容器内部访问datadog代理程序

时间:2016-01-31 06:44:06

标签: amazon-ec2 docker localhost statsd datadog

我在Amazon linux ec2上安装了dd-agent。如果我直接在主机上运行我的python脚本(我使用名为&#34的SDK; dogstatsd-python"),所有指标都可以发送到datadog(我登录到datadoghq.com并看到那里的指标)。 脚本类似于:

from statsd import statsd
statsd.connect('localhost', 8125)
statsd.increment('mymetrics')

但是,我启动了一个docker容器并从容器内部运行相同的脚本:

from statsd import statsd
statsd.connect('172.14.0.1', 8125)
statsd.increment('my metrics')

' 172.14.0.1'是主机的IP,使用命令

提取
netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}'

根本没有将指标发送到datadog .....

我猜这可能是由于某些配置问题,例如"地址绑定"。也许我在主机上安装的dd-agent只能从' localhost'接收指标。

希望有人可以帮助我。先感谢您。

3 个答案:

答案 0 :(得分:11)

您需要在non_local_traffic: yes文件中设置/etc/dd-agent/datadog.conf。否则,代理将拒绝容器中的指标。

设置完成后,您需要重新启动代理才能使更改生效:sudo /etc/init.d/datadog-agent restartsudo service datadog-agent restart

docker-dd-agent图片默认启用non_local_traffic: yes

答案 1 :(得分:3)

如果dd-agent侦听localhost,它只能从localhost(127.0.0.1)接收数据。尝试将dd-agent主机更改为0.0.0.0而不是localhost

我们正在使用docker-dd-agent,它可以正常工作。

答案 2 :(得分:0)

在这种情况下,您实际上并不想使用主机的IP。如果您正在运行docker dd-agent,则可以使用两个环境变量:

statsd.connect(DOGSTATSD_PORT_8125_UDP_ADDR, DOGSTATSD_PORT_8125_UDP_PORT)

这应该可以解决问题。如果没有,您应该可以在this section of the Datadog docs中找到问题的相关信息。

另外,我应该指出Datadog在其文档中显示的唯一Python库是datadogpy