运行 docker 容器时如何覆盖 DataDog 中的“源”?

问题描述 投票:0回答:2

我有一个 docker-compose 文件,在其中运行多个容器,包括 DataDog 代理。 一切工作正常,除了 DataDog 在将容器日志发送到 DataDog 时选择的“源”之外。

例如,如果我使用官方的 Nginx 镜像,由于 docker 镜像名为“nginx”,则默认选择 datadog 源为“nginx”,使用 Nginx DataDog 管道来解析日志。

但是,如果我使用名为“my-account/hello-world”的 Docker 映像,则 DataDog 默认选择源为“hello-world”。如果我的图像受到 Nginx 的启发,并以“nginx 格式”报告日志,我希望能够将 DataDog 源更改为“nginx”,以便 DataDog 可以默认拾取 Nginx 日志管道。

我怎样才能实现这个目标?

我尝试设置 DD_SOURCE 环境变量,但没有成功,DataDog 仍然选择图像名称作为“源”。我也尝试将源设置为标签(DD_TAGS=source:nginx),但 DataDog 没有选择它。

谢谢!

docker-compose datadog
2个回答
3
投票

kubernetes 特定的答案...

我有一个类似的问题,我终于解决了。我认为您也可以根据您的情况调整此解决方案。

文档指出您应该在 k8s 清单文件中使用此格式:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    ad.datadoghq.com/<CONTAINER_IDENTIFIER>.logs: '[<LOG_CONFIG>]'
spec:
  containers:
    - name: '<CONTAINER_IDENTIFIER>'

由于 nginx-ingress-controller 默认为容器名称

controller
我将其用作
<CONTAINER_IDENTIFIER>
:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    ad.datadoghq.com/controller.logs: '[<LOG_CONFIG>]'
spec:
  containers:
    - name: 'controller'

我的工作最终配置包括

<LOG_CONFIG>
并使用
Deployment
而不是
Pod
,为了更现实,看起来像这样:

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    metadata:
      annotations:
        ad.datadoghq.com/controller.logs: |
          [{"service": "controller", "source": "nginx-ingress-controller"}]
    spec:
      containers:
        - name: controller

可能值得注意的是,如果日志配置周围没有数组大括号

[]
,日志将根本不会被摄取。

Datadog 现在自动知道如何解析日志(之前说过

controller
):


1
投票

另一种方法是在 docker-compose 服务上设置以下标签:

 labels:
   com.datadoghq.ad.logs: '[{"service":"my-service","source":"my-source"}]'
© www.soinside.com 2019 - 2024. All rights reserved.