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 restart
或sudo service datadog-agent restart
non_local_traffic: yes
-dd-agent映像默认启用non_local_traffic: yes
。
如果dd-agent
在localhost
侦听,它只能从本地主机(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 。