无法从 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 restartsudo 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 上运行的服务?

无法从远程访问 docker 端口

如何在 ECS 代理容器上设置 docker 标签?

使用 *** 从 Docker 容器内访问专用网络中的资源

无法从我的 Docker 容器内部连接到主机的 localhost

docker容器跑起mysql后,在宿主机无法进去mysql?