Kibana 4.1 - 使用JSON输入从@timestamp创建一个时段字段以获取直方图

时间:2015-08-18 14:53:15

标签: elasticsearch logstash kibana

编辑:我找到了答案,请参见下面的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 - >的线性直方图。约会。我希望x轴为0 - > 23代替日期x - >约会。

我想我可以使用JSON Input高级文本输入将字段添加到结果集中,该结果集是@timestamp的一小时。帮助文字说: Any JSON formatted properties you add here will be merged with the elasticsearch aggregation definition for this section. For example shard_size on a terms aggregation让我相信它可以完成,但没有给出任何例子。

编辑添加:

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

问题看起来像脚本不是很强大。奇怪的是,我想在示例中完成他们正在做的事情(添加月份日期,星期几等字段......)。如果脚本是doc['@timestamp'],我可以让字段工作,但我无法操纵时间戳。

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

BLOG有这样的更新:

  

更新:作为安全预防措施,从版本4.0.0-RC1开始,   Kibana脚本字段默认为Lucene Expressions,而不是Groovy   脚本语言。由于Lucene Expressions仅支持   对数字字段的操作,下面的例子涉及日期   数学在Kibana 4.0.0-RC1 +版本中不起作用。

现在没有关于如何实际执行此操作的建议。我想我可以启用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;"
        }

1 个答案:

答案 0 :(得分:0)

这似乎不再适用于Logstash 1.5.4 - Ruby日期元素似乎不可用,然后抛出一个" ruby​​exception"并且不会将字段添加到logstash事件中。

我花了一些时间寻找一种方法来恢复Groovy脚本字段中的功能,这些字段无法动态编写脚本,为我提供了诸如" hourofday"等字段, " dayofweek"等等。我所做的就是直接在Elasticsearch节点上将它们作为groovy脚本文件添加,如下所示:

/etc/elasticsearch/scripts/ hourofday.groovy dayofweek.groovy weekofyear.groovy ......等等。

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

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

要在Kibana中引用这些内容,首先要创建一个新搜索并进行保存,或者选择一个现有的已保存搜索(请在更改之前获取现有JSON的副本,以防万一)在"设置 - >保存的对象 - >搜索与#34;页。然后,您可以修改查询以添加"脚本字段" in,所以你得到这样的东西:

{
    "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节点。