Всем привет! Есть задача, считать сумму времени.
Например, есть поле содержащее время, изначально время в формате UNIX.
Нужно чтобы была визуализация, на которой будет показанна сумма времени полей за определённое время. Что-то я даже не могу представить как это реализовать? Есть ли в визуализациях Kibana такой функционал или нужно что-то своё писать?
т.е. количество миллисекунд прошедших с 1-го января 1970г?
То есть сумма количества часов прошедшее с 1-го января 1970г по нескольким полям? Что это будет представлять?
Да.
Есть логи, в кажном сообщение есть поле "Duration" продолжительность разговора, еще в сообщении есть поле "User name", нужно суммарную продолжительность разговора данного пользователя или например несколькох пользователей за определенное время.
Впринципе как это будет выглядеть не важно, самая простая визуализация.
То есть, например, чтобы увидить сумму сколько Вася Пупкин поговорил по телефону за 1 или несколько дней.
Duration в чем измеряется? И в чем визуализировать надо?
Миллисекунды
В кибане.
Я все-равно не понимаю, в чем проблема. Помечаем поле как duration (через Меню > Stack Management > Index Patterns). Потом добавляем его как Metrics с типом Sum в любую визуализацию.
Вот этого не знал, не было еще пока задачи такое делать. То есть не нужно для этого делать отдельный индекс, просто в шаблоне тип поля сделать?
Если у вас уже продолжительность звонка в записи лежит - то не нужно делать отдельный индекс, просто дать знать кибане с какими данными надо работать.
Если время начала звонка хранится в одной записи, а время окончание - в другой, или что-то в этом роде - то тут надо смотреть, что конкретно где лежит и как.
Нет, просто в каждом сообщении есть поля с временем, вот их нужно суммировать.
У вас это поле проиндексировано как string.
То есть нужно индексировать в logstash или шаблон переделывать?
Надо изменить маппинг (в шаблоне если шаблон используется) и переиндексировать индекс.
Если шаблона нет, то его нужно создать?
Я не знаю структуру вашей системы. Конечный результат - должен быть long или integer как тип для этого поля. Это можно сделать многими способами - например, через шаблон, заданием маппинга перед началом индексации, либо динамически - индексацией значения с правильным типом (то есть 42
а не "42"
) и т.д.
Изменил mapping в шаблоне для поля "Acct_Session_Time", сделал его "integer"
"properties": {
"@timestamp": {
"type": "date"
},
"geoip": {
"dynamic": true,
"properties": {
"ip": {
"type": "ip"
},
"latitude": {
"type": "half_float"
},
"location": {
"type": "geo_point"
},
"longitude": {
"type": "half_float"
}
}
},
"@version": {
"type": "keyword"
},
"Acct_Session_Time": {
"type": "integer"
}
}
}
После нужно сделать "Refresh field list"?
Надо сделать новый индекс.
Сделал, всё хорошо, теперь "duration" есть, но вот только как теперь сделать, чтобы формат был, наример HH:MM:SS? Такой формат необходим в визуализации.
С этого и надо было начинать. В этом случае, миллисекунды надо в секунды в этом поле переводить либо при индексации, либо через scripted field и использовать numeric тип с форматом '00:00:00'
.
А как тогда сумму выводить в визуализации? Тип sum уже не работает.
PS: всё работает!
Спасибо большое!!!!