我有一个 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 没有选择它。
谢谢!
kubernetes 特定的答案...
我有一个类似的问题,我终于解决了。我认为您也可以根据您的情况调整此解决方案。
nginx-ingress-controller,而不是
nginx
。两者均受 Datadog 支持。文档指出您应该在 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
):
另一种方法是在 docker-compose 服务上设置以下标签:
labels:
com.datadoghq.ad.logs: '[{"service":"my-service","source":"my-source"}]'