json日志记录中的Fluentd时间字段处理
我在GKE集群中有标准的EFK堆栈设置。我确实将测试gunicorn服务切换为json格式。能够通过kibana中的json字段值搜索服务日志。我使用以下命令在pods控制台中正确输出所有日志: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_
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')