lnav (Log File Navigator) - Kapsamlı Rehber
Log dosyalarını analiz etmek sistem yöneticisi ve geliştiricilerin en sık karşılaştığı görevlerden biridir. tail -f
, grep
, less
gibi araçları birliştirip sürekli terminal değiştirmek yorucu değil mi? lnav (Log File Navigator) tam bu sorunu çözmek için tasarlanmış devrimsel bir araçtır.
🎯 lnav Nedir?
lnav, log dosyalarını analiz etmek için özel olarak tasarlanmış gelişmiş bir terminal uygulamasıdır. Apache, Nginx, systemd journal, Docker, PostgreSQL ve yüzlerce farklı log formatını otomatik olarak algılayarak tek bir arayüzde birleştirir.
Temel Avantajlar:
- Çoklu format desteği: 100+ log formatını otomatik algılar
- Gerçek zamanlı izleme: Dosyalar değiştikçe otomatik güncellenir
- SQL sorguları: Log verilerini SQL ile sorgulayabilirsiniz
- Zaman senkronizasyonu: Farklı kaynaklardan gelen logları zaman damgasına göre birleştirir
- Görsel arayüz: Renkli syntax highlighting ve histogram görünümü
💾 Kurulum
Linux (Debian/Ubuntu):
# APT ile kurulum
sudo apt-get update
sudo apt-get install lnav
# Snap ile kurulum
sudo snap install lnav
Linux (Red Hat/CentOS/Fedora):
# DNF ile kurulum (Fedora)
sudo dnf install lnav
# YUM ile kurulum (CentOS/RHEL)
sudo yum install lnav
# EPEL repository gerekli olabilir
sudo yum install epel-release
macOS:
# Homebrew ile kurulum (önerilen)
brew install lnav
# MacPorts ile kurulum
sudo port install lnav
Windows:
# Scoop ile kurulum
scoop install lnav
# Chocolatey ile kurulum
choco install lnav
# WSL içinde Linux kurulum komutları kullanılabilir
Kaynak Koddan Kurulum:
# Gerekli bağımlılıklar
sudo apt-get install build-essential libncurses5-dev libreadline-dev zlib1g-dev libbz2-dev libsqlite3-dev libcurl4-openssl-dev
# Kaynak kodunu indirme ve derleme
wget https://github.com/tstack/lnav/releases/download/v0.11.2/lnav-0.11.2.tar.gz
tar xzf lnav-0.11.2.tar.gz
cd lnav-0.11.2
./configure
make
sudo make install
🚀 Temel Kullanım
Hızlı Başlangıç
# Tek dosya açma
lnav /var/log/syslog
# Birden fazla dosya açma
lnav /var/log/nginx/access.log /var/log/nginx/error.log
# Dizindeki tüm logları açma
lnav /var/log/
# Compressed logları da dahil etme
lnav /var/log/*.log /var/log/*.gz
Gerçek Zamanlı İzleme
# Watch mode ile başlatma
lnav -t /var/log/syslog
# Tail mode (yeni satırları takip et)
lnav -f /var/log/apache2/access.log
# Recursive mode (alt dizinleri de tara)
lnav -r /var/log/
🎮 İnteraktif Komutlar ve Klavye Kısayolları
Navigasyon Kısayolları
Kısayol | Açıklama |
---|---|
Space/b | Sayfa aşağı/yukarı |
↑/↓ | Satır aşağı/yukarı |
Home/End | Dosya başı/sonu |
g/G | Belirli satıra git / Son satıra git |
n/N | Sonraki/önceki arama sonucu |
/ | Arama modunu aç |
Zaman Navigasyonu
Kısayol | Açıklama |
---|---|
t | Zaman damgası görünümünü aç/kapat |
T | Belirli zamana git |
d/D | Bir gün ileri/geri |
h/H | Bir saat ileri/geri |
m/M | Bir dakika ileri/geri |
Filtreleme ve Görünüm
Kısayol | Açıklama |
---|---|
f | Filtre menüsünü aç |
F | Tüm filtreleri temizle |
s | Histogram görünümünü aç/kapat |
x | Log level görünümü |
X | Genişletilmiş görünüm |
🔍 SQL Sorguları ile Log Analizi
lnav'ın en güçlü özelliklerinden biri, log verilerini SQL ile sorgulayabilmesidir.
Temel SQL Komutları
-- Komut satırını açmak için `:` tuşuna basın
-- Tüm ERROR seviyesindeki logları göster
:filter-in log_level = 'error'
-- Son 1 saatteki logları listele
SELECT * FROM all_logs WHERE log_time >= datetime('now', '-1 hour')
-- IP adresine göre gruplama (Apache/Nginx logları için)
SELECT c_ip, count(*) as hit_count
FROM access_log
GROUP BY c_ip
ORDER BY hit_count DESC
LIMIT 10
-- HTTP status kodlarını analiz et
SELECT sc_status, count(*) as count
FROM access_log
WHERE log_time >= datetime('now', '-1 day')
GROUP BY sc_status
ORDER BY count DESC
-- Error loglarındaki en sık tekrar eden mesajları bul
SELECT log_body, count(*) as frequency
FROM all_logs
WHERE log_level = 'error'
GROUP BY log_body
ORDER BY frequency DESC
LIMIT 5
Gelişmiş Sorgular
-- Zaman bazlı analiz (saatlik breakdown)
SELECT strftime('%H', log_time) as hour, count(*) as request_count
FROM access_log
WHERE log_time >= date('now')
GROUP BY hour
ORDER BY hour
-- Response time analizi
SELECT avg(duration), min(duration), max(duration)
FROM access_log
WHERE sc_status = 200
-- Hata oranı hesaplama
SELECT (SELECT count(*) FROM access_log WHERE sc_status >= 400) * 100.0 /
(SELECT count(*) FROM access_log) as error_percentage
-- Unique ziyaretçi sayısı
SELECT count(DISTINCT c_ip) as unique_visitors
FROM access_log
WHERE log_time >= date('now')
📊 Gelişmiş Özellikler
1. Otomatik Format Algılama
lnav otomatik olarak şu formatları algılar:
- Apache Common/Combined Log Format
- Nginx access/error logs
- Syslog (RFC3164/RFC5424)
- systemd Journal
- Docker container logs
- PostgreSQL logs
- MySQL logs
- JSON structured logs
- ve 100+ format daha...
2. Custom Format Tanımlama
~/.lnav/formats/
dizininde custom format dosyaları:
cat > ~/.lnav/formats/myapp.json << EOF
{
"myapp_log": {
"title": "My Application Log Format",
"description": "Custom log format for my application",
"url": "http://example.com/log-format",
"regex": {
"std": {
"pattern": "^(?P\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) \\[(?P\\w+)\\] (?P.*)"
}
},
"timestamp-field": "timestamp",
"level-field": "level",
"body-field": "body"
}
}
EOF
3. Bookmarks ve Annotations
# Önemli logları işaretle
:bookmark "Critical error occurred"
# Annotation ekle
:comment "This error started the cascade failure"
# Bookmark listesini görüntüle
:bookmarks
4. Session Yönetimi
# Session kaydet
:save-session /tmp/debug-session.lnav
# Session yükle
lnav -s /tmp/debug-session.lnav
# Son session'ı otomatik yükle
lnav -r
🔧 Pratik Kullanım Senaryoları
Senaryo 1: Web Server Log Analizi
# Nginx access ve error loglarını birlikte analiz
lnav /var/log/nginx/access.log /var/log/nginx/error.log
# SQL ile analiz
:;SELECT c_ip, count(*) FROM access_log GROUP BY c_ip ORDER BY count(*) DESC LIMIT 10
:filter-in sc_status >= 400
Senaryo 2: Sistem Hatalarını Takip
# Systemd journal ve syslog birlikte
lnav /var/log/syslog
# veya
journalctl -f | lnav
# Error ve warning seviyelerini filtrele
:filter-in log_level IN ('error', 'warning')
Senaryo 3: Uygulama Debug
# Docker container logları
docker logs -f myapp | lnav
# Uygulama logları ile sistem loglarını birleştir
lnav /var/log/myapp/*.log /var/log/syslog
Senaryo 4: Performance Monitoring
# Apache access log performance analizi
lnav /var/log/apache2/access.log
# SQL ile yavaş requestleri bul
:;SELECT cs_uri_stem, avg(duration) as avg_time FROM access_log GROUP BY cs_uri_stem HAVING avg_time > 1000 ORDER BY avg_time DESC
🎨 Görsel Customization
Renk Şemaları
# Tema değiştirme
:config theme monokai
:config theme solarized-dark
:config theme default
# Custom renk ayarları
~/.lnav/configs/default/config.json
Histogram Görünümü
- Histogram aktifleştir (s tuşu)
- Zaman bazlı log dağılımını görsel olarak gösterir
- Spike'ları ve anomalileri kolayca tespit eder
🚨 Troubleshooting ve En İyi Pratikler
Performans Optimizasyonu
# Büyük loglar için bellek kullanımını sınırla
export LNAV_EXP_DISABLE_PRECOMPUTE=1
# Index oluşturmayı devre dışı bırak (hız için)
lnav --no-index /var/log/huge.log
# Sadece son N satırı yükle
tail -n 10000 /var/log/big.log | lnav
Yaygın Sorunlar ve Çözümleri
Problem: Log formatı tanınmıyor Çözüm: Manual format belirtme
:open /path/to/log.txt syslog
Problem: Çok yavaş yükleniyor Çözüm: Streaming mode kullan
tail -f /var/log/big.log | lnav -
Problem: UTF-8 karakter sorunu Çözüm: Encoding belirt
export LC_ALL=en_US.UTF-8
lnav /var/log/app.log
📈 Monitoring ve Alerting Entegrasyonu
Script ile Otomasyonu
#!/bin/bash
# lnav-monitor.sh
ERROR_COUNT=$(lnav -n -c ':;SELECT count(*) FROM all_logs WHERE log_level="error" AND log_time >= datetime("now", "-5 minutes")' /var/log/app.log)
if [ $ERROR_COUNT -gt 0 ]; then
echo "ALERT: $ERROR_COUNT errors in last 5 minutes"
# Send notification
fi
Prometheus Metrikleri
# Log metrics export
lnav -c ':;SELECT log_level, count(*) FROM all_logs WHERE log_time >= datetime("now", "-1 hour") GROUP BY log_level' -n /var/log/app.log | while read level count; do
echo "log_entries_total{level=\"$level\"} $count"
done
🔗 Diğer Araçlarla Entegrasyon
ELK Stack Alternative
# lnav + jq + curl ile basit log aggregation
lnav -c ':;SELECT * FROM all_logs WHERE log_level="error"' -n /var/log/*.log | jq -r '. | {timestamp, level, message}' | curl -X POST -H "Content-Type: application/json" -d @- http://logserver/api/logs
Grafana Integration
# JSON output ile Grafana'ya veri gönderme
lnav -c ':;SELECT strftime("%Y-%m-%d %H:00:00", log_time) as hour, count(*) FROM all_logs GROUP BY hour' -n /var/log/app.log
🎓 Pro Tips ve İleri Seviye Kullanım
1. Regular Expression Güçlü Filtreleme
# Regex ile filtreleme
:filter-in log_body REGEXP 'user_id:\s*(\d+)'
# IP adresi pattern'i
:filter-in c_ip REGEXP '^192\.168\.'
2. Multi-line Log Handling
# Java stack trace gibi multi-line loglar için
:config show-time-offset true
3. Export ve Paylaşım
# Filtered logları export et
:write-csv-to /tmp/filtered_logs.csv
:write-json-to /tmp/logs.json
# Screenshot benzeri text export
:write-to /tmp/log_snapshot.txt
4. Keyboard Shortcuts Customization
// ~/.lnav/configs/default/keymap.json
{
"key-map": {
"x": ":toggle-view",
"ctrl-r": ":reset-session"
}
}
📚 Karşılaştırma Tablosu
🎯 Sonuç ve Öneriler
lnav, log analizi için güçlü ve kullanışlı bir araçtır. Özellikle:
Kimler Kullanmalı:
- System Administrators: Merkezi log analizi için
- DevOps Engineers: CI/CD pipeline debugging
- SRE Teams: Incident response ve post-mortem analizi
- Developers: Application debugging ve performance tuning
- Security Analysts: Security event correlation
Kullanım Önerileri:
- Günlük rutinde:
tail -f
yerinelnav -f
kullanın - Debug sessions: Bookmarks ve annotations kullanarak önemli noktaları işaretleyin
- Performance tuning: SQL queries ile bottleneck analizi yapın
- Team collaboration: Session dosyalarını paylaşarak debugging sürecini hızlandırın
- Automation: Script'lerde lnav SQL özelliklerini kullanarak otomatik raporlar oluşturun
Son Tavsiyeler:
- Interactive mode'u öğrenmeye zaman ayırın
- SQL sorgu özelliklerini master edin
- Custom format tanımlamayı öğrenin
- Keyboard shortcuts'ları ezberleyin
- Regular expression filtreleme kullanın
Log analizi artık karmaşık bir süreç olmak zorunda değil. lnav ile tail, grep, less döngüsünden kurtulun ve log'larınızı saniyeler içinde analiz edin!
Bu rehber lnav v0.11+ sürümü baz alınarak hazırlanmıştır. En son özellikler için GitHub repository'yi takip edin.
Etiketler: linux, lnav, logs, observability, sysadmin, devops, sre, terminal, dashboard, monitoring