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

我在Amazon linux ec2上安装了dd-agent。 如果我直接在主机上运行我的python脚本(我使用了名为“dogstatsd-python”的SDK),所有的指标都可以发送到datadog(我login到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 …..

我猜测,也许这是由于一些configuration问题,如“地址绑定”。 也许我在主机上安装的dd-agent只能从“localhost”接收指标。

希望有人能帮助我。 先谢谢你。

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

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

non_local_traffic: yes -dd-agent映像默认启用non_local_traffic: yes

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

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

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

statsd.connect(DOGSTATSD_PORT_8125_UDP_ADDR, DOGSTATSD_PORT_8125_UDP_PORT)

这应该够了吧。 如果没有,您应该能够在Datadog文档的这一部分find与您的问题相关的信息。

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