Как использовать статистическую функцию в logsta sh для вычисления разницы между «истекшими» полями времени? - PullRequest
0 голосов
/ 27 апреля 2020

Я использую последнюю версию logsta sh (7.6.2). Я пытаюсь вычислить общее время, проведенное в системе, исключая время, проведенное между Out2 и In2, т.е. [(Out3-In1) - (Out2-In2)] для данного идентификатора. Ниже приведены мои примеры данных со столбцами Timestamp, Event и ID

Примеры данных

18/May/2015:02:05:10 +0000 In1 100
18/May/2015:02:05:15 +0000 Out1 100
18/May/2015:02:05:26 +0000 In2 100
18/May/2015:02:05:48 +0000 Out2 100
18/May/2015:15:05:08 +0000 In3 100
18/May/2015:16:05:03 +0000 Out3 100

В настоящее время я использую две истекшие функции и 2 агрегатные функции, как показано ниже в файле конфигурации

Файл конфигурации

filter{
    grok{
        match => {"message" => "%{HTTPDATE:timestamp} %{WORD:Event} %{NUMBER:ID}"}
        add_tag => ["%{Event}"]
    }
    date{
        match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
    }
    elapsed {
        start_tag => "In1"
        end_tag => "Out3"
        unique_id_field => "ID"
    }
    elapsed {
        start_tag => "In2"
        end_tag => "Out2"
        unique_id_field => "ID"
    }
    if [Event] == "Out2" {
        aggregate {
            task_id => "%{ID}"
            code => "map['time1'] = (event.get('elapsed_time')*1000).to_i"
            map_action => "create"
        }
    }
    if [Event] == "Out3" {
        aggregate {
            task_id => "%{ID}"
            code => "map['time2'] = (event.get('elapsed_time')*1000).to_i - map['time1']; event.set('time1', map['time2'])"
            map_action => "update"
            end_of_task => true
        }
    }
}

Я смог создать поля прошедшего времени, но не смог рассчитать разницу между ними, используя фильтр Agreggate. Найдите ниже мой вывод

Есть ли что-то, чего мне не хватает?

Любая помощь приветствуется! Заранее спасибо

...