Memiliki permintaan log Apache ketika mereka masuk, daripada ketika mereka selesai

9

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?

Ben Dilts
sumber
Lihatlah konfigurasi DNS Anda juga, server DNS yang rusak atau menggantung dapat menyebabkan semua jenis masalah dengan SSH & tidak dapat masuk. [Siapa yang tahu apa yang dapat dilakukannya untuk apache - pastikan pencarian nama host tidak aktif.]
Sean Kimball

Jawaban:

15

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.

sandroid
sumber
Ini adalah apa yang saya cari, tetapi sepertinya saya tidak bisa menghapus log ini secara berkala (rm /var/log/apache2/forensic.log setiap jam) atau logging forensik baru istirahat sampai saya me-restart apache. Ide ide?
Ben Dilts
tentu saja jika Anda log apache apa pun, itu akan terjadi. Coba gunakan logrotate atau apa pun yang setara yang ada di lingkungan Anda untuk menggulung log secara berkala (waktu atau ukuran). Jika tidak, daripada menghapusnya, coba pindahkan file, lalu sentuh / var / log /
apache2
2

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. ;-)

Menandai
sumber