LogStash-da GROK istifadə edərək strukturlaşdırılmamış məlumatları loglardan ELK Stack-ə çevirmək üçün məsləhətlər və fəndlər

GROK ilə strukturlaşdırılmamış məlumatların strukturlaşdırılması

Əgər siz Elastic (ELK) yığınından istifadə edirsinizsə və xüsusi Logstash qeydlərini Elasticsearch-a çəkməklə maraqlanırsınızsa, bu yazı sizin üçündür.

LogStash-da GROK istifadə edərək strukturlaşdırılmamış məlumatları loglardan ELK Stack-ə çevirmək üçün məsləhətlər və fəndlər

ELK yığını üç açıq mənbəli layihənin qısaldılmasıdır: Elasticsearch, Logstash və Kibana. Birlikdə onlar log idarəetmə platformasını təşkil edirlər.

  • Elasticsearch axtarış və analitik sistemdir.
  • Logstash eyni vaxtda birdən çox mənbədən məlumatları qəbul edən, onları dəyişdirən və sonra Elasticsearch kimi "saklama"ya göndərən server tərəfi məlumat emal boru kəməridir.
  • Kibana istifadəçilərə Elasticsearch-də qrafiklər və qrafiklərdən istifadə edərək məlumatları vizuallaşdırmağa imkan verir.

Beats sonra gəldi və yüngül məlumat daşıyıcısıdır. Beats-in tətbiqi Elk Stack-i Elastik Yığına çevirdi, lakin məsələ bu deyil.

Bu məqalə Logstash-da qeydlərinizi anbara göndərilməmişdən əvvəl dəyişdirə bilən bir xüsusiyyət olan Grok haqqındadır. Məqsədlərimiz üçün mən yalnız Logstash-dan Elasticsearch-də məlumatların işlənməsi haqqında danışacağam.

LogStash-da GROK istifadə edərək strukturlaşdırılmamış məlumatları loglardan ELK Stack-ə çevirmək üçün məsləhətlər və fəndlər

Grok, strukturlaşdırılmamış məlumatları strukturlaşdırılmış və sorğulana bilən bir şeyə təhlil etmək üçün istifadə olunan Logstash daxilindəki bir filtrdir. O, müntəzəm ifadənin (regex) üstündə oturur və log fayllarında sətirləri uyğunlaşdırmaq üçün mətn nümunələrindən istifadə edir.

Növbəti bölmələrdə görəcəyimiz kimi, Grok-dan istifadə səmərəli log idarəçiliyinə gəldikdə böyük fərq yaradır.

Grok olmadan log datanız strukturlaşdırılmamışdır

LogStash-da GROK istifadə edərək strukturlaşdırılmamış məlumatları loglardan ELK Stack-ə çevirmək üçün məsləhətlər və fəndlər

Grok olmadan, loglar Logstash-dan Elasticsearch-ə göndərildikdə və Kibana-da təqdim edildikdə, onlar yalnız mesaj dəyərində görünür.

Bu vəziyyətdə mənalı məlumatı sorğulamaq çətindir, çünki bütün log məlumatları bir açarda saxlanılır. Günlük mesajları daha yaxşı təşkil edilsə, daha yaxşı olardı.

Qeydlərdən strukturlaşdırılmamış məlumatlar

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

Xam məlumatlara diqqətlə baxsanız, onun əslində hər biri boşluqla ayrılmış müxtəlif hissələrdən ibarət olduğunu görəcəksiniz.

Daha təcrübəli tərtibatçılar üçün, yəqin ki, hissələrin hər birinin nə demək olduğunu və API çağırışından həmin log mesajının nə olduğunu təxmin edə bilərsiniz. Hər bir maddənin təqdimatı aşağıda verilmişdir.

Məlumatlarımızın strukturlaşdırılmış görünüşü

  • localhost == mühit
  • GET == üsulu
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == cavab_status
  • ​ 46ms == cavab_zamanı
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Strukturlaşdırılmış məlumatlarda gördüyümüz kimi, strukturlaşdırılmamış qeydlər üçün sifariş var. Növbəti addım xam məlumatların proqram təminatı ilə işlənməsidir. Qrokun parladığı yer budur.

Grok şablonları

Quraşdırılmış Grok şablonları

Logstash, strukturlaşdırılmamış məlumatların strukturlaşdırılması üçün 100-dən çox daxili şablonla gəlir. Apache, linux, haproxy, aws və s. kimi ümumi syslogs üçün mümkün olduqda mütləq bundan faydalanmalısınız.

Bununla belə, yuxarıdakı nümunədəki kimi fərdi qeydləriniz olduqda nə baş verir? Öz Grok şablonunuzu yaratmalısınız.

Xüsusi Grok şablonları

Öz Grok şablonunuzu yaratmağa çalışmalısınız. Mən istifadə etdim Grok Debugger и Grok Nümunələri.

Qeyd edək ki, Grok şablon sintaksisi aşağıdakı kimidir: %{SYNTAX:SEMANTIC}

Etməyə çalışdığım ilk şey nişana keçmək oldu Kəşf etmək Grok sazlayıcıda. Düşündüm ki, bu alət avtomatik olaraq Grok nümunəsi yarada bilsəydi, yaxşı olardı, lakin o, yalnız iki uyğunluq tapdığı üçün çox faydalı olmadı.

LogStash-da GROK istifadə edərək strukturlaşdırılmamış məlumatları loglardan ELK Stack-ə çevirmək üçün məsləhətlər və fəndlər

Bu kəşfdən istifadə edərək, Elastic Github səhifəsində tapılan sintaksisdən istifadə edərək Grok debugger-də öz şablonumu yaratmağa başladım.

LogStash-da GROK istifadə edərək strukturlaşdırılmamış məlumatları loglardan ELK Stack-ə çevirmək üçün məsləhətlər və fəndlər

Fərqli sintaksislərlə oynadıqdan sonra nəhayət log məlumatlarını istədiyim kimi strukturlaşdıra bildim.

LogStash-da GROK istifadə edərək strukturlaşdırılmamış məlumatları loglardan ELK Stack-ə çevirmək üçün məsləhətlər və fəndlər

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

Orijinal mətn:

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

Pattern:

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

Sonda nə oldu

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

Grok şablonu və əlinizdə xəritələşdirilmiş məlumatlar ilə son addım onu ​​Logstash-a əlavə etməkdir.

Logstash.conf konfiqurasiya faylının yenilənməsi

ELK yığınını quraşdırdığınız serverdə Logstash konfiqurasiyasına keçin:

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

Dəyişiklikləri yapışdırın.

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

Dəyişikliklərinizi saxladıqdan sonra Logstash-ı yenidən başladın və hələ də işlədiyinə əmin olmaq üçün onun statusunu yoxlayın.

sudo service logstash restart
sudo service logstash status

Nəhayət, dəyişikliklərin qüvvəyə mindiyinə əmin olmaq üçün, Kibana'da Logstash üçün Elasticsearch indeksinizi yeniləməyinizə əmin olun!

LogStash-da GROK istifadə edərək strukturlaşdırılmamış məlumatları loglardan ELK Stack-ə çevirmək üçün məsləhətlər və fəndlər

Grok ilə log məlumatlarınız strukturlaşdırılmışdır!

LogStash-da GROK istifadə edərək strukturlaşdırılmamış məlumatları loglardan ELK Stack-ə çevirmək üçün məsləhətlər və fəndlər

Yuxarıdakı şəkildə gördüyümüz kimi, Grok jurnal məlumatlarını Elasticsearch ilə avtomatik uyğunlaşdırmağa qadirdir. Bu, qeydləri idarə etməyi və məlumatı tez sorğulamağı asanlaşdırır. Sazlamaq üçün jurnal fayllarını araşdırmaq əvəzinə, sadəcə mühit və ya url kimi axtardığınıza görə süzgəcdən keçirə bilərsiniz.

Grok ifadələrini sınayın! Bunu etmək üçün başqa üsulunuz varsa və ya yuxarıdakı nümunələrlə bağlı hər hansı probleminiz varsa, mənə bildirmək üçün aşağıda şərh yazmağınız kifayətdir.

Oxuduğunuz üçün təşəkkürlər və daha maraqlı proqram mühəndisliyi məqalələri üçün Medium-da məni izləyin!

Resurslar

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 Mənbə linki

Telegram kanalı tərəfindən Elasticsearch

Mənbə: www.habr.com

Добавить комментарий