【问题标题】:Modify a timezone in Logstash在 Logstash 中修改时区
【发布时间】:2016-03-31 09:13:52
【问题描述】:

我有 logstash 从 MySQL 表中获取数据。数据包含一个时间戳字段,该字段保存在 MySQL DB 的时区中,即 UTC。因此,如果我将“10:27:15”保存为我的应用程序中的时间,则数据库中的行包含“08:27:15Z”,因为我在欧洲/罗马 tz,偏移 2 小时。
当我使用 MySQL 插件将其放入 logstash/es 时,记录再次“取消分区”,并且我的数据包含“06:27:15Z”。
我正在尝试将正确的 TZ 应用于我的数据,以便在 ES 中得到“08:27:15Z”。 我尝试了Convert timestamp timezone in Logstash for output index name,即复制一个字段并再次应用 TZ 重新解析它。
问题是我得到一个“_dateparsefailure”解析
"tztstamp" => "2016-03-31T06:17:47.000Z"
使用
match => ["tztstamp", "ISO8601"]
那是正确的格式。我还尝试了为此目的而构建的其他格式。
服务器使用欧洲/罗马时区运行。 “@timezone”字段会自动填充正确的 UTC 时间(即现在为 2 小时)。
任何想法如何让我的时间正确进入 ES?
要添加“视觉”示例,请在 DB
MySQL 变成
Logstash 如果我什么都不做

【问题讨论】:

    标签: datetime elasticsearch timezone logstash


    【解决方案1】:

    据我了解,logstash 正在使用“欧洲/罗马”时区的机器上运行。 在您的示例中,tstamp (2016-03-31 08:17:47) 字段没有时区信息,因此logstash 认为它在“欧洲/罗马”中。 要让 Logstash 知道正确的 TimeZone,您必须为 date 过滤器指定 timezone 选项:

    date {
        match => [ "tstamp", "yyyy-MM-dd HH:mm:ss"]
        timezone => "UTC"
    }
    

    另外你得到_dateparsefailure,因为tstamp不是ISO8601格式。

    【讨论】:

    • "2016-03-31T06:17:47.000Z" 确实是 ISO8601。截图来自phpmyadmin。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2015-04-23
    相关资源
    最近更新 更多