Совети и трикови за конвертирање неструктурирани податоци од дневници во ELK Stack со помош на GROK во LogStash

Структурирање на неструктурирани податоци со ГРОК

Ако го користите стекот Elastic (ELK) и сте заинтересирани да мапирате прилагодени логови на Logstash на Elasticsearch, тогаш оваа објава е за вас.

Совети и трикови за конвертирање неструктурирани податоци од дневници во ELK Stack со помош на GROK во LogStash

Стакот ELK е акроним за три проекти со отворен код: Elasticsearch, Logstash и Kibana. Заедно тие формираат платформа за управување со дневници.

  • Еластична пребарување е систем за пребарување и аналитика.
  • Логсташ е цевковод за обработка на податоци од страна на серверот кој внесува податоци од повеќе извори истовремено, ги трансформира, а потоа ги испраќа во „скривање“ како што е Elasticsearch.
  • Кибана им овозможува на корисниците да ги визуелизираат податоците користејќи графикони и графикони во Elasticsearch.

Отчукувања дојде подоцна и е лесен доставувач на податоци. Воведувањето на Beats го трансформираше Elk Stack во Elastic Stack, но тоа не е поентата.

Оваа статија е за Грок, која е карактеристика во Logstash која може да ги трансформира вашите дневници пред да бидат испратени во скривалиштето. За наши цели, ќе зборувам само за обработка на податоци од Logstash во Elasticsearch.

Совети и трикови за конвертирање неструктурирани податоци од дневници во ELK Stack со помош на GROK во LogStash

Grok е филтер во Logstash кој се користи за анализа на неструктурирани податоци во нешто структурирано и прашално. Седи на врвот на регуларен израз (регекс) и користи текстуални обрасци за да одговара на низите во датотеките за дневници.

Како што ќе видиме во следните делови, користењето на Grok прави голема разлика кога станува збор за ефикасно управување со дневниците.

Без Грок вашите податоци од дневникот се неструктурирани

Совети и трикови за конвертирање неструктурирани податоци од дневници во ELK Stack со помош на GROK во LogStash

Без Grok, кога дневниците се испраќаат од Logstash до Elasticsearch и се прикажуваат во Kibana, тие се појавуваат само во вредноста на пораката.

Барањето значајни информации во оваа ситуација е тешко бидејќи сите податоци од дневникот се складираат во еден клуч. Подобро би било пораките од дневникот да бидат подобро организирани.

Неструктурирани податоци од дневници

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Ако внимателно ги погледнете необработените податоци, ќе видите дека тие всушност се состои од различни делови, секој одделен со празно место.

За поискусните програмери, веројатно можете да погодите што значи секој од деловите и каква е таа порака од дневникот од повикот на API. Презентацијата на секоја ставка е наведена подолу.

Структуриран приказ на нашите податоци

  • ​ localhost == околина
  • ​GET == метод
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​400 == одговор_статус
  • ​ 46ms == одговор_време
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Како што гледаме во структурирани податоци, постои ред за неструктурирани логови. Следниот чекор е софтверска обработка на необработени податоци. Тука блеска Грок.

Шаблони за Грок

Вградени шаблони за Грок

Logstash доаѓа со над 100 вградени шаблони за структурирање на неструктурирани податоци. Дефинитивно треба да го искористите ова секогаш кога е можно за општи системски логови како apache, Linux, haproxy, aws и така натаму.

Меѓутоа, што се случува кога имате сопствени дневници како во примерот погоре? Мора да изградите свој шаблон за Грок.

Прилагодени шаблони за Grok

Мора да се обидете да изградите свој шаблон за Грок. користев Грок Дебагер и Модели на Грок.

Забележете дека синтаксата на шаблонот Grok е како што следува: %{SYNTAX:SEMANTIC}

Првото нешто што се обидов да направам беше да отидам на јазичето Откријте во дебагерот Грок. Мислев дека би било кул ако оваа алатка може автоматски да генерира шема на Грок, но не беше премногу корисна бидејќи најде само две совпаѓања.

Совети и трикови за конвертирање неструктурирани податоци од дневници во ELK Stack со помош на GROK во LogStash

Користејќи го ова откритие, почнав да создавам сопствен шаблон во дебагерот Grok користејќи ја синтаксата пронајдена на страницата Elastic Github.

Совети и трикови за конвертирање неструктурирани податоци од дневници во ELK Stack со помош на GROK во LogStash

Откако си поиграв со различни синтакси, конечно успеав да ги структурирам податоците од дневникот онака како што сакав.

Совети и трикови за конвертирање неструктурирани податоци од дневници во ELK Stack со помош на GROK во LogStash

Link Debugger Grok https://grokdebug.herokuapp.com/

Оригинален текст:

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Уметност:

%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}

Што се случи на крајот

{
  "environment": [
    [
      "localhost"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "response_status": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "response_time": [
    [
      "46ms"
    ]
  ],
  "user_id": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

Со шаблонот Grok и мапираните податоци во рака, последниот чекор е да го додадете во Logstash.

Ажурирање на конфигурациската датотека Logstash.conf

На серверот каде што сте го инсталирале стекот ELK, одете во конфигурацијата Logstash:

sudo vi /etc/logstash/conf.d/logstash.conf

Залепете ги промените.

input { 
  file {
    path => "/your_logs/*.log"
  }
}
filter{
  grok {
    match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
  }
}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
  }
}

Откако ќе ги зачувате промените, рестартирајте го Logstash и проверете го неговиот статус за да бидете сигурни дека сè уште работи.

sudo service logstash restart
sudo service logstash status

Конечно, за да бидете сигурни дека промените стапиле на сила, Не заборавајте да го ажурирате вашиот индекс на Elasticsearch за Logstash во Кибана!

Совети и трикови за конвертирање неструктурирани податоци од дневници во ELK Stack со помош на GROK во LogStash

Со Грок, вашите податоци од дневникот се структурирани!

Совети и трикови за конвертирање неструктурирани податоци од дневници во ELK Stack со помош на GROK во LogStash

Како што можеме да видиме на сликата погоре, Грок е способен автоматски да ги совпаѓа податоците од дневникот со Elasticsearch. Ова го олеснува управувањето со дневниците и брзо барање информации. Наместо да копате низ датотеките за евиденција за отстранување грешки, можете едноставно да филтрирате според она што го барате, како што е околина или URL адреса.

Пробајте ги изразите на Грок! Ако имате друг начин да го направите ова или имате какви било проблеми со примерите погоре, само напишете коментар подолу за да ме известите.

Ви благодариме за читањето - и ве молам следете ме овде на Медиум за повеќе интересни написи за софтверско инженерство!

Ресурси

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

PS Извор линк

Телеграмски канал од Еластична пребарување

Извор: www.habr.com

Додадете коментар