Datadog 计数指标因多个容器而下降

Datadog count metric dropping with multiple containers

我正在 python 中递增 Datadog 计数器:

from datadog import initialize
from datadog import ThreadStats
stats.increment('api.request_count', tags=['environment:' + environment])

并在指标的元数据中将指标类型设置为 "count",并将单位设置为 "requests per none"。

代码在 Google 云中容器引擎中的 kubernetes 节点上的 docker 容器中运行...我有 docker-dd-agent(https://github.com/DataDog/docker-dd-agent) 运行 在每个节点上。

我可以将容器移动到任何节点,它每分钟记录大约 200 个请求。但是一旦我扩大规模并启动第二个容器,它每分钟只记录大约 100 个请求。如果我再次缩小到一个容器,它再次飙升至 200 rpm:

什么可能导致请求被其他 pods 丢弃或覆盖?

为什么不使用 dogstatsd 而不是 threadstats?如果您已经 运行 节点上的 dd-agent 以容器可以访问的方式,您可以使用 datadog.statsd.increment() 方法而不是通过 statsd 将指标发送到代理,然后从那里它会被转发到您的 datadog 帐户。

Dogstatsd 的优点是更直接,更容易解决问题,至少在调试级日志记录方面是这样。 Threadstats 有时具有不需要 dd-agent 的好处,但它做的错误记录很少(如果有的话),因此很难对此类情况进行故障排除。

如果您选择了 dogstatsd 路线,您将使用以下代码:

from datadog import initialize
from datadog import statsd
statsd.increment('api.request_count', tags=['environment:' + environment])

然后您会从那里找到具有 "rate" 类型和间隔“10”的指标元数据,并且您可以使用 "as_count" 函数将值转换为计数。

在 python 脚本中,我使用 api 键进行初始化:

from datadog import api
from datadog import initialize
from datadog import statsd
options = {
    'api_key':'#######'
}

initialize(**options)

并发送一些事件

api.Event.create(title=title, text=text, tags=tags)

当我将其更改为这样初始化时,它开始与 dd-agent 一起工作:

initialize(statsd_use_default_route=True)

我不需要 link 命令 (--link dogstatsd:dogstastd)。

通过该设置,它现在可以在暂存环境中运行,但不能在生产环境中运行。 :/