[英]Parsing k8s docker container json log correctly with Filebeat 7.9.3
我正在使用 Filebeat 7.9.3 作为 k8s 上的守护进程。 我无法解析 Springboot 应用程序的 docker 容器日志,该应用程序将日志写入 json 中的 stdout。 事实上,Springboot 应用程序日志的每一行都是这样写的:
{ "@timestamp": "2020-11-16T13:39:57.760Z", "log.level": "INFO", "message": "Checking comment 'se' done = true", "service.name": "conduit-be-moderator", "event.dataset": "conduit-be-moderator.log", "process.thread.name": "http-nio-8081-exec-2", "log.logger": "it.koopa.app.ModeratorController", "transaction.id": "1ed5c62964ff0cc2", "trace.id": "20b4b28a3817c9494a91de8720522972"}
但是/var/log/containers/下对应的docker日志文件是这样写日志的:
{
"log": "{\"@timestamp\":\"2020-11-16T11:27:32.273Z\", \"log.level\": \"INFO\", \"message\":\"Checking comment 'a'\", \"service.name\":\"conduit-be-moderator\",\"event.dataset\":\"conduit-be-moderator.log\",\"process.thread.name\":\"http-nio-8081-exec-4\",\"log.logger\":\"it.koopa.app.ModeratorController\",\"transaction.id\":\"9d3ad972dba65117\",\"trace.id\":\"8373edba92808d5e838e07c7f34af6c7\"}\n",
"stream": "stdout",
"time": "2020-11-16T11:27:32.274816903Z"
}
我总是在 filebeat 日志上收到这个
Error decoding JSON: json: cannot unmarshal number into Go value of type map[string]interface {}
这是我的 filebeat 配置,它尝试解析来自 docker 日志的 json 日志消息,我正在使用 decode_json_fields 尝试捕获 Elasticsearch 标准字段(我正在使用co.elastic.logging.logback.EcsEncoder )
filebeat.yml: |-
filebeat.inputs:
- type: container
#json.keys_under_root: true
json.overwrite_keys: true
json.add_error_key: true
json.message_key: log
paths:
- /var/log/containers/*.log
include_lines: "conduit-be-moderator"
processors:
- decode_json_fields:
fields: ["log"]
overwrite_keys: true
- add_kubernetes_metadata:
host: ${NODE_NAME}
in_cluster: true
matchers:
- logs_path:
logs_path: "/var/log/containers/"
processors:
- add_cloud_metadata:
- add_host_metadata:
我怎样才能做到这一点???
由于处理器在输入的 JSON 解析器之前应用,您需要首先配置decode_json_fields
处理器,这将允许您解码 json.log 字段。 然后,您将能够对message
字段的输入应用 json 配置。 就像是:
filebeat.yml: |-
filebeat.inputs:
- type: container
json.keys_under_root: true
json.overwrite_keys: true
json.add_error_key: true
json.message_key: message
paths:
- /var/log/containers/*.log
include_lines: "conduit-be-moderator"
processors:
- decode_json_fields:
fields: ['log']
expand_keys: true
- add_kubernetes_metadata:
host: ${NODE_NAME}
in_cluster: true
matchers:
- logs_path:
logs_path: "/var/log/containers/"
processors:
- add_cloud_metadata:
- add_host_metadata:
此配置假定您的所有日志都使用 JSON 格式。 否则,您可能需要添加排除或包含正则表达式模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.