在发送到 elasticsearch 之前向字段添加额外的值
Add extra value to field before sending to elasticsearch
我正在使用 logstash、filebeat 和 grok 将数据从日志发送到我的 elastisearch 实例。这是管道中的 grok 配置
filter {
grok {
match => {
"message" => "%{SYSLOGTIMESTAMP:messageDate} %{GREEDYDATA:messagge}"
}
}
}
这很好用,问题是 messageDate
采用这种格式 Jan 15 11:18:25
并且没有年份条目。
现在,我实际上知道这些文件是在哪一年创建的,我想知道是否可以在此过程中将值添加到该字段,也就是说,在发送到之前以某种方式将 Jan 15 11:18:25
变成 2016 Jan 15 11:18:25
elasticsearch(显然没有编辑文件,我可以轻松地做到这一点,但它只是对我必须做的事情的临时修复,而不是最终的解决方案)
如果可能的话,我尝试过谷歌搜索,但没有成功...
瓦勒普,
修改字段数据的唯一方法是使用 ruby 过滤器:
filter {
ruby {
code => "#your code here#"
}
}
有关...如何获取、设置字段值等更多信息,请点击此处 link:
https://www.elastic.co/guide/en/logstash/current/plugins-filters-ruby.html
如果你有一个单独的字符串日期字段,你可以使用 logstash 日期插件:
https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html
如果您没有将它作为单独的字段(如本例),请使用此站点构建您自己的 grok 模式:
我做这个是为了预处理值:
%{YEAR:yearVal} %{MONTH:monthVal} %{NUMBER:dayVal} %{TIME:timeVal} %{GREEDYDATA:message}
我猜这不是最优雅的,但你会得到不同领域的价值。使用它,您可以创建自己的日期字段并使用日期过滤器对其进行解析,以便获得可比较的值,或者您可以自己使用这些字段。我确信有更好的解决方案,例如您可以制作自己的 grok 模式并使用它,但我也会为您留下一些探索。 :)
通过通读 grok 文档,我发现了 google 对我来说找不到的东西,而且我第一次阅读该页面时显然错过了
使用 add_field
和 remove_field
选项我设法将年份添加到我的日期,然后我使用日期插件将其作为时间戳发送到 logstash。我的过滤器配置现在看起来像这样
filter {
grok {
match => {
"message" => "%{SYSLOGTIMESTAMP:tMessageDate} %{GREEDYDATA:messagge}"
add_field => { "messageDate" => "2016 %{tMessageDate}" }
remove_field => ["tMessageDate"]
}
}
date {
match => [ "messageDate", "YYYY MMM dd HH:mm:ss"]
}
}
而且效果很好
我正在使用 logstash、filebeat 和 grok 将数据从日志发送到我的 elastisearch 实例。这是管道中的 grok 配置
filter {
grok {
match => {
"message" => "%{SYSLOGTIMESTAMP:messageDate} %{GREEDYDATA:messagge}"
}
}
}
这很好用,问题是 messageDate
采用这种格式 Jan 15 11:18:25
并且没有年份条目。
现在,我实际上知道这些文件是在哪一年创建的,我想知道是否可以在此过程中将值添加到该字段,也就是说,在发送到之前以某种方式将 Jan 15 11:18:25
变成 2016 Jan 15 11:18:25
elasticsearch(显然没有编辑文件,我可以轻松地做到这一点,但它只是对我必须做的事情的临时修复,而不是最终的解决方案)
如果可能的话,我尝试过谷歌搜索,但没有成功...
瓦勒普,
修改字段数据的唯一方法是使用 ruby 过滤器:
filter {
ruby {
code => "#your code here#"
}
}
有关...如何获取、设置字段值等更多信息,请点击此处 link:
https://www.elastic.co/guide/en/logstash/current/plugins-filters-ruby.html
如果你有一个单独的字符串日期字段,你可以使用 logstash 日期插件:
https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html
如果您没有将它作为单独的字段(如本例),请使用此站点构建您自己的 grok 模式:
我做这个是为了预处理值:
%{YEAR:yearVal} %{MONTH:monthVal} %{NUMBER:dayVal} %{TIME:timeVal} %{GREEDYDATA:message}
我猜这不是最优雅的,但你会得到不同领域的价值。使用它,您可以创建自己的日期字段并使用日期过滤器对其进行解析,以便获得可比较的值,或者您可以自己使用这些字段。我确信有更好的解决方案,例如您可以制作自己的 grok 模式并使用它,但我也会为您留下一些探索。 :)
通过通读 grok 文档,我发现了 google 对我来说找不到的东西,而且我第一次阅读该页面时显然错过了
使用 add_field
和 remove_field
选项我设法将年份添加到我的日期,然后我使用日期插件将其作为时间戳发送到 logstash。我的过滤器配置现在看起来像这样
filter {
grok {
match => {
"message" => "%{SYSLOGTIMESTAMP:tMessageDate} %{GREEDYDATA:messagge}"
add_field => { "messageDate" => "2016 %{tMessageDate}" }
remove_field => ["tMessageDate"]
}
}
date {
match => [ "messageDate", "YYYY MMM dd HH:mm:ss"]
}
}
而且效果很好