【问题标题】:datadog agent not reachable from inside docker container无法从 docker 容器内部访问 datadog 代理
【发布时间】: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,但它似乎不起作用。

标签: amazon-ec2 docker localhost statsd datadog


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 1970-01-01
    • 2020-06-05
    • 2019-09-03
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    相关资源
    最近更新 更多