Saya mencoba mendiagnosis masalah server crash yang aneh ( Server merespons ping, tetapi tidak akan menerima koneksi SSH hingga reboot. 0% CPU ) di mana reboot server mengembalikan semuanya menjadi normal. Saya ingin log akses Apache saya (atau beberapa log lainnya) menyertakan semua permintaan yang dibuat saat crash terjadi, tetapi sayangnya Apache tidak mencatat permintaan sampai mereka selesai. Berarti bahwa jika permintaan macet server, permintaan itu tidak pernah selesai dan dengan demikian tidak muncul di log.
Apakah ada cara untuk mengkonfigurasi Apache untuk membuat file log yang ditulis ketika permintaan tiba?
apache-2.2
logging
Ben Dilts
sumber
sumber
Jawaban:
Saya pikir apa yang Anda butuhkan untuk forensik logging, lihat tautan ini: http://httpd.apache.org/docs/current/mod/mod_log_forensic.html
potongan:
Format Log Forensik:
Setiap permintaan dicatat dua kali. Pertama kali sebelum diproses lebih lanjut (yaitu, setelah menerima tajuk). Entri log kedua ditulis setelah pemrosesan permintaan pada saat yang sama di mana penebangan normal terjadi.
Untuk mengidentifikasi setiap permintaan, ID permintaan unik diberikan. ID forensik ini dapat di-log silang dalam log transfer normal menggunakan string format% {forensic-id} n. Jika Anda menggunakan mod_unique_id, ID yang dihasilkannya akan digunakan.
Baris pertama mencatat ID forensik, baris permintaan dan semua header yang diterima, dipisahkan oleh karakter pipa (|). Baris sampel terlihat seperti berikut (semuanya dalam satu baris):
+ yQtJf8CoAB4AAFNXBIEAAAAA | GET /manual/de/images/down.gif HTTP / 1.1 | Host: localhost% 3a8080 | User-Agent: Mozilla / 5.0 (X11; U; Linux i686; en-US; rv% 3a1.6) Gecko / 20040216 Firefox / 0.8 | Terima: image / png, dll ...
Karakter plus di awal menunjukkan bahwa ini adalah baris log pertama dari permintaan ini. Baris kedua hanya berisi karakter minus dan ID lagi:
-yQtJf8CoAB4AAFNXBIEAAAAA
Skrip check_forensic mengambil sebagai argumennya nama file log. Ini mencari pasangan ID +/- dan mengeluh jika permintaan tidak selesai.
sumber
Jawaban Sandroid tepat untuk pertanyaan Anda, tetapi Anda harus benar-benar mempertimbangkan untuk menjalankan penangkapan paket jaringan juga. Jika Anda memiliki sumber daya, mirroring port di dalam sakelar dan menggunakan mesin kedua yang menjalankan WireShark untuk merekam semua lalu lintas IP mungkin sangat membantu. Jika ada sesuatu yang mengeluarkan server ke titik di mana layanan non-HTTP tidak merespons maka mungkin mengambil tumpukan IP sebelum data buruk membuatnya ke Apache.
Jika Anda dapat memastikan mesin yang menjalankan tangkapan memiliki perangkat keras dan / atau driver jaringan yang berbeda dari yang lain. Akan payah untuk crash dua untuk harga satu. ;-)
sumber