首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Filebeat 7.9.3正确解析k8s docker容器json日志

使用Filebeat 7.9.3正确解析k8s docker容器json日志
EN

Stack Overflow用户
提问于 2020-11-16 22:47:34
回答 1查看 634关注 0票数 0

我正在使用Filebeat 7.9.3作为k8s上的守护进程。我无法解析Springboot应用程序的docker容器日志,该应用程序将日志写入json中的stdout。事实上,Springboot应用程序日志的每一行都是这样写的:

代码语言:javascript
运行
复制
{ "@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日志文件是这样写日志的:

代码语言:javascript
运行
复制
{
"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" 
} 

我总是在文件节拍日志中收到此消息

代码语言:javascript
运行
复制
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)

代码语言:javascript
运行
复制
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:

我该怎么做?

EN

回答 1

Stack Overflow用户

发布于 2021-06-12 01:39:09

由于处理器是在输入的JSON解析器之前应用的,因此您需要首先配置允许您对json.log字段进行解码的decode_json_fields处理器。然后,您将能够对message字段上的输入应用json配置。类似于:

代码语言:javascript
运行
复制
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格式。否则,您可能需要添加排除或包含正则表达式模式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64860153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档