json日志记录中的Fluentd时间字段处理

json日志记录中的Fluentd时间字段处理,json,time,kubernetes,kibana,fluentd,Json,Time,Kubernetes,Kibana,Fluentd,我在GKE集群中有标准的EFK堆栈设置。我确实将测试gunicorn服务切换为json格式。能够通过kibana中的json字段值搜索服务日志。我使用以下命令在pods控制台中正确输出所有日志: kubectl logs pod/dev-django-rest-service-678964c7f5-kh4k4 -n django-rest-service {"bla": "bla-value", "REFERRER": null, "HOST": "api.myhost.com", "req_

我在GKE集群中有标准的EFK堆栈设置。我确实将测试gunicorn服务切换为json格式。能够通过kibana中的json字段值搜索服务日志。我使用以下命令在pods控制台中正确输出所有日志:

kubectl logs pod/dev-django-rest-service-678964c7f5-kh4k4 -n django-rest-service

{"bla": "bla-value", "REFERRER": null, "HOST": "api.myhost.com", "req_id": "4e845383a6ddbc2781919420b1ecb4fe", "message": "Test message", "time": "2019-12-06T11:25:21.635692"}

但kibana没有显示这些信息。我没有看到fluentd pods报告任何解析错误。 在我将服务消息格式转换为json之前,所有消息都显示在kibana中。 我还向我的服务添加了一些处理程序,只是为了将一些文本而不是JSON输出到pods控制台。它在我的kibana中正确地显示出来

SAY: Hello Word!
{"bla": "bla-value", "REFERRER": null, "HOST": "api.myhost.com", "req_id": "c7123f4419656c9effd40410aac43e51", "message": "Test message", "time": "2019-12-06T19:09:09.378297"}
说:你好,字在kibana中正确显示,但json消息不正确。请帮助查找忽略json消息的原因

---编辑---

我确实创建了过滤器

    <filter kubernetes.var.log.containers.dev-django-rest-service**.log>
      @type stdout
    </filter>

实际上,当json日志记录包含时间字段且格式不正确时,fluentd会将日志记录时间替换为历元开始时间1970-01-01。所以,当你在kibana中按最后15分钟日志过滤器时,你将永远看不到这些记录。我在fluentd文档中没有发现任何关于这一点的提及。这是用标准滤波器的实验方法发现的。我用的是fluentd helm套装。当我在这里更改时间格式时 因此,请看:

      <parse>
        @type multi_format
        <pattern>
          format json
          time_key time
          time_format %Y-%m-%dT%H:%M:%S.%N %Z
        </pattern>
        <pattern>
          format none
        </pattern>
      </parse>

从我的gunicorn日志记录开始显示正确的时间

实际上,当json日志记录包含时间字段且格式不正确时,fluentd会将日志记录时间替换为历元开始时间1970-01-01。所以,当你在kibana中按最后15分钟日志过滤器时,你将永远看不到这些记录。我在fluentd文档中没有发现任何关于这一点的提及。这是用标准滤波器的实验方法发现的。我用的是fluentd helm套装。当我在这里更改时间格式时 因此,请看:

      <parse>
        @type multi_format
        <pattern>
          format json
          time_key time
          time_format %Y-%m-%dT%H:%M:%S.%N %Z
        </pattern>
        <pattern>
          format none
        </pattern>
      </parse>
从我的gunicorn日志记录开始显示正确的时间

record['time']=timezone.now().strftime('%Y-%m-%dT%H:%M:%S.%f000 %Z')