lnav - Bir Linux Terminalinden Apache Günlüklerini İzleyin ve Analiz Edin


İki haftadan kısa bir süre önce, Wannacry fidye yazılımı saldırısı binlerce bilgisayarı tehlikeye atarak hem büyük şirketlerin hem de bireylerin önemli kayıplara uğramasına neden oldu. Bu, son yıllarda bulunan diğer yaygın güvenlik açıklarıyla birlikte (Shellshock hatası gibi), kritik görev sistemlerinizi takip etmenin önemini vurgulamaktadır.

Güvenlik açıkları genellikle belirli bir işletim sistemini veya yazılım bileşenini hedef alsa da ağınıza giren ve çıkan trafiği incelemek, sorumlu olduğunuz varlıkları korumanıza önemli ölçüde yardımcı olabilir.

Önerilen Okuma: Linux için 4 İyi Açık Kaynak Günlük İzleme ve Yönetim Aracı

Zaten bildiğinizden eminim, bu bilgiyi aramamız gereken ilk yer sistem günlükleridir. Bu görevi kolaylaştırmak için bu makalede gelişmiş bir günlük dosyası görüntüleyici olan lnav'ın nasıl kurulacağını ve kullanılacağını açıklayacağız. lnav ile, çeşitli günlük türlerini aynı anda izleyebilecek, kısayol tuşlarını kullanarak dosyada gezinebilecek ve erişim ve hataların özetlenmiş bir histogramını oluşturabileceksiniz. Öyleyse okumaya devam edin!

Linux'ta lnav'ı Kurmak ve Başlatmak

lnav'ı yüklemek için dağıtımınızın paket yönetim sistemini kullanın.

aptitude install lnav          [Debian and derivatives]
yum install epel-release lnav  [CentOS 7 and similar]

Kurulum tamamlandıktan sonra lnav'ı başlatın ve ardından incelenecek günlüklerin bulunduğu dizine giden mutlak yolu girin. Bu genellikle /var/log olacağından şunu yapalım:

lnav /var/log/httpd

CentOS 7'deki Apache web sunucusunun günlüklerini incelemek için:

Bir önceki görselde gösterilen çıktıyı kısaca inceleyelim:

  • Sağ üst köşe, şu anda incelenmekte olan dosyaları gösterir (access_log-20170519 ve access_log). Aşağı veya yukarı kaydırdığınızda, dosya adlarının birinden diğerine geçtikçe değişebileceğini fark edeceksiniz.
  • 40x HTTP yanıtı (örneğin, Bulunamadı veya Yasak) kalın harflerle gösterilirken 20x yanıt gösterilir normal metinde.
  • IP adresleri koyu yeşil renkte görünür.

Bu kesinlikle hoş görünüyor, değil mi? Ama şimdi biraz daha derine inelim ve lnav'ın oldukça renkli bir çıktıdan çok daha fazlasını sağladığını göreceğiz.

Hata günlüklerinin neden gösterilmediğini merak ediyorsanız cevabını bu makalenin ilerleyen kısımlarında bulacaksınız. Öyleyse okumaya devam edin!

Çıktıyı Seçenekler ve Kısayol Tuşlarıyla Değiştirme

Daha fazla ilerlemeden önce, lnav çıktısı ve mevcut görünümler arasında daha kolay ilerlememizi sağlayacak birkaç kısayol tuşunu listeleyelim:

  • Sonraki/önceki hata mesajına geçmek için e veya E.
  • Sonraki/önceki uyarı mesajına geçmek için w veya W.
  • Önceki sayfaya geçmek için b veya Geri tuşu.
  • Sonraki sayfaya geçmek için boşluk.
  • Geçerli görünümün üstüne/altına gitmek için g veya G.

Günlükler döndürüldüğünde, logrotate yapılandırma dosyalarında belirtilen ayarlara bağlı olarak eski dosyalar sıkıştırılabilir (veya sıkıştırılmayabilir). Sıkıştırılmış dosyaları çıktıya dahil etmek için lnav'ı aşağıdaki şekilde başlatın:

lnav -r /var/log/httpd

lnav'ın çalışma şekline daha yakından bakmak isterseniz, programı -d seçeneği ve ardından hata ayıklama bilgilerinin yazılacağı dosya adını kullanarak başlatabilirsiniz:

lnav /var/log/httpd -d lnav.txt

Bu örnekte, lnav başlatıldığında oluşturulan hata ayıklama bilgileri, geçerli çalışma dizini içindeki lnav.txt adlı bir dosyaya yazılacaktır.

Bu dosyanın ilk birkaç satırı aşağıdaki resimde gösterilmektedir:

Vurgulanan metin, lnav'ın varsayılan biçimler dosyasını ve daha spesifik olarak Apache erişim günlüğünü ayrıştırmak için access_log biçimini yüklediğini gösterir. Ek olarak lnav, çıktının görselleştirilmesi ve anlaşılması daha kolay olacak şekilde her çıktı satırını ayrıştırmaya olanak tanır.

Önerilen Okuma: GoAccess (Gerçek Zamanlı Apache ve Nginx) Web Sunucusu Günlük Analiz Aracı

Bu özelliği kullanmak için programı başlatın ve ayrıştırmak istediğiniz satırı seçin. Seçilen satır her zaman pencerenin en üstündeki satırdır. Daha sonra p tuşuna basın, aşağıdaki sonucu görmelisiniz:

Normal moda dönmek için tekrar p tuşuna basın.

Şimdi, tarih ve saate göre günlüklerin özetini görmek istiyorsanız i tuşuna basın. Örneğin, vurgulanan metin 10 Nisan Pazartesi günü saat 22.00 ile 23.00 arasında 37 HTTP isteğinin olduğunu ve 14'ünün hatayla sonuçlandığını gösteriyor.

Yukarıda gösterildiği gibi histograma dayalı olarak olası bir sorunu belirledikten sonra, daha önce açıklandığı gibi ayrıştırıcıyı kullanarak sorunu daha ayrıntılı incelemek üzere görünümden çıkmak için i tuşuna basabilirsiniz. Veya noktalı virgül yazıp standart bir sorgu yazarak yerleşik SQL özelliklerini de kullanabilirsiniz. Örneğin şunları yapın:

;.schema

Veritabanı şemasındaki mevcut tabloları görüntülemek için. Doğru tabloyu belirledikten sonra (bizim durumumuzda access_log), q tuşuna basalım ve ardından 195.154.230.31'den gelen isteklerle ilgili mevcut tüm bilgileri döndürmek için aşağıdaki sorguyu kullanalım:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

Sonuçları log_time'a göre de filtreleyebileceğimizi unutmayın. Mesele şu ki, biraz SQL ekleyin ve lnav ile yapabileceklerinizin sınırı yok.

Apache Varsayılan Günlük Formatları

Birçok günlük formatı varsayılan olarak lnav ile yüklenir ve bu nedenle bizim müdahalemiz olmadan ayrıştırılır. Listeyi resmi belgelerdeki Günlük Formatları bölümünde görebilirsiniz.

Varsayılan biçimler ~/.lnav/formats/default/default-formats.json.sample dosyasında belirtilir ve diğerleri ~/.lnav/formats kullanılarak < ile eklenebilir..json uzantısı.

Ancak bu dosyaları düzenlemek, JSON (Javascript Object Notation) ve PCRE (Perl Uyumlu Düzenli İfadeler) kitaplığına belirli bir düzeyde aşinalık gerektirir.

Peki lnav neden Apache hata günlüğü dosyalarını görüntülemedi? Bunun nedeni, bu günlüklerin mevcut format dosyalarındaki herhangi bir normal ifadeyle eşleşmemesi ve bu nedenle normal metin dosyaları (belirli bir günlük formatı olmayan dosyalar anlamına gelir) olarak ele alınmasıdır.

Önerilen Okuma: Apache Web Sunucusu Yükü ve Sayfa İstatistikleri Nasıl İzlenir

Daha önce de belirtildiği gibi, JSON ve PCRE'ye en azından biraz aşina olduğunuzda kendi formatlarınızı oluşturabilirsiniz. Bu, örneğin özel Apache günlükleri tanımladıysanız kullanışlı olabilir.

Özet

lnav'ın nasıl kullanılacağını göstermek için Apache erişim günlüğünü kullanmış olsak da, bu araç kullanılarak görüntülenebilecek ve ayrıştırılabilecek başka türde günlüklerin de bulunduğunu unutmayın. Araç belirli bir günlüğü tanımıyorsa ek formatlar oluşturabilir ve burada verilen talimatları izleyerek bunları yükleyebilirsiniz.

Bu makaleyle ilgili herhangi bir sorunuz veya yorumunuz var mı? Her zaman olduğu gibi aşağıdaki formu kullanarak bize bildirmekten çekinmeyin. Sizden haber almak için sabırsızlanıyoruz!