是否可以将相对时间字段添加到Kibana数据表

时间:2018-03-22 17:11:41

标签: elasticsearch kibana kibana-6

我想在数据表中添加一个字段,该字段显示基于另一个日期字段的已用时间。具体来说,我有一个提供事件日期和时间的字段,需要另一个字段来显示事件发生在1天2小时15分钟前。当他们在一分钟后查看相同的可视化时,该字段应该更新为1天2小时16分钟前。

我知道我可以让用户选择他们想要关注的时间范围,但我试图从提供此字段的先前(非ELK)解决方案中复制功能。

1 个答案:

答案 0 :(得分:0)

所以这就是我提出的:

long different = (System.currentTimeMillis() - doc['BeginDate'].value);
long secondsInMilli = 1000;
long minutesInMilli = secondsInMilli * 60;
long hoursInMilli = minutesInMilli * 60;
long daysInMilli = hoursInMilli * 24;

long elapsedDays = different / daysInMilli;
different = different % daysInMilli;

long elapsedHours = different / hoursInMilli;
different = different % hoursInMilli;

long elapsedMinutes = different / minutesInMilli;
different = different % minutesInMilli;

long elapsedSeconds = different / secondsInMilli;
different = different % secondsInMilli;

if(elapsedSeconds < 1) {
   different.toString() + " milliseconds";
} else if (elapsedSeconds == 1) {
    elapsedSeconds.toString() + " second, " + different.toString() + " milliseconds";
} else if (elapsedMinutes < 1) {
    elapsedSeconds.toString() + " seconds, " + different.toString() + " milliseconds";
} else if (elapsedMinutes == 1) {
    elapsedMinutes.toString() + " minute, " + elapsedSeconds.toString() + " seconds";
} else if (elapsedHours < 1) {
    elapsedMinutes.toString() + " minutes, " + elapsedSeconds.toString() + " seconds";
} else if (elapsedHours == 1) {
    elapsedHours.toString() + " hour, " + elapsedMinutes.toString() + " minutes";
} else if (elapsedDays < 1) {
    elapsedHours.toString() + " hours, " + elapsedMinutes.toString() + " minutes";
} else if (elapsedDays == 1) {
    elapsedDays.toString() + " day, " + elapsedHours.toString() + " hours";
} else {
  elapsedDays.toString() + " days, " + elapsedHours.toString() + " hours"; 
}

我在索引模式中添加了一个脚本字段,为语言选择“无痛”,为类型选择“date”,为Format设置“String”,并且Transform为“ - none - ”。

它不漂亮,但似乎有效。我确信它可以大大改进,但它似乎符合我的需要。希望这有助于其他人。