Шаблон Grok для создания отдельного раздела в дашборде Kibana

Я долгое время пытался извлечь и пометить данные из моего настраиваемого журнала с помощью logstash, но ничего не добился, у меня есть настраиваемый журнал 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"

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

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

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

Ниже приведен журнал отладки logstash.

{
      "@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]}

Ниже мой файл конфигурации logstash:

    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"] }
  }

person sona das    schedule 07.03.2020    source источник


Ответы (1)


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

ввод {удары {порт => 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]: int}% {NUMBER: [http_status_code]}% {NUMBER: [response_bytes]: int} - - ----% {NOTSPACE : [df]}% {NOTSPACE: [df]}% {DATA: [domain_name]}% {DATA: [cache_status]}% {DATA: [domain_name]}% {URIPATHPARAM: [content]} HTTP /% {NUMBER : [http_version]} "} add_tag ​​=> [" response_time "," response_time "]

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

вывод {elasticsearch {hosts => ["localhost: 9200"]}

stdout {

кодек => rubydebug

} }

person sona das    schedule 08.03.2020