elasticsearch - 从日期时间字段的一部分创建新字段

标签 elasticsearch logstash kibana

我有一个logstash管道,该管道从apache日志条目中提取日期并将其保存在新字段中:

date {
  match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  target => "@apache_timestamp"
}

我还希望能够将此日期的某些部分提取到单独的字段中,以获取某些特定的报告。

我尝试在日志的新日期字段上使用date插件:
date {
  match => ["@apache_timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  add_field => {"[hourOfDay]" => "%{+HH}"}
  add_field => {"[dayOfWeek]" => "%{+EEE}"}
  add_field => {"[weekOfYear]" => "%{+ww}"}
  add_field => {"[monthName]" => "%{+MMMM}"}
  add_field => {"[year]" => "%{+yyyy}"}
}

但这似乎没有添加任何新字段。

我也尝试过直接在消息上使用grok插件:
grok {
  match => { "message" => ["%{HTTPDATE}"] }
  add_field => {"[hourOfDay]" => "%{HOUR}"}
  add_field => {"[monthName]" => "%{MONTH}"}
  add_field => {"[year]" => "%{YEAR}"}
}

这会添加字段,但是它们具有文字值%{HOUR}%{MONTH}等。

如何从Apache时间戳中提取“星期几”和“一年中的星期”之类的字段?

(我可以使用Kibana的脚本字段提取所需的值,但是它们看起来很慢,并且Kibana无法查询脚本字段,所以这不是一个很好的解决方案。)

使用Logstash 6.0

最佳答案

我不知道您使用的具体时间格式,因此我用apache时间戳进行了搜索,发现了这一点:

[Wed Oct 11 14:32:52 2000]

我去了这个地方:
http://grokconstructor.appspot.com/do/match#result
并使用此grok模式:
%{DAY:day} %{MONTH:month} %{NUMBER:year} %{NUMBER:hour}:%{NUMBER:minute}:%{NUMBER:second} %{NUMBER:millisecond}

使用grok match字段应该在您的记录中生成新字段,因此不需要add_field。请记住,grok模式匹配在特殊字符周围可能很棘手,这就是我尝试将方括号省略的原因,它对我有用。
同样不要忘记,测试人员站点明确要求不要使用引号,但是您仍然需要在配置文件中使用引号。

关于elasticsearch - 从日期时间字段的一部分创建新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48197451/

相关文章:

elasticsearch - elasticsearch 节点上的高 CPU 使用率

java - Elasticsearch:比较日期(无痛脚本)

elasticsearch - 如何在Logstash中使用新数据更新索引?

elasticsearch - Elasticsearch - 查找具有冲突字段类型的文档

elasticsearch - Elasticsearch修改asiifolding

elasticsearch - 基于索引名称的Elasticsearch索引生命周期管理

elasticsearch - Logstash 未更新上次运行的元数据文件

logstash - 为什么 Kibana 中的 *.raw 字段为空?

.net - Serilog Elasticsearch 日志未发送到服务器(但缓冲正确)

elasticsearch - Kibana 上未分析的字段