如何在Datadog中排除Kong状态检查日志并保留其他Kong日志
解决Datadog排除Kong状态检查日志的配置问题
问题根源
你遇到的所有Kong日志被排除的问题,主要来自两个配置错误:
- 正则表达式过于严格:你使用的
^GET /status http/2\.0$锚定了整个日志行,但Kong的状态检查日志通常包含时间戳、客户端IP等额外内容(例如[2024-05-20T10:00:00+00:00] 10.0.0.1 GET /status HTTP/2.0 200),不会完全匹配这个正则,反而可能因为转义或解析问题导致规则错误匹配所有日志。 - YAML转义格式错误:使用
"转义双引号会让JSON规则的解析出现异常,导致Datadog Agent无法正确识别规则逻辑。
正确配置方案
调整日志处理规则
修改DD_LOGS_CONFIG_PROCESSING_RULES的配置,做以下优化:
- 去掉正则首尾的
^和$锚点,只匹配日志行中包含的目标请求模式 - 修正大小写,匹配日志中的
HTTP/2.0(而非小写http) - 使用单引号包裹整个JSON规则字符串,避免YAML转义问题
完整的datadog-values.yaml配置
datadog: apiKeyExistingSecret: datadog-secret apm: instrumentation: enabled: true site: datadoghq.eu logs: enabled: true containerCollectAll: true env: - name: DD_CONTAINER_EXCLUDE_LOGS value: image:.* - name: DD_CONTAINER_INCLUDE_LOGS value: image:.*kong.* image:.*alore.* - name: DD_LOGS_CONFIG_PROCESSING_RULES value: '[{ "type": "exclude_at_match", "name": "exclude_healthcheck_logs", "pattern": "GET /status HTTP/2\\.0" }]'
关键说明
- 正则中的
\\.是YAML中的转义写法,确保.被当作普通字符匹配(避免匹配任意字符) - 如果Kong的状态检查日志使用HTTP/1.1或其他版本,可以调整正则为
GET /status HTTP/\\d+\\.\\d+,覆盖所有HTTP版本的状态检查请求 - 若你的Kong日志已经被Datadog解析为结构化日志(包含
http.request.method、http.request.url字段),可以改用字段匹配规则,精度更高:- name: DD_LOGS_CONFIG_PROCESSING_RULES value: '[{ "type": "exclude", "name": "exclude_healthcheck_logs", "filter": { "query": "http.request.method:GET AND http.request.url:/status" } }]'
验证方法
- 应用配置后,重启Datadog Agent:
helm upgrade datadog datadog/datadog -f datadog-values.yaml - 触发Kong的状态检查请求,查看Datadog日志页面,确认只有状态检查日志被排除,其他Kong日志正常收集
内容的提问来源于stack exchange,提问作者Zhakyp Zhoomart uulu
相关产品推荐
相关产品推荐

