Шаблон Grok для создания отдельного раздела в панели управления Kibana - PullRequest
0 голосов
/ 07 марта 2020

Я уже долгое время пытаюсь извлечь и пометить данные из моего настроенного журнала, используя logsta sh, но никуда не денусь, у меня есть настроенный журнал haproxy, как показано ниже:

Feb 22 21:17:32 ap haproxy[1235]: 10.172.80.45:32071 10.31.33.34:44541 10.31.33.34:32772 13.127.229.72:443 [22/Feb/2020:21:17:32.006] this_machine~ backend_test-tui/test-tui_32772 40/0/5/1/836 200 701381 - - ---- 0/0/0/0/0 0/0 {testtui.net} {cache_hit} "GET /ob/720/output00007.ts HTTP/1.1"

Я хочу чтобы извлечь и пометить указанное c содержимое в панели управления kibana из журнала, например:

  • из раздела "40/0/5/1/836", я хочу отметить только последний раздел di git (836) как "response_time"
  • "701381" как "response_bytes"
  • "/ ob / 720 / output00007.ts" как "content_url"
  • И хотите использовать временную метку в файле журнала, а не по умолчанию

Я создал фильтр grok, используя https://grokdebug.herokuapp.com/, но всякий раз, когда я его применяю, я вижу сообщение "_grokparsefailure" и панель управления kibana перестает заполняться

Ниже находится logsta sh журнал отладки

{
      "@version" => "1",
       "message" => "Mar  8 13:53:59 ap haproxy[22158]: 10.172.80.45:30835 10.31.33.34:57886 10.31.33.34:32771 43.252.91.147:443 [08/Mar/2020:13:53:59.827] this_machine~ backend_noida/noida_32771 55/0/1/0/145 200 2146931 - - ---- 0/0/0/0/0 0/0 {testalef1.adcontentamtsolutions.} {cache_hit} \"GET /felaapp/virtual_videos/og/1080/output00006.ts HTTP/1.1\"",
    "@timestamp" => 2020-03-08T10:24:07.348Z,
          "path" => "/home/alef/haproxy.log",
          "host" => "com1",
          "tags" => [
        [0] "_grokparsefailure"
    ]
}

Ниже приведен фильтр, который я создал

%{MONTH:[Month]} %{MONTHDAY:[date]} %{TIME:[time]} %{WORD:[source]} %{WORD:[app]}\[%{DATA:[class]}\]: %{IPORHOST:[UE_IP]}:%{NUMBER:[UE_Port]} %{IPORHOST:[NATTED_IP]}:%{NUMBER:[NATTED_Source_Port]} %{IPORHOST:[NATTED_IP]}:%{NUMBER:[NATTED_Destination_Port]} %{IPORHOST:[WAN_IP]}:%{NUMBER:[WAN_Port]} \[%{HAPROXYDATE:[accept_date]}\] %{NOTSPACE:[frontend_name]}~ %{NOTSPACE:[backend_name]} %{NOTSPACE:[ty_name]}/%{NUMBER:[response_time]} %{NUMBER:[http_status_code]} %{INT:[response_bytes]} - - ---- %{NOTSPACE:[df]} %{NOTSPACE:[df]} %{DATA:[domain_name]} %{DATA:[cache_status]} %{DATA:[domain_name]} %{NOTSPACE:[content]} HTTP/%{NUMBER:[http_version]}

Ниже мой logsta sh conf файл:

    input {
  beats {
    port => 5044
  }
 }

filter {
  grok {
    match => { "message" => "%{MONTH:[Month]} %{MONTHDAY:[date]} %{TIME:[time]} %{WORD:[source]} %{WORD:[app]}\[%{DATA:[class]}\]: %{IPORHOST:[UE_IP]}:%{NUMBER:[UE_Port]} %{IPORHOST:[NATTED_IP]}:%{NUMBER:[NATTED_Source_Port]} %{IPORHOST:[NATTED_IP]}:%{NUMBER:[NATTED_Destination_Port]} %{IPORHOST:[WAN_IP]}:%{NUMBER:[WAN_Port]} \[%{HAPROXYDATE:[accept_date]}\] %{NOTSPACE:[frontend_name]}~ %{NOTSPACE:[backend_name]} %{NOTSPACE:[ty_name]}/%{NUMBER:[response_time]} %{NUMBER:[http_status_code]} %{INT:[response_bytes]} - - ---- %{NOTSPACE:[df]} %{NOTSPACE:[df]} %{DATA:[domain_name]} %{DATA:[cache_status]} %{DATA:[domain_name]} %{NOTSPACE:[content]} HTTP/%{NUMBER:[http_version]} " }
  }
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
 }

output {
  elasticsearch { hosts => ["localhost:9200"] }
  }

1 Ответ

0 голосов
/ 08 марта 2020

Использование приведенного ниже фильтра решило мою проблему, пришлось выполнить отладку в самой logsta sh, чтобы получить правильный фильтр:

input {beats {port => 5044}}

filter {grok {match => {"message" => "% {MONTH: месяц}% {MONTHDAY: date}% {TIME: time}% {WORD: [источник]}% {WORD: [app]} [ % {DATA: [класс]}]:% {IPORHOST: [UE_IP]}:% {NUMBER: [UE_Port]}% {IPORHOST: [NATTED_IP]}:% {NUMBER: [NATTED_Source_Port]}% {IPORHOST: [NATTED_IP ]}:% {NUMBER: [NATTED_Destination_Port]}% {IPORHOST: [WAN_IP]}:% {NUMBER: [WAN_Port]} [% {HAPROXYDATE: [accept_date]}]% {NOTSPACE: [frontend_name]} ~% {NOTSPACE : [backend_name]}% {NOTSPACE: [ty_name]} /% {NUMBER: [response_time]: int}% {NUMBER: [http_status_code]}% {NUMBER: [response_bytes]: int} - - ----% { NOTSPACE: [df]}% {NOTSPACE: [df]}% {DATA: [имя_домена]}% {DATA: [cache_status]}% {DATA: [имя_домена]}% {URIPATHPARAM: [содержимое]} HTTP /% { NUMBER: [http_version]} "} add_tag ​​=> [" response_time "," response_time "]

} date {match => [" отметка времени "," дд / ммм / гггг: чч: мм: сс Z "] }}

output {asticsearch {hosts => ["localhost: 9200"]}

stdout {

code c => rubydebug

}}

...