【问题标题】:Logstash filter timestamp from log message来自日志消息的 Logstash 过滤器时间戳
【发布时间】:2014-05-19 14:37:02
【问题描述】:

我一直在关注 Logstash 教程,并为测试目的创建了以下配置文件:

input {
  file {
    path => "C:\Dev\sample.log"
    start_position => beginning
  }
}
filter{
    date {
        match => [ "logdate", "YYYY-MM-dd HH:mm:ss,SSS" ]
    }
}
output {
  elasticsearch { host => localhost
                  index => "test"
                }
  stdout { codec => rubydebug }
}

但是,唯一输出的字段是 “信息”, “@版本”, "@timestamp", “主机”和 “路径”。

没有检索到“日志日期”。我已经搜索了一段时间,发现人们在给出错误的日期格式时遇到了同样的问题,但我按照 Logstash 教程的建议使用“Joda-Time”检查了我的问题。感谢您的帮助。

【问题讨论】:

    标签: logging elasticsearch timestamp logstash


    【解决方案1】:

    通过执行以下操作,我设法获得了我想要的结果:

        input {
      file {
        path => "C:\Dev\sample.log"
        start_position => beginning
      }
    }
    filter{
        grok {
           match => [ "message", "%{TIMESTAMP_ISO8601:logdate}" ]
        }       
        date {
            match => [ "logdate", "YYYY-MM-dd HH:mm:ss,SSS"]
        }
    }
    output {
      elasticsearch { host => localhost
                      index => "test"
                    }
      stdout { codec => rubydebug }
    }
    

    所以,这可能是我的问题的答案,我希望它也可以帮助陷入困境的人。但是我仍然不明白为什么我之前的示例(在问题中)没有给我(我认为是)正确的输出?如果有人能给我一些解释,我将不胜感激。非常感谢!

    【讨论】:

      【解决方案2】:

      首先我需要说我只是logstash的新手,但我的理解如下:

      在日期过滤器中,匹配是一个有点令人困惑的术语。它在单词的正则表达式意义上不匹配,它解析一个字符串并将其转换为日期。它只是查看一个字符串并说“第一个字符是年份的第一个数字”等。它不做的是在另一个字符串中找到指定格式的字符串(在您的情况下是整个消息)。这就是 grok 的工作。

      总而言之,grok 找到一个看起来像日期的字符串,然后日期过滤器将字符串转换为日期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-09
        • 1970-01-01
        • 1970-01-01
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多