LogStash дахь GROK ашиглан бүтэцгүй өгөгдлийг бүртгэлээс ELK стек рүү хөрвүүлэх зөвлөмж, аргачлалууд

GROK ашиглан бүтэцгүй өгөгдлийг бүтэцжүүлэх

Хэрэв та Elastic (ELK) стек ашиглаж байгаа бөгөөд Logstash бүртгэлийг Elasticsearch-д буулгах сонирхолтой байгаа бол энэ нийтлэл танд зориулагдсан болно.

LogStash дахь GROK ашиглан бүтэцгүй өгөгдлийг бүртгэлээс ELK стек рүү хөрвүүлэх зөвлөмж, аргачлалууд

ELK стек нь Elasticsearch, Logstash, Kibana гэсэн гурван нээлттэй эхийн төслийн товчлол юм. Тэд хамтдаа бүртгэлийн удирдлагын платформыг бүрдүүлдэг.

  • Elasticsearch хайлт, аналитик систем юм.
  • Logstash Энэ нь олон эх сурвалжаас өгөгдлийг нэгэн зэрэг шингээж, хувиргаж, дараа нь Elasticsearch гэх мэт "нугас" руу илгээдэг сервер талын өгөгдөл боловсруулах хоолой юм.
  • Кибана нь хэрэглэгчдэд Elasticsearch дээр диаграм, график ашиглан өгөгдлийг дүрслэх боломжийг олгодог.

Beats дараа нь ирсэн бөгөөд хөнгөн жинтэй өгөгдөл тээвэрлэгч юм. Beats-ийн танилцуулга нь Elk Stack-ийг Elastic Stack болгон өөрчилсөн боловч энэ нь гол зүйл биш юм.

Энэ нийтлэл нь Grok-ийн тухай бөгөөд энэ нь Logstash-ийн онцлог бөгөөд таны бүртгэлийг хадгалах газар руу илгээхээс өмнө өөрчлөх боломжтой юм. Бидний зорилгын үүднээс би Logstash-аас Elasticsearch руу өгөгдөл боловсруулах талаар л ярих болно.

LogStash дахь GROK ашиглан бүтэцгүй өгөгдлийг бүртгэлээс ELK стек рүү хөрвүүлэх зөвлөмж, аргачлалууд

Grok нь Logstash доторх шүүлтүүр бөгөөд бүтэцгүй өгөгдлийг бүтэцтэй, хайлт хийх боломжтой зүйл болгон задлахад ашигладаг. Энэ нь ердийн илэрхийлэл (regex) дээр байрладаг бөгөөд лог файл дахь мөрүүдийг тохируулахын тулд текстийн хэв маягийг ашигладаг.

Дараах хэсгүүдэд бид Grok-ийг ашиглах нь бүртгэлийн үр ашигтай менежментийн талаар ихээхэн өөрчлөлт авчрах болно.

Grok-гүйгээр таны бүртгэлийн өгөгдөл бүтэцгүй болно

LogStash дахь GROK ашиглан бүтэцгүй өгөгдлийг бүртгэлээс ELK стек рүү хөрвүүлэх зөвлөмж, аргачлалууд

Grok-гүй бол логуудыг Logstash-аас Elasticsearch руу илгээж, Kibana-д үзүүлэх үед тэдгээр нь зөвхөн мессежийн утгад харагдана.

Бүх бүртгэлийн өгөгдөл нь нэг түлхүүрт хадгалагддаг тул ийм нөхцөлд утга учиртай мэдээлэл хайхад хэцүү байдаг. Бүртгэлийн мессежийг илүү сайн зохион байгуулбал илүү дээр байх болно.

Бүртгэлээс бүтцгүй өгөгдөл

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

Хэрэв та түүхий өгөгдлийг анхааралтай ажиглавал энэ нь үнэндээ өөр өөр хэсгүүдээс бүрдэх бөгөөд тус бүр нь зайгаар тусгаарлагдсан болохыг харах болно.

Илүү туршлагатай хөгжүүлэгчдийн хувьд та хэсэг бүр нь юу гэсэн үг болохыг болон API дуудлагаас ямар бүртгэлийн мессеж байгааг тааж магадгүй юм. Зүйл бүрийн танилцуулгыг доор харуулав.

Манай өгөгдлийн бүтэцлэгдсэн харагдац

  • localhost == орчин
  • GET == арга
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == хариу_төлөв
  • ​ 46мс == хариулах_хугацаа
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Бүтэцлэгдсэн өгөгдлөөс бидний харж байгаагаар бүтэцгүй бүртгэлийн захиалга байдаг. Дараагийн алхам бол түүхий өгөгдлийг програм хангамжаар боловсруулах явдал юм. Энд Грок гэрэлтдэг.

Grok загварууд

Суулгасан Grok загварууд

Logstash нь бүтэцгүй өгөгдлийг бүтцэд оруулах 100 гаруй загвартай ирдэг. Та үүнийг apache, linux, haproxy, aws гэх мэт ерөнхий системүүдийн хувьд боломжтой бол ашиглах нь гарцаагүй.

Гэсэн хэдий ч, дээрх жишээн дээрх шиг захиалгат бүртгэлтэй бол юу болох вэ? Та өөрийн Grok загвараа бүтээх ёстой.

Захиалгат Grok загварууд

Та өөрийн Grok загвараа бүтээхийг хичээх хэрэгтэй. би хэрэглэсэн Grok Debugger и Grok загварууд.

Grok загварын синтакс дараах байдалтай байгааг анхаарна уу. %{SYNTAX:SEMANTIC}

Миний хийх гэж оролдсон хамгийн эхний зүйл бол таб руу орох явдал байв Discover Grok дибаг дээр. Энэ хэрэгсэл нь Grok загварыг автоматаар үүсгэж чадвал сайхан байх болно гэж би бодсон, гэхдээ энэ нь зөвхөн хоёр таарч олсон тул тийм ч ашигтай биш байсан.

LogStash дахь GROK ашиглан бүтэцгүй өгөгдлийг бүртгэлээс ELK стек рүү хөрвүүлэх зөвлөмж, аргачлалууд

Энэхүү нээлтийг ашиглан би Elastic Github хуудаснаас олдсон синтаксийг ашиглан Grok дибаггер дээр өөрийн загвараа үүсгэж эхэлсэн.

LogStash дахь GROK ашиглан бүтэцгүй өгөгдлийг бүртгэлээс ELK стек рүү хөрвүүлэх зөвлөмж, аргачлалууд

Өөр өөр синтаксуудтай тоглосны дараа би эцэст нь бүртгэлийн өгөгдлийг хүссэнээрээ зохион байгуулж чадсан.

LogStash дахь GROK ашиглан бүтэцгүй өгөгдлийг бүртгэлээс ELK стек рүү хөрвүүлэх зөвлөмж, аргачлалууд

Grok Debugger холбоос 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

Эцэст нь өөрчлөлтүүд хүчин төгөлдөр болсон эсэхийг шалгахын тулд Kibana дахь Logstash-ийн Elasticsearch индексээ шинэчлэхээ мартуузай!

LogStash дахь GROK ашиглан бүтэцгүй өгөгдлийг бүртгэлээс ELK стек рүү хөрвүүлэх зөвлөмж, аргачлалууд

Grok-ийн тусламжтайгаар таны бүртгэлийн өгөгдөл бүтэцлэгдсэн байна!

LogStash дахь GROK ашиглан бүтэцгүй өгөгдлийг бүртгэлээс ELK стек рүү хөрвүүлэх зөвлөмж, аргачлалууд

Дээрх зургаас харж байгаагаар Grok нь Elasticsearch-тэй бүртгэлийн өгөгдлийг автоматаар тааруулах чадвартай. Энэ нь бүртгэлийг удирдах, мэдээллийг хурдан хайхад хялбар болгодог. Дебаг хийхийн тулд бүртгэлийн файлуудыг ухахын оронд та орчин эсвэл url гэх мэт хайж буй зүйлээрээ шүүж болно.

Grok илэрхийлэлийг туршаад үзээрэй! Хэрэв танд үүнийг хийх өөр арга байгаа эсвэл дээрх жишээнүүдэд ямар нэгэн асуудал байгаа бол доор сэтгэгдэл бичээд надад мэдэгдээрэй.

Уншсанд баярлалаа, мөн Medium дээр намайг дагаж програм хангамжийн инженерийн талаар илүү сонирхолтой нийтлэлүүдийг үзнэ үү!

Нөөц

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/

Жич Эх сурвалжийн холбоос

Telegram суваг Elasticsearch

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх