Разобрать целое и показать на временной шкале в Кибане

Вот пользовательский интерфейс Kibana, и я хочу проанализировать некоторое целое число в сообщении. Число в конце сообщения - это время процесса для одного метода, и я хочу показать среднее время обработки в часах в Кибане. Это возможно?

Я попробовал некоторые conf в logstash:

filter{
    json{
        source => "message"
    }
    grok {
        match => {
            "message" => "^Finish validate %{NUMBER:cto_validate_time}$"
        }
    }
    grok {
        match => {
            "message" => "^Finish customize %{NUMBER:cto_customize_time}$"
        }
    }

}

Оно работает. Но когда я создаю временную диаграмму, я не могу получить новое поле.

1 ответ

Решение

Поскольку вас не волнуют проблемы с производительностью, вы можете создать сценарий с именем process_time в вашем шаблоне индекса с помощью следующего безболезненного кода. То, что он делает, просто берет последнее числовое значение из вашего message поле.

def m = /.*\s(\d+)$/.matcher(doc['message.keyword'].value);
if ( m.matches() ) {
   return m.group(1)
} else {
   return 0
}

Затем вы можете построить график, чтобы показать среднее время процесса по часам. Перейдите на вкладку "Визуализация" и создайте новую вертикальную гистограмму. На оси Y вы создадите среднюю агрегацию на process_time поле и на оси X вы будете использовать агрегирование гистограммы даты в поле вашей отметки времени. Образец показан ниже:

введите описание изображения здесь

Примечание. Вам также необходимо добавить следующую строку в elasticsearch.yml файл и перезагрузите ES:

script.painless.regex.enabled: true

ОБНОВИТЬ

Если вы хотите сделать это через Logstash, вы можете добавить следующее grok фильтр

filter{
    grok {
        match => {
            "message" => "^Finish customize in controller %{NUMBER:cto_customize_time}$"
        }
    }
    mutate {
        convert => { "cto_customize_time" => "integer" }
    }
}
Другие вопросы по тегам