Logstash - obsługiwane dane wyjściowe

Logstash zapewnia wiele wtyczek do obsługi różnych magazynów danych lub wyszukiwarek. Zdarzenia wyjściowe dzienników mogą być wysyłane do pliku wyjściowego, standardowego wyjścia lub wyszukiwarki, takiej jak Elasticsearch. Istnieją trzy typy obsługiwanych danych wyjściowych w Logstash, którymi są:

  • Wyjście standardowe
  • Plik wyjściowy
  • Wyjście zerowe

Omówmy teraz szczegółowo każdą z nich.

Standardowe wyjście (stdout)

Służy do generowania przefiltrowanych zdarzeń dziennika jako strumienia danych do interfejsu wiersza poleceń. Oto przykład generowania całkowitego czasu trwania transakcji bazy danych na standardowe wyjście.

logstash.conf

Ten plik konfiguracyjny zawiera wtyczkę wyjściową stdout, która zapisuje całkowity sql_duration na standardowe wyjście.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input.log"
   }
} 
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid}
            - %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" 
      ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
}
output {
   if [logger] == "TRANSACTION_END" {
      stdout {
         codec => line{format => "%{sql_duration}"}
      }
   }
}

Note - Zainstaluj filtr kruszywa, jeśli nie został jeszcze zainstalowany.

>logstash-plugin install Logstash-filter-aggregate

Uruchom Logstash

Możemy uruchomić Logstash za pomocą następującego polecenia.

>logstash –f logsatsh.conf

Input.log

Poniższy blok kodu przedstawia dane dziennika wejściowego.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END – end

stdout (będzie to wiersz poleceń w systemie Windows lub terminal w systemie UNIX)

To jest całkowity czas trwania_sql 320 + 200 = 520.

520

Plik wyjściowy

Logstash może również przechowywać zdarzenia dziennika filtrów w pliku wyjściowym. Skorzystamy z powyższego przykładu i zapiszemy wynik w pliku zamiast STDOUT.

logstash.conf

Ten plik konfiguracyjny Logstash bezpośrednio Logstash przechowuje całkowity sql_duration w wyjściowym pliku dziennika.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input1.log"
   }
} 
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid} -
            %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" 
      ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
}
output {
   if [logger] == "TRANSACTION_END" {
      file {
         path => "C:/tpwork/logstash/bin/log/output.log"
         codec => line{format => "%{sql_duration}"}
      }
   }
}

Uruchom logstash

Możemy uruchomić Logstash za pomocą następującego polecenia.

>logstash –f logsatsh.conf

input.log

Poniższy blok kodu przedstawia dane dziennika wejściowego.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END – end

output.log

Poniższy blok kodu przedstawia dane dziennika wyjściowego.

520

Wyjście zerowe

Jest to specjalna wtyczka wyjściowa, która służy do analizowania wydajności wtyczek wejściowych i filtrujących.