Mga tip at trick para sa pag-convert ng hindi nakabalangkas na data mula sa mga log patungo sa ELK Stack gamit ang GROK sa LogStash

Pag-istruktura ng hindi nakabalangkas na data gamit ang GROK

Kung gumagamit ka ng Elastic (ELK) stack at interesado sa pagmamapa ng mga custom na Logstash log sa Elasticsearch, ang post na ito ay para sa iyo.

Mga tip at trick para sa pag-convert ng hindi nakabalangkas na data mula sa mga log patungo sa ELK Stack gamit ang GROK sa LogStash

Ang ELK stack ay isang acronym para sa tatlong open source na proyekto: Elasticsearch, Logstash at Kibana. Magkasama silang bumubuo ng isang log management platform.

  • Elasticsearch ay isang sistema ng paghahanap at pagsusuri.
  • Logstash ay isang pipeline sa pagpoproseso ng data sa gilid ng server na kumukuha ng data mula sa maraming pinagmumulan nang sabay-sabay, binabago ito, at pagkatapos ay ipinapadala ito sa isang "stash" gaya ng Elasticsearch.
  • Kibana nagbibigay-daan sa mga user na makita ang data gamit ang mga chart at graph sa Elasticsearch.

Beats dumating mamaya at ito ay isang magaan na data shipper. Binago ng pagpapakilala ng Beats ang Elk Stack sa Elastic Stack, ngunit hindi iyon ang punto.

Ang artikulong ito ay tungkol sa Grok, na isang tampok sa Logstash na maaaring baguhin ang iyong mga log bago ipadala ang mga ito sa itago. Para sa aming mga layunin, magsasalita lamang ako tungkol sa pagproseso ng data mula sa Logstash patungo sa Elasticsearch.

Mga tip at trick para sa pag-convert ng hindi nakabalangkas na data mula sa mga log patungo sa ELK Stack gamit ang GROK sa LogStash

Ang Grok ay isang filter sa loob ng Logstash na ginagamit upang i-parse ang hindi nakaayos na data sa isang bagay na nakabalangkas at maaaring ma-query. Nakaupo ito sa ibabaw ng isang regular na expression (regex) at gumagamit ng mga pattern ng teksto upang tumugma sa mga string sa mga log file.

Tulad ng makikita natin sa mga sumusunod na seksyon, ang paggamit ng Grok ay gumagawa ng isang malaking pagkakaiba pagdating sa mahusay na pamamahala ng log.

Kung wala ang Grok ang iyong data ng log ay hindi nakaayos

Mga tip at trick para sa pag-convert ng hindi nakabalangkas na data mula sa mga log patungo sa ELK Stack gamit ang GROK sa LogStash

Kung walang Grok, kapag ang mga log ay ipinadala mula sa Logstash hanggang Elasticsearch at nai-render sa Kibana, lilitaw lamang ang mga ito sa halaga ng mensahe.

Ang pagtatanong ng makabuluhang impormasyon sa sitwasyong ito ay mahirap dahil ang lahat ng data ng log ay naka-imbak sa isang solong key. Mas mabuti kung ang mga mensahe ng log ay mas maayos.

Hindi nakabalangkas na data mula sa mga log

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

Kung titingnan mong mabuti ang raw data, makikita mo na talagang binubuo ito ng iba't ibang bahagi, bawat isa ay pinaghihiwalay ng isang espasyo.

Para sa mas may karanasang developer, malamang na mahulaan mo kung ano ang ibig sabihin ng bawat bahagi at kung ano ang log message na iyon mula sa API call. Ang presentasyon ng bawat aytem ay nakabalangkas sa ibaba.

Structured view ng aming data

  • localhost == kapaligiran
  • GET == pamamaraan
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == response_status
  • ​46ms == response_time
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Tulad ng nakikita natin sa structured data, mayroong isang order para sa mga unstructured log. Ang susunod na hakbang ay software processing ng raw data. Dito nagniningning si Grok.

Mga Template ng Grok

Mga built-in na Grok na template

Ang Logstash ay may higit sa 100 built-in na mga template para sa pagbubuo ng hindi nakabalangkas na data. Talagang dapat mong samantalahin ito hangga't maaari para sa mga pangkalahatang syslog tulad ng apache, linux, haproxy, aws at iba pa.

Gayunpaman, ano ang mangyayari kapag mayroon kang mga custom na log tulad ng sa halimbawa sa itaas? Dapat kang bumuo ng iyong sariling Grok template.

Mga custom na template ng Grok

Kailangan mong subukang bumuo ng iyong sariling template ng Grok. ginamit ko Grok Debugger ΠΈ Mga Pattern ng Grok.

Tandaan na ang Grok template syntax ay ang mga sumusunod: %{SYNTAX:SEMANTIC}

Ang unang bagay na sinubukan kong gawin ay pumunta sa tab Tumuklas sa Grok debugger. Akala ko magiging cool kung ang tool na ito ay awtomatikong makakabuo ng Grok pattern, ngunit hindi ito masyadong kapaki-pakinabang dahil dalawang tugma lang ang nakita nito.

Mga tip at trick para sa pag-convert ng hindi nakabalangkas na data mula sa mga log patungo sa ELK Stack gamit ang GROK sa LogStash

Gamit ang pagtuklas na ito, sinimulan kong gumawa ng sarili kong template sa Grok debugger gamit ang syntax na makikita sa Elastic Github page.

Mga tip at trick para sa pag-convert ng hindi nakabalangkas na data mula sa mga log patungo sa ELK Stack gamit ang GROK sa LogStash

Pagkatapos maglaro sa iba't ibang mga syntax, sa wakas ay nagawa ko nang buuin ang data ng log sa paraang gusto ko.

Mga tip at trick para sa pag-convert ng hindi nakabalangkas na data mula sa mga log patungo sa ELK Stack gamit ang GROK sa LogStash

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

Orihinal na teksto:

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

pattern:

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

Anong nangyari sa huli

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

Gamit ang Grok template at naka-map na data sa kamay, ang huling hakbang ay idagdag ito sa Logstash.

Ina-update ang Logstash.conf configuration file

Sa server kung saan mo na-install ang ELK stack, pumunta sa configuration ng Logstash:

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

Idikit ang mga pagbabago.

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

Pagkatapos i-save ang iyong mga pagbabago, i-restart ang Logstash at tingnan ang status nito upang matiyak na gumagana pa rin ito.

sudo service logstash restart
sudo service logstash status

Panghuli, para matiyak na nagkabisa ang mga pagbabago, Siguraduhing i-update ang iyong Elasticsearch index para sa Logstash sa Kibana!

Mga tip at trick para sa pag-convert ng hindi nakabalangkas na data mula sa mga log patungo sa ELK Stack gamit ang GROK sa LogStash

Sa Grok, ang iyong data ng log ay nakabalangkas!

Mga tip at trick para sa pag-convert ng hindi nakabalangkas na data mula sa mga log patungo sa ELK Stack gamit ang GROK sa LogStash

Tulad ng nakikita natin sa larawan sa itaas, ang Grok ay may kakayahang awtomatikong itugma ang data ng log sa Elasticsearch. Ginagawa nitong mas madaling pamahalaan ang mga log at mabilis na mag-query ng impormasyon. Sa halip na maghukay ng mga log file para i-debug, maaari mo lamang i-filter ayon sa hinahanap mo, gaya ng kapaligiran o url.

Subukan ang mga ekspresyon ng Grok! Kung mayroon kang ibang paraan upang gawin ito o may anumang mga problema sa mga halimbawa sa itaas, sumulat lamang ng komento sa ibaba upang ipaalam sa akin.

Salamat sa pagbabasaβ€”at mangyaring sundan ako dito sa Medium para sa mas kawili-wiling mga artikulo sa software engineering!

Mga Mapagkukunan

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 Link ng pinagmulan

Telegram channel ni Elasticsearch

Pinagmulan: www.habr.com

Magdagdag ng komento