首页 > 解决方案 > Fluentd 带有 Syslog 的无效时间格式

问题描述

我正在尝试使用 Bindplane 将 Java 开发人员创建的“系统日志”上传到 Google 的 Stackdriver。Bindplane 是基于 fluentd 构建的。

我正在使用tail的源类型。Bindplane 能够读取日志文件并将其推送到 Stackdriver,但它始终在 JSON 消息的正文中附加以下错误:

 error: "invalid time format: value = 2019-10-21 16:52:29.588 EDT, error_class = ArgumentError, error = invalid strptime format - `%Y-%m-%d %H:%M:%S.%L%z'"

日志显示的格式与大多数 syslog 格式略有不同:

2019-10-21 13:15:02.439 EDT main TRACE Processor.init()

这就是我在流利的配置中所拥有的:

<source>
  @type tail
  path C:/Test/Connect_Test/Log/**TestDL**.txt
  pos_file C:/BlueMedora/BindplaneLogAgent/config/449c6ffb-1a29-4172-9058-e19de236d712.tail.log.pos
  tag 449c6ffb-1a29-4172-9058-e19de236d712.1st_auto_policy
  format syslog
  time_format %Y-%m-%d %H:%M:%S.%L%z
</source>

有没有办法在不更改日志的情况下避免此错误?由于类/方法属于另一个开发人员,我无法更改日志的编写方式。

谢谢你的帮助!

标签: syslogfluentdstackdriver

解决方案


埃迪——

我为 Blue Medora 工作,BindPlane 是我们的产品。这应该可以解决您的问题,如果没有,请告诉我们,我们可以帮助您正确配置它。

尝试time_format %Y-%m-%d %H:%M:%S.%L %Z

  1. 小写的 z 表示“时区作为与 UTC 的小时偏移量”(例如 +0400)
  2. 大写 Z 代表“时区名称”,它看起来就像您在日志文件中的名称。
  3. 看起来毫秒和时区之间也有一个空格。所以也应该增加空间。

这是有关 strptime() 选项的文档的链接,显示了 %z 和 %Z 之间的区别

同样,如果这对您不起作用,请告诉我们。


推荐阅读