0Pricing
Linux Command Line & Bash Scripting Mastery · Ders

Gerçek Zamanlı Günlük Takibi ve Akış Uyarıları

Canlı günlük akışlarını tail ile izleyip filtreleyerek hata desenleri görülür görülmez uyarılar oluşturun.

Gerçek Zamanlı Günlük Takibi ve Akış Uyarıları, CoddyKit'te ücretsiz bir Linux Command Line & Bash Scripting Mastery dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Linux Command Line & Bash Scripting Mastery öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Linux Command Line & Bash Scripting Mastery kursu toplamda 4 dersten oluşur.

Gerçek Zamanlı Günlük Takibi Neden Önemlidir

Üretim sistemlerinde günlük dosyaları sürekli büyür. Bir sorunun bildirilmesini bekleyip günlükleri incelemeniz, kesintinin size zaten maliyet oluşturduğu anlamına gelir. Gerçek zamanlı günlük takibi, olayları yazıldıkları anda izlemenizi sağlar; böylece arızalara, güvenlik olaylarına ve performans düşüşlerine hemen yanıt verebilirsiniz.

  • Web sunucuları her istek için bir satır yazar; hatalar anında görünür
  • Uygulama artalan hizmetleri, bir özel durum oluştuğu anda yığın izlerini günlüğe kaydeder
  • Kimlik doğrulama sistemleri başarısız oturum açma girişimlerini gerçek zamanlı olarak kaydeder

Bunun temel Unix aracı tail -f komutudur. Ham günlük akışlarını eyleme geçirilebilir sinyallere dönüştürmek için filtreleme ve uyarı yardımcı programlarıyla birlikte kullanılır.

tail -f: Canlı Günlüğü Takip Etme

tail -f (takip etme), dosyayı açık tutar ve dosyanın sonuna eklenen yeni satırları yazdırır. Bu, gerçek zamanlı günlük takibi için en basit ve en yaygın bulunan araçtır.

Yaygın kullanım biçimleri:

  • tail -f /var/log/syslog — sistem günlüğünü takip etme
  • tail -n 50 -f app.log — son 50 satırı gösterip ardından takip etme
  • tail -f /var/log/nginx/access.log — nginx isteklerini canlı olarak takip etme

Durdurmak için Ctrl+C tuşlarına basın. İptal edene veya uçbirim kapanana kadar süreç bağlı kalır.

#!/usr/bin/env bash
# Simulate a live log and follow it
LOGFILE='/tmp/demo_app.log'

# Write a header
echo '[INFO] Application started' >> "$LOGFILE"

# In a real scenario you would run:
# tail -f "$LOGFILE"
# Below we demonstrate tail showing the last 3 lines then exit
tail -n 3 "$LOGFILE"

tail -F: Günlük Döndürülmesine Dayanma

Birçok sistem, günlük dosyalarını gece yarısında veya belirli bir boyut sınırına ulaştıklarında döndürür. Bu olduğunda özgün dosyanın adı değiştirilir (ör. app.log.1) ve yeni bir app.log oluşturulur. tail -f kullanırken sessizce eski, yeniden adlandırılmış dosyayı okumaya devam eder ve tüm yeni çıktıları kaçırırsınız.

tail -F (büyük F), dosya tanımlayıcısını değil dosya adını izleyerek bu sorunu çözer. Dosya ortadan kalkıp yeniden göründüğünde tail -F dosyayı otomatik olarak yeniden açar ve takibe devam eder.

  • Üretim betiklerinde her zaman tail -f yerine tail -F kullanmayı tercih edin
  • Dosyaları döndüren logrotate, newsyslog ve Docker günlük sürücüleriyle çalışır
# Follow nginx access log, surviving log rotation
tail -F /var/log/nginx/access.log

# Follow multiple files simultaneously
tail -F /var/log/nginx/access.log /var/log/nginx/error.log

Akışı grep ile Filtreleme

Yoğun bir günlüğü ham hâliyle takip etmek bunaltıcıdır; etkin bir web sunucusu saniyede yüzlerce satır yazabilir. Yalnızca ilgilendiğiniz kalıpları ayıklamak için tail -F çıktısını grep komutuna yönlendirin.

Akış hâlindeki grep için temel seçenekler:

  • --line-buffered — eşleşen her satırı arabelleğe almak yerine hemen gönderir; iş akışlarında gereklidir, aksi takdirde çıktı gecikebilir veya kaybolabilir
  • -i — büyük/küçük harfe duyarsız eşleşme
  • -E — alternatifler için genişletilmiş düzenli ifade (error|warn|crit)
  • -v — eşleşmeyi tersine çevirme (satırları hariç tutma)
# Show only ERROR and WARN lines from a live application log
tail -F /var/log/myapp/app.log | grep --line-buffered -Ei 'error|warn|critical'

# Follow nginx and exclude health-check requests
tail -F /var/log/nginx/access.log | grep --line-buffered -v '/health'

awk ile Zaman Damgaları ve Bağlam Ekleme

Günlük satırlarında bazen ilk incelemeye yardımcı olacak bağlam bulunmaz. Yerel bir zaman damgası eklemek, alanları çıkarmak veya okunabilirlik için çıktıyı yeniden biçimlendirmek üzere awk kullanarak akışı gerçek zamanlı olarak zenginleştirebilirsiniz.

awk, yönlendirme yapıldığında akış (satır arabelleğe alınmış) kipinde de çalışır; bu nedenle ek seçenekler olmadan canlı iş akışlarında güvenle kullanılabilir.

# Prepend a reception timestamp to every ERROR line
tail -F /var/log/myapp/app.log | \
  grep --line-buffered -i 'error' | \
  awk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0; fflush() }'

# Extract HTTP status code (field 9) and URL (field 7) from nginx combined log
tail -F /var/log/nginx/access.log | \
  awk '{ print $9, $7; fflush() }' | \
  grep --line-buffered '^5'

Slack Web Kancalarıyla Uyarı Gönderme

Filtreleme işin yalnızca yarısıdır; bir hata kalıbı algıladığınızda birini bilgilendirmeniz gerekir. Slack gelen web kancası, webhook URL'si dışında Slack SDK veya kimlik bilgileri gerektirmeden tek bir curl çağrısıyla bir kanala POST iletisi göndermenizi sağlar.

Kalıp şöyledir: akışı filtreleyin ve eşleşen her satır için bir HTTP POST gönderin.

#!/usr/bin/env bash
# Real-time alert: send every ERROR line to a Slack channel
LOGFILE='/var/log/myapp/app.log'
WEBHOOK_URL='https://hooks.slack.com/services/T000/B000/XXXX'

tail -F "$LOGFILE" | grep --line-buffered -i 'error' | while IFS= read -r line; do
  payload=$(printf '{"text":"*[ERROR ALERT]*\n%s"}' "$line")
  curl -s -o /dev/null -X POST -H 'Content-Type: application/json' \
    -d "$payload" "$WEBHOOK_URL"
done

Gürültüyü Önlemek için Uyarıları Hız Sınırlama

Bir günlük fırtınası dakikada binlerce hata satırı oluşturabilir. Her satır için bir Slack iletisi göndermek kanalı doldurur ve uyarı yorgunluğuna neden olur. Hız sınırlama gerekir: uyarıyı gönderin, ardından bir bekleme süresi boyunca sonraki bildirimleri bastırın.

Bu işlem basit bir zaman damgası dosyasıyla gerçekleştirilir: son uyarının ne zaman gönderildiğini kaydedin ve bekleme süresi dolmadıysa uyarıyı göndermeyin.

#!/usr/bin/env bash
# Alert on ERROR lines but no more than once every 60 seconds
LOGFILE='/var/log/myapp/app.log'
WEBHOOK_URL='https://hooks.slack.com/services/T000/B000/XXXX'
COOLDOWN=60
LAST_ALERT_FILE='/tmp/last_alert_ts'

tail -F "$LOGFILE" | grep --line-buffered -i 'error' | while IFS= read -r line; do
  now=$(date +%s)
  last=0
  [ -f "$LAST_ALERT_FILE" ] && last=$(cat "$LAST_ALERT_FILE")

  if (( now - last >= COOLDOWN )); then
    echo "$now" > "$LAST_ALERT_FILE"
    payload=$(printf '{"text":"*[ERROR ALERT]*\n%s"}' "$line")
    curl -s -o /dev/null -X POST -H 'Content-Type: application/json' \
      -d "$payload" "$WEBHOOK_URL"
    echo "[$(date)] Alert sent: $line"
  else
    echo "[$(date)] Suppressed (cooldown): $line"
  fi
done

Kayan Pencereyle Hata Patlamalarını Sayma

Bazen tek bir hata satırı önemli değildir; ancak 30 saniyede 20 hata ciddi bir sorundur. Kayan pencere sayacı, uyarıları yalnızca hata oranı eşiği aşıldığında tetiklemenizi sağlar ve yanlış pozitifleri azaltır.

Bu teknikte, eşleşen her olayın çağ başlangıcından bu yana geçen süre zaman damgası geçici bir dosyada saklanır; ardından uyarı verilip verilmeyeceğine karar vermeden önce pencere içinde kalanların sayısı belirlenir.

#!/usr/bin/env bash
# Alert when more than 10 errors occur within any 60-second window
LOGFILE='/var/log/myapp/app.log'
WINDOW=60
THRESHOLD=10
TS_FILE='/tmp/error_timestamps'
WEBHOOK_URL='https://hooks.slack.com/services/T000/B000/XXXX'

tail -F "$LOGFILE" | grep --line-buffered -i 'error' | while IFS= read -r line; do
  now=$(date +%s)
  echo "$now" >> "$TS_FILE"

  # Keep only timestamps within the window
  cutoff=$(( now - WINDOW ))
  tmp=$(mktemp)
  awk -v c="$cutoff" '$1 > c' "$TS_FILE" > "$tmp" && mv "$tmp" "$TS_FILE"

  count=$(wc -l < "$TS_FILE")
  if (( count > THRESHOLD )); then
    msg="*[BURST ALERT]* ${count} errors in ${WINDOW}s — last: ${line}"
    curl -s -o /dev/null -X POST -H 'Content-Type: application/json' \
      -d "{\"text\":\"$msg\"}" "$WEBHOOK_URL"
    # Clear to avoid re-alerting until next burst
    > "$TS_FILE"
  fi
done

journalctl -f: systemd Günlüklerini Takip Etme

Modern Linux sistemlerinde (RHEL, Ubuntu 20.04+, Debian 10+) hizmetler düz metin dosyaları yerine systemd günlüğüne yazar. journalctl -f, günlük için tail -F eşdeğeridir.

Yararlı seçenekler:

  • -u myapp.service — yalnızca belirli bir birimi takip etme
  • -p err — önceliğe göre filtreleme (emerg, alert, crit, err, warning, notice, info, debug)
  • --since '5 min ago' — göreli bir zamandan başlatma
  • -o json — makine tarafından ayrıştırılmak üzere yapılandırılmış JSON çıktısı
# Follow only error-and-above entries for nginx
journalctl -f -u nginx.service -p err

# Stream journal as JSON and extract MESSAGE field with jq
journalctl -f -u myapp.service -o json | \
  jq --unbuffered -r 'select(.PRIORITY <= "3") | .MESSAGE'

multitail ve Renk Kodlu Çok Kaynaklı İzleme

Aynı anda birkaç günlük kaynağını izlemeniz gerektiğinde multitail, uçbirimi bölmelere ayırır; her bölme farklı bir dosyayı veya komutu takip eder ve isteğe bağlı olarak kalıba göre renk kodlaması yapar.

multitail kurulu değilse hafif ve yalnızca BASH kullanan bir seçenek, her akışın başına kaynak adını ekleyip akışları tek bir görünümde birleştirmektir.

# multitail: watch nginx access + error + app log in split panes
# (requires: apt install multitail  or  brew install multitail)
multitail /var/log/nginx/access.log /var/log/nginx/error.log /var/log/myapp/app.log

# Pure-Bash alternative — merge three streams with labeled prefixes
(
  tail -F /var/log/nginx/access.log | sed --unbuffered 's/^/[nginx-access] /' &
  tail -F /var/log/nginx/error.log  | sed --unbuffered 's/^/[nginx-error]  /' &
  tail -F /var/log/myapp/app.log    | sed --unbuffered 's/^/[myapp]        /' &
  wait
)

Kendi Kendine Yetebilen Bir Uyarı Artalan Hizmeti Oluşturma

Bu dersteki her şeyi bir araya getiren, üretim kalitesinde bir uyarı artalan hizmeti şunları yapmalıdır:

  • Günlük dosyasını tail -F ile güvenilir biçimde takip etme
  • Arabelleğe alınmış grep ile kritik kalıpları filtreleme
  • Uyarı yorgunluğunu önlemek için bildirimleri hız sınırlama
  • Gönderilenleri denetleyebilmeniz için kendi etkinliklerini günlüğe kaydetme
  • systemd veya bir süreç yöneticisi tarafından yönetilen bir artalan süreci olarak çalışma

Aşağıdaki betik, /usr/local/bin/ içine yerleştirip systemd ile yönetebileceğiniz, asgari ancak eksiksiz bir artalan hizmetidir.

#!/usr/bin/env bash
# log_alert_daemon.sh — tail a log and fire Slack alerts with cooldown
set -euo pipefail

LOGFILE=${1:-'/var/log/myapp/app.log'}
PATTERN=${2:-'error|critical|fatal'}
WEBHOOK_URL=${SLACK_WEBHOOK_URL:?'Set SLACK_WEBHOOK_URL env var'}
COOLDOWN=${ALERT_COOLDOWN:-120}
DAEMON_LOG='/var/log/log_alert_daemon.log'
LAST_SENT_FILE='/tmp/log_alert_last_sent'

log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$DAEMON_LOG"; }

log "Starting alert daemon: watching $LOGFILE for pattern: $PATTERN"

tail -F "$LOGFILE" | grep --line-buffered -Ei "$PATTERN" | while IFS= read -r line; do
  now=$(date +%s)
  last=0
  [ -f "$LAST_SENT_FILE" ] && last=$(cat "$LAST_SENT_FILE")

  if (( now - last >= COOLDOWN )); then
    echo "$now" > "$LAST_SENT_FILE"
    msg=$(printf '{"text":"*[ALERT]* %s\n%s"}' "$(hostname)" "$line")
    if curl -s -o /dev/null -w '%{http_code}' -X POST \
         -H 'Content-Type: application/json' -d "$msg" "$WEBHOOK_URL" | grep -q '^200$'; then
      log "Alert sent: $line"
    else
      log "Alert FAILED to send: $line"
    fi
  else
    log "Suppressed (cooldown ${COOLDOWN}s): $line"
  fi
done

Bilgi Kontrolü: Akış Hâlindeki Günlük İş Akışları

Gerçek zamanlı günlük takibi ve akış hâlindeki uyarılar konusundaki anlayışınızı sınayın.

Bir BASH iş akışı bir günlük dosyasını takip ediyor ve eşleşen her satır için bir Slack uyarısı gönderiyor. Bir günlük fırtınası sırasında 10 saniyede 3.000 hata satırı yazılıyor. Betiğin Slack kanalını 3.000 iletiyle doldurmasını en iyi önleyen tek değişiklik hangisidir?

Ders Özeti: Gerçek Zamanlı Günlük Takibi ve Akış Hâlindeki Uyarılar

Bu derste, temel ilkelerden başlayarak eksiksiz bir gerçek zamanlı günlük gözlemlenebilirliği iş akışı oluşturdunuz:

  • tail -F bir günlük dosyasını adına göre takip eder ve günlük döndürülmesine dayanır; üretimde her zaman tail -f yerine bunu tercih edin
  • grep --line-buffered canlı akışı gecikme eklemeden filtreler; yönlendirmeli grep komutlarında her zaman bu seçeneği ekleyin
  • fflush() kullanan awk, her satırı akış için güvenli bir şekilde zaman damgaları veya çıkarılan alanlarla zenginleştirir
  • curl üzerinden Slack web kancaları tek bir HTTP POST ile uyarı gönderir; SDK gerekmez
  • Bekleme süresi dosyaları, bildirimler arasında en az bir aralık zorunlu kılarak günlük fırtınaları sırasında uyarı yorgunluğunu önler
  • Kayan pencere sayaçları, her bir satıra tepki vermek yerine hata patlamalarını (orana dayalı uyarı) algılar
  • journalctl -f, yerleşik öncelik filtreleme ve JSON çıktısıyla tail -F komutunun systemd'ye özgü eşdeğeridir
  • Kendi kendine yeten bir uyarı artalan hizmeti betiği, tüm bu kalıpları birleştirir ve üretim güvenilirliği için systemd tarafından yönetilebilir

Bu temel yapı taşları, herhangi bir özel gözlemlenebilirlik iş akışının temelini oluşturur; üçüncü taraf aracı gerekmez.

Sıkça Sorulan Sorular

“Gerçek Zamanlı Günlük Takibi ve Akış Uyarıları” dersi ücretsiz mi?

Evet — “Gerçek Zamanlı Günlük Takibi ve Akış Uyarıları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Linux Command Line & Bash Scripting Mastery kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Linux Command Line & Bash Scripting Mastery kursu toplamda 4 dersten oluşur.

“Gerçek Zamanlı Günlük Takibi ve Akış Uyarıları” dersinde ne öğreneceğim?

Canlı günlük akışlarını tail ile izleyip filtreleyerek hata desenleri görülür görülmez uyarılar oluşturun. Linux Command Line & Bash Scripting Mastery ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Linux Command Line & Bash Scripting Mastery öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Linux Command Line & Bash Scripting Mastery, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Gerçek Zamanlı Günlük Takibi ve Akış Uyarıları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Linux Command Line & Bash Scripting Mastery dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Linux Command Line & Bash Scripting Mastery dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Web ve Uygulama Günlüklerini Büyük Ölçekte Ayrıştırma
  2. Gerçek Zamanlı Günlük Takibi ve Akış Uyarıları
  3. Betiklerde journalctl ile journald Sorgulama
  4. Günlük Akışlarından Ölçümler ve Histogramlar Hesaplama
← Linux Command Line & Bash Scripting Mastery Sayfasına Dön