gpt4 book ai didi

elasticsearch - Kibana 4.1 - 使用 JSON 输入从 @timestamp 为直方图创建 Hour Of Day 字段

转载 作者:行者123 更新时间:2023-12-02 04:47:01 27 4
gpt4 key购买 nike

编辑:我找到了答案,请参阅下面的 Logstash <= 2.0 ===>

为 Logstash 2.0 创建的插件

任何对 Logstash 2.0 或更高版本感兴趣的人,我创建了一个插件,使它变得非常简单:

创业板在这里:

https://rubygems.org/gems/logstash-filter-dateparts

这是文档和源代码:

https://github.com/mikebski/logstash-datepart-plugin

我在 Logstash 中获得了数周内带有@Timestamp 的大量数据。我有一个持续时间字段,它是一个数字字段,我可以做一个日期直方图。我想在一天中的一个小时内做一个直方图,而不是 x -> y 日期的线性直方图。我希望 x 轴为 0 -> 23 而不是日期 x -> 日期 y。

我想我可以使用 JSON Input 高级文本输入来向结果集中添加一个字段,该字段是 @timestamp 的一天中的小时。帮助文本说:您在此处添加的任何 JSON 格式的属性都将与此部分的 elasticsearch 聚合定义合并。例如,术语聚合上的 shard_size 这让我相信它可以完成,但没有给出任何示例。

编辑添加:

我已经尝试根据下面的链接在脚本字段中设置一个条目,但它不会像他们博客上的 4.1 示例那样工作。以下脚本在尝试添加格式为 number 且名称为 test_day_of_week 的字段时出错:Integer.parseInt("1234")

问题看起来脚本不是很健壮。奇怪的是,我想做他们在示例中所做的事情(为月中的某一天、星期几等添加字段)。如果脚本是 doc['@timestamp'],我可以让该字段工作,但我无法操纵时间戳。

文档说 Lucene 表达式是允许的,并显示了一些 GIS 类型的 trig 和 GCD 示例,但没有日期...

博客更新:

UPDATE: As a security precaution, starting with version 4.0.0-RC1, Kibana scripted fields default to Lucene Expressions, not Groovy, as the scripting language. Since Lucene Expressions only support operations on numerical fields, the example below dealing with date math does not work in Kibana 4.0.0-RC1+ versions.

现在没有关于如何实际执行此操作的建议。我想我可以开始并启用 Groovy 插件...

有什么想法吗?

编辑 - 解决方案:

我使用 Ruby 添加了一个过滤器来执行此操作,这非常简单:

基本上,在 ruby​​ 脚本中,您可以访问 event['field'] 并且可以创建新事件。我使用 Ruby 时间位根据事件的 @timestamp 创建新字段。

ruby {
code => "ts = event['@timestamp']; event['weekday'] = ts.wday; event['hour'] = ts.hour; event['minute'] = ts.min; event['second'] = ts.sec; event['mday'] = ts.day; event['yday'] = ts.yday; event['month'] = ts.month;"
}

最佳答案

这似乎不再适用于 Logstash 1.5.4 - Ruby 日期元素似乎不可用,然后抛出“rubyexception”并且不会将字段添加到 logstash 事件。

我花了一些时间寻找一种方法来恢复我们在 Groovy 脚本字段中的功能,这些字段不能用于动态脚本,为我提供诸如“hourofday”、“dayofweek”等字段。我所做的是将这些作为 groovy 脚本文件直接添加到 Elasticsearch 节点本身,如下所示:

/etc/elasticsearch/scripts/
Hourofday.groovy
星期几.groovy
weekofyear.groovy
...等等。

这些脚本文件包含一行 Groovy,如下所示:

Integer.parseInt(new Date(doc["@timestamp"].value).format("d")) (dayofmonth)Integer.parseInt(new Date(doc["@timestamp"].value).format("u"))(星期几)

要在 Kibana 中引用这些,首先创建一个新的搜索并保存它,或者在“设置 ->保存的对象 -> 搜索”页面。然后您修改查询以在其中添加“脚本字段”,因此您会得到如下内容:

{
"query" : {
...
},
"script_fields": {
"minuteofhour": {
"script_file": "minuteofhour"
},
"hourofday": {
"script_file": "hourofday"
},
"dayofweek": {
"script_file": "dayofweek"
},
"dayofmonth": {
"script_file": "dayofmonth"
},
"dayofyear": {
"script_file": "dayofyear"
},
"weekofmonth": {
"script_file": "weekofmonth"
},
"weekofyear": {
"script_file": "weekofyear"
},
"monthofyear": {
"script_file": "monthofyear"
}
}
}

如图所示,“script_fields”行应该落在“查询”本身的外面,否则您会得到一个错误。还要确保脚本文件可用于所有您的 Elasticsearch 节点。

关于elasticsearch - Kibana 4.1 - 使用 JSON 输入从 @timestamp 为直方图创建 Hour Of Day 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32075816/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com