Auteur de la discussion #1
jq ile JSON Günlük Analizi

Günlük (log) verileri modern uygulamalarda sıkça JSON formatında saklanır. Bu yazıda, jq aracıyla bu günlüklerden anlamlı özetler çıkarmak için temel ve ileri seviyede teknikler üzerinde duracağız. Amaç, hızlı filtreleme, dönüştürme ve özet çıkarma adımlarını somut örneklerle ortaya koymaktır.


Giriş ve temel yaklaşım
Günlük dosyaları genelde her satırda JSON objesi barındırır. jq ile bu satırları topluca işlemek için birkaç temel komut kullanılır:
  • Belirli alanları seçme: .timestamp, .level, .message gibi alanlara erişim.
  • Filtreleme: .level == "error" veya .lvl | contains("warn") gibi koşullarla satırları daraltma.
  • Gruplama ve özet: map(..) ve group_by() ile seviyelere göre sınıflama ve count, min/max, avg çıkarımı.
  • Zaman aralığı: .timestamp üzerinde tarih aralıklarıyla filtrasyon yapma.


Uygulamalı örnekler
1) Günlüklerden hata seviyesini filtreleme ve özetleme
jq '
select(.level == "error")
| { ts: .timestamp, msg: .message }
' logfile.jsonl

Bu, sadece hata satırlarını alır ve her satır için zaman damgası ile mesajı gösterir.

2) Belirli zaman aralığındaki hataları sayma
jq '
select(.level == "error" and (.timestamp | fromdateiso8601 >= 1700000000 and .timestamp | fromdateiso8601 < 1700860800))
| .timestamp
' logfile.jsonl | wc -l

3) Günlüklerden saatlik frekans
jq '
.timestamp as $ts
| ([$ts] | fromdateiso8601) as $t
| (. as $line)
' logfile.jsonl > /tmp/lines.tmp
Daha pratik için dışarı aktarıp bir arayüz ile görselleştirme yapılır.

İleri düzey teknikler
  • Çok büyük dosyalar için akış halinde işleme: jq -n 'input' ile her satırı işleyen bir akış kurabilir veya awk ile dosyayı satır satır işlemeye tercih edebilirsiniz.
  • Tarih/IP gibi alanlar için dönüştürmeler: fromdateiso8601, strftime ile biçimlendirme, veya gmtime/strftime ile saat dilimi farklarını hesaba katma.
  • Karmaşık filtreler: .requestId as $id | select(any_of([ .level, .status ]; . == "error")) gibi ifadelerle çoklu kriterleri aynı anda yönetme.


Kullanım ipuçları ve sınırlar
  • Hız ve bellek dengesi için filtreleri erkende uygulayın; çok sayıda dönüşüm yerine sade alanlar çekmek daha etkilidir.
  • JSONMLines formatında günlükler genelde satır başına bir JSON objesi içerir; bu durumda jq'yu satır bazında kullanmak güvenlidir.
  • Zamanı unix epoch veya ISO 8601 olarak tutarken, dönüştürme adımlarını tek bir yerde toplayıp sonraki aşamalara aktarın.


Bu tekniklerle günlük analizlerinde hangi satırların önemli olduğunu hızlıca ayırıp, zamanla nasıl bir dağılım gördüğünüzü netleştirebilirsiniz. İlgili günlük yapılarına göre daha özel jq ifadelerini birlikte inceleyelim.

Hangi tür günlük yapınız ve hangi özetleri çıkarmak istiyorsunuz? Örnek birkaç satır paylaşabilirseniz, ona göre spesifik jq tarifleri öneririm.

Vous devez être connecté pour répondre.

Utilisateurs qui consultent cette discussion (Total: 4, Membres: 4, Invités: 0)
Total: 4 (membres: 4, invités: 0)
0 citations sélectionnées