Apache günlük isteklerini, bittiklerinde değil, geldiklerinde alma


9

Ben garip bir sunucu çökme sorunu teşhis etmeye çalışıyorum ( Sunucu ping yanıt veriyor, ancak yeniden başlatma kadar SSH bağlantıları kabul etmeyeceğim.% 0 CPU ) nerede sunucu yeniden önyükleme her şey normale döner. Apache erişim günlüklerimin (veya başka bir günlüğün) kilitlenme gerçekleştikçe yapılan tüm istekleri içermesini istiyorum, ancak ne yazık ki Apache istekleri tamamlanıncaya kadar günlüğe kaydetmiyor. Yani bir istek sunucu çöküyorsa, bu istek hiçbir zaman bitmez ve bu nedenle günlüklerde görünmez.

Apache'yi, istek geldikçe yazılacak bir günlük dosyası oluşturacak şekilde yapılandırmanın bir yolu var mı?


DNS yapılandırmanıza da bir göz atın, bozuk veya asılı bir DNS sunucusu SSH ile her türlü soruna neden olabilir ve giriş yapamaz.
Sean Kimball

Yanıtlar:


15

Adli günlük kaydı için neye ihtiyacınız olduğunu düşünüyorum: http://httpd.apache.org/docs/current/mod/mod_log_forensic.html

ön bilgi:

Adli Kayıt Formatı:

Her istek iki kez kaydedilir. İlk kez işlenmeden önce (yani, başlıkları aldıktan sonra). İkinci günlük girişi, normal günlüklemenin gerçekleştiği zamanda istek işlendikten sonra yazılır.

Her bir talebi tanımlamak için benzersiz bir istek kimliği atanır. Bu adli kimlik,% {forensic-id} n biçim dizesi kullanılarak normal aktarım günlüğüne çapraz kaydedilebilir. Mod_unique_id kullanıyorsanız, oluşturulan kimliği kullanılır.

İlk satır, adli kimliği, istek satırını ve alınan tüm başlıkları kanal karakterleriyle (|) ayırarak günlüğe kaydeder. Örnek bir çizgi aşağıdaki gibi görünür (hepsi bir satırda):

+ yQtJf8CoAB4AAFNXBIEAAAAA | GET /manual/de/images/down.gif HTTP / 1.1 | Ana Bilgisayar: localhost% 3a8080 | Kullanıcı-Aracı: Mozilla / 5.0 (X11; U; Linux i686; tr-ABD; rv% 3a1.6) Gecko / 20040216 Firefox / 0.8 | Kabul et: resim / png, vb ...

Başlangıçtaki artı karakteri, bunun bu isteğin ilk günlük satırı olduğunu gösterir. İkinci satır sadece bir eksi karakter ve kimlik tekrar içerir:

-yQtJf8CoAB4AAFNXBIEAAAAA

Check_forensic betiği bağımsız değişkeni olarak günlük dosyasının adını alır. Bu +/- ID çiftlerini arar ve bir isteğin tamamlanmadığından şikayet eder.


Aradığım şey bu, ancak bu günlüğü periyodik olarak (rm /var/log/apache2/forensic.log her saat) silebilirim ya da adli günlüğe kaydetme apache'yi yeniden başlatana kadar kesiliyor gibi görünmüyor. Fikirler?
Ben Dilts

Kesinlikle herhangi bir apache günlüğü rm, olur. Günlükleri periyodik olarak (zaman veya boyut olarak) döndürmek için logrotate veya ortamınızdaki eşdeğeri varsa kullanmayı deneyin. Değilse, silmek yerine dosyayı taşımayı deneyin, ardından /var/log/apache2/forensic.log (yine de izinleri kontrol edin)
sandroid

2

Sandroid'in cevabı sorunuz için doğru, ancak bir ağ paketi yakalamayı da çalıştırmayı düşünmelisiniz. Kaynaklarınız varsa, anahtardaki bağlantı noktasını yansıtmak ve tüm IP trafiğini kaydetmek için WireShark'ı çalıştıran ikinci bir makine kullanmak gerçekten yardımcı olabilir. Bir şey sunucuyu HTTP dışı hizmetlerin yanıt vermediği noktaya götürüyorsa, kötü veriler Apache'ye ulaşmadan önce IP yığınını alıyor olabilir.

Yakalamayı çalıştıran makinenin diğerinden farklı ağ donanımı ve / veya sürücüleri olduğundan emin olabilirsiniz. Bir fiyatı için iki çökmesini emmek. ;-)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.