无法从 docker 容器内部访问 datadog 代理
Posted
技术标签:
【中文标题】无法从 docker 容器内部访问 datadog 代理【英文标题】:datadog agent not reachable from inside docker container 【发布时间】:2016-05-08 18:14:18 【问题描述】:我在 Amazon linux ec2 上安装了 dd-agent。如果我直接在主机上运行我的 python 脚本(我使用名为“dogstatsd-python”的 SDK),所有指标都可以发送到 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”接收指标。
希望有人可以帮助我。先感谢您。
【问题讨论】:
你找到解决办法了吗?我设置了non_local_traffic: yes
,但它似乎不起作用。
【参考方案1】:
如果dd-agent
监听localhost
,它只能从本地主机(127.0.0.1)接收数据。尝试将dd-agent
主机更改为0.0.0.0
而不是localhost
。
我们正在使用 docker-dd-agent,它可以 OOTB。
【讨论】:
谢谢!我在 /etc/dd-agent/datadog.conf 中将“bind_host”从“localhost”更改为“0.0.0.0”。并重新启动 dd-agent。但是问题依然存在.....还有什么需要改的吗? 是的,我知道 dd-agent docker 镜像。但出于某种原因,我们尽量避免使用它。【参考方案2】:您需要在/etc/dd-agent/datadog.conf
文件中设置non_local_traffic: yes
。否则代理将拒绝来自容器的指标。
设置后需要重启代理才能生效:sudo /etc/init.d/datadog-agent restart
或sudo service datadog-agent restart
docker-dd-agent 图像默认启用non_local_traffic: yes
。
【讨论】:
在最新版本中,文件是/etc/datadog-agent/datadog.conf,而不是dd-agent。 这正是我们所需要的。我的设置:主机上的 OS Windows server 2016 datadog 代理。窗户容器。将详细信息留给可能需要的其他人。 我在 Docker 中运行了它,对我来说,让它工作的最简单方法是使用环境变量 DD_DOGSTATSD_NON_LOCAL_TRAFFIC=True。另请参阅docs.datadoghq.com/agent/docker/…。【参考方案3】:在这种情况下,您实际上并不想使用主机的 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。
【讨论】:
以上是关于无法从 docker 容器内部访问 datadog 代理的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Docker 容器内部访问在 WSL2 上运行的服务?