LogStash'te GROK kullanarak yapılandırılmamış verileri günlüklerden ELK Stack'e dönüştürmek için ipuçları ve püf noktaları

GROK ile yapılandırılmamış verileri yapılandırmak

Elastic (ELK) yığınını kullanıyorsanız ve özel Logstash günlüklerini Elasticsearch'e eşlemekle ilgileniyorsanız, bu yazı tam size göre.

LogStash'te GROK kullanarak yapılandırılmamış verileri günlüklerden ELK Stack'e dönüştürmek için ipuçları ve püf noktaları

ELK yığını üç açık kaynak projesinin kısaltmasıdır: Elasticsearch, Logstash ve Kibana. Birlikte bir günlük yönetimi platformu oluştururlar.

  • Elasticsearch bir arama ve analitik sistemdir.
  • Logstash birden fazla kaynaktan aynı anda veri alan, onu dönüştüren ve ardından Elasticsearch gibi bir "zulaya" gönderen, sunucu tarafı bir veri işleme hattıdır.
  • Kibana Kullanıcıların Elasticsearch'teki çizelgeleri ve grafikleri kullanarak verileri görselleştirmesine olanak tanır.

Beats daha sonra geldi ve hafif bir veri göndericidir. Beats'in piyasaya sürülmesi, Elk Stack'ı Elastic Stack'e dönüştürdü, ancak konu bu değil.

Bu makale, Logstash'ta bulunan ve günlüklerinizi depoya gönderilmeden önce dönüştürebilen bir özellik olan Grok hakkındadır. Amacımız açısından sadece Logstash'tan Elasticsearch'e veri işlenmesinden bahsedeceğim.

LogStash'te GROK kullanarak yapılandırılmamış verileri günlüklerden ELK Stack'e dönüştürmek için ipuçları ve püf noktaları

Grok, Logstash içindeki, yapılandırılmamış verileri yapılandırılmış ve sorgulanabilir bir şeye ayrıştırmak için kullanılan bir filtredir. Normal bir ifadenin (regex) üzerinde bulunur ve günlük dosyalarındaki dizeleri eşleştirmek için metin kalıplarını kullanır.

İlerleyen bölümlerde göreceğimiz gibi, verimli log yönetimi söz konusu olduğunda Grok kullanmak büyük fark yaratıyor.

Grok olmadan günlük verileriniz yapılandırılmaz

LogStash'te GROK kullanarak yapılandırılmamış verileri günlüklerden ELK Stack'e dönüştürmek için ipuçları ve püf noktaları

Grok olmadan, günlükler Logstash'tan Elasticsearch'e gönderildiğinde ve Kibana'da işlendiğinde yalnızca mesaj değerinde görünürler.

Bu durumda anlamlı bilgilerin sorgulanması zordur çünkü tüm günlük verileri tek bir anahtarda depolanır. Günlük mesajları daha iyi organize edilse daha iyi olurdu.

Günlüklerden yapılandırılmamış veriler

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

Ham verilere yakından bakarsanız, bunların aslında her biri bir boşlukla ayrılmış farklı parçalardan oluştuğunu görürsünüz.

Daha deneyimli geliştiriciler muhtemelen her bir parçanın ne anlama geldiğini ve bu günlük mesajının ne olduğunu API çağrısından tahmin edebilir. Her bir öğenin sunumu aşağıda özetlenmiştir.

Verilerimizin yapılandırılmış görünümü

  • ​ localhost == çevre
  • ​ GET == yöntem
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == yanıt_durumu
  • ​ 46 ms == yanıt süresi
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Yapılandırılmış verilerde gördüğümüz gibi yapılandırılmamış günlükler için bir sıralama vardır. Bir sonraki adım ham verilerin yazılımla işlenmesidir. Burası Grok'un parladığı yer.

Grok Şablonları

Yerleşik Grok şablonları

Logstash, yapılandırılmamış verileri yapılandırmak için 100'den fazla yerleşik şablonla birlikte gelir. Apache, linux, haproxy, aws ve benzeri genel sistem günlükleri için mümkün olduğunca bundan kesinlikle yararlanmalısınız.

Ancak yukarıdaki örnekte olduğu gibi özel günlükleriniz olduğunda ne olur? Kendi Grok şablonunuzu oluşturmalısınız.

Özel Grok şablonları

Kendi Grok şablonunuzu oluşturmaya çalışmalısınız. kullandım Grok Hata Ayıklayıcı и Grok Desenleri.

Grok şablon sözdiziminin aşağıdaki gibi olduğunu unutmayın: %{SYNTAX:SEMANTIC}

Yapmaya çalıştığım ilk şey sekmeye gitmekti Keşfet Grok hata ayıklayıcısında. Bu aracın otomatik olarak bir Grok deseni oluşturabilmesinin harika olacağını düşündüm, ancak yalnızca iki eşleşme bulduğu için pek kullanışlı değildi.

LogStash'te GROK kullanarak yapılandırılmamış verileri günlüklerden ELK Stack'e dönüştürmek için ipuçları ve püf noktaları

Bu keşfi kullanarak, Elastic Github sayfasında bulunan sözdizimini kullanarak Grok hata ayıklayıcısında kendi şablonumu oluşturmaya başladım.

LogStash'te GROK kullanarak yapılandırılmamış verileri günlüklerden ELK Stack'e dönüştürmek için ipuçları ve püf noktaları

Farklı sözdizimleriyle uğraştıktan sonra nihayet günlük verilerini istediğim gibi yapılandırmayı başardım.

LogStash'te GROK kullanarak yapılandırılmamış verileri günlüklerden ELK Stack'e dönüştürmek için ipuçları ve püf noktaları

Grok Hata Ayıklayıcı Bağlantısı https://grokdebug.herokuapp.com/

Orjinal metin:

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

Desen:

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

Sonunda ne oldu

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

Grok şablonu ve eşlenen veriler elinizde olduğunda son adım, onu Logstash'a eklemektir.

Logstash.conf yapılandırma dosyasını güncelleme

ELK yığınını kurduğunuz sunucuda Logstash yapılandırmasına gidin:

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

Değişiklikleri yapıştı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" ]
  }
}

Değişikliklerinizi kaydettikten sonra Logstash'ı yeniden başlatın ve hala çalıştığından emin olmak için durumunu kontrol edin.

sudo service logstash restart
sudo service logstash status

Son olarak, değişikliklerin etkili olduğundan emin olmak için, Kibana'da Logstash için Elasticsearch dizininizi güncellediğinizden emin olun!

LogStash'te GROK kullanarak yapılandırılmamış verileri günlüklerden ELK Stack'e dönüştürmek için ipuçları ve püf noktaları

Grok ile log verileriniz yapılandırılmıştır!

LogStash'te GROK kullanarak yapılandırılmamış verileri günlüklerden ELK Stack'e dönüştürmek için ipuçları ve püf noktaları

Yukarıdaki görselde de görebileceğimiz gibi Grok, log verilerini Elasticsearch ile otomatik olarak eşleştirebilme yeteneğine sahiptir. Bu, günlükleri yönetmeyi ve bilgileri hızlı bir şekilde sorgulamayı kolaylaştırır. Hata ayıklamak için günlük dosyalarını derinlemesine incelemek yerine, aradığınız şeye (ortam veya URL gibi) göre filtre uygulayabilirsiniz.

Grok ifadelerini deneyin! Bunu yapmanın başka bir yolu varsa veya yukarıdaki örneklerle ilgili herhangi bir sorun yaşıyorsanız, aşağıya bir yorum yazarak bana bildirmeniz yeterli.

Okuduğunuz için teşekkürler ve daha ilginç yazılım mühendisliği makaleleri için lütfen beni Medium'da takip edin!

Ресурсы

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 Kaynak referansı

Telegram kanalı Elasticsearch

Kaynak: habr.com

Yorum ekle