Mengapa ada begitu banyak file log di sistem Linux yang khas? Mengapa mereka tidak menggunakan satu log konsolidasi db / file dan api?
8
Saya hanya ingin tahu mengapa ada begitu banyak file log di sistem Linux yang khas? Bukankah lebih baik memiliki satu fungsi api sistem untuk logging dan satu tabel gabungan untuk menyimpan semua entri log dari semua aplikasi?
Pertanyaan Lampiran Refactored: Mempertimbangkan * nix sangat matang, mengapa konvensi penamaan log (& conf) + lokasi masih sangat sporadis dan tidak konsisten? Jika ekstensi file murni untuk penggunaan manusia, mengapa semua devs (dan symlinks for legacy) tidak setuju untuk menggunakan .logdan .confsebagai pengidentifikasi?
dhaupin
Jawaban:
16
Itu bagian dari filosofi Unix . Idenya adalah bahwa file teks bebas dari penguncian program dan semua orang dapat menggunakan teknik apa pun yang mereka inginkan. Untuk mengambil ini lebih lanjut, file flat sering digunakan, sebagai lawan dari bahasa markup seperti XML (walaupun saya telah melihat program menyimpan hal-hal dalam format XML juga).
Dalam googling saya menemukan tulisan yang bagus tentang teks biasa, dengan komentar tentang filosofi Unix.
Menggunakan file teks sederhana memiliki keuntungan bahwa Anda tidak memerlukan alat khusus basis data untuk mendapatkan entri log Anda.
Anda dapat menganalisisnya dengan grep jika Anda suka, Anda dapat membukanya dengan pager favorit Anda dan Anda dapat memprosesnya dalam bahasa skrip favorit Anda seperti Perl, Python, dll. Tanpa memerlukan perpustakaan tambahan.
Pada sistem Unix Anda sudah memiliki semacam "log sistem API". Ini disebut syslog. Syslog sebenarnya bukan API tetapi standar untuk mencatat pesan. Nama singkatan protokol jaringan dan perpustakaan dan daemon di belakangnya.
Konfigurasi default kebanyakan sistem adalah daemon syslog yang mendengarkan pesan lokal.
Daemon menerima pesan dan melakukan logging. Ada beberapa implementasi daemon syslog yang berbeda untuk semua jenis platform dan Anda juga dapat mencatat pesan Anda ke basis data.
Saya hanya ingin tahu mengapa ada begitu banyak file log di sistem Linux yang khas?
File log yang berbeda berisi informasi yang berbeda (walaupun biasanya ada beberapa duplikasi). Mereka sering memiliki karakteristik yang berbeda: kebijakan rotasi dan penyimpanan yang berbeda, izin yang berbeda, dll. Daemon syslog menangani penulisan mereka; Anda dapat melihat pengaturannya di /etc/syslog.confatau /etc/syslog-ng.conf.
Bukankah lebih baik memiliki satu fungsi api sistem untuk logging
Ini ide yang bagus. Sebut saja syslog . Tugasnya adalah mengirim entri log ke daemon syslog.
dan satu tabel terkonsolidasi untuk menyimpan semua entri log dari semua aplikasi?
Nah, itu keseluruhan kaleng cacing. Anda tampaknya mengasumsikan keberadaan mesin basis data, mungkin basis data relasional, mungkin salah satu yang dapat Anda query dalam SQL. Tetapi Unix lebih tua dari SQL, dan ada alasan yang sangat bagus mengapa ia tidak mengadopsi SQL sebagai komponen standar. Di bawah Unix, database adalah sistem file. Ini bukan basis data relasional, ini sederhana . Entrinya bukan baris, tetapi file sederhana , lebih disukai teks, lebih disukai dengan format sederhana. Misalnya, file log adalah file teks, dengan satu entri per baris, yang berisi tanggal, nama mesin, program asal dan teks entri. Menggunakan database relasional akan memiliki sejumlah kelemahan:
Apa yang Anda lakukan jika database tidak berfungsi? (Filesystem adalah komponen fundamental (dan sudahkah saya sebutkan itu jauh lebih sederhana daripada database relasional?); Daemon syslog adalah komponen sederhana yang melakukan satu pekerjaan (fitur umum dalam desain Unix) dan diharapkan melakukannya dengan baik dan andal.)
Bagaimana Anda mencatat operasi basis data? (Ok, melalui database itu sendiri - setelah semua log berisi entri dari kernel dan dari daemon syslog - tetapi sekali lagi database yang jauh lebih kompleks membuat ini lebih sulit dan kurang dapat diandalkan).
Bagaimana Anda mengakses entri log? Bandingkan kesederhanaan cat, grep, lessterhadap query SQL. Dan mengajukan izin, saya tidak tahu bagaimana Anda akan menangani ini dalam database relasional yang khas.
Instalasi multi-server tidak menyimpan log mereka secara lokal, mereka menggunakan fitur log jarak jauh yang telah dibangun ke daemon syslog sejak awal Unix. Itu mudah diimplementasikan dengan arsitektur unix logging; Anda tidak dapat menjalankan database yang direplikasi pada anggaran kompleksitas itu.
grep '\[apache\]' | tail -f /dev/stdin- tetapi memiliki log per-pengguna di server (ketika pengguna tidak memiliki akses ke log pengguna lain).
Maciej Piechotka
"Mengapa menurutmu lebih baik menyimpan semuanya dalam satu file?" - Karena saya suka SQL ;-) Dan karena saya tidak suka (dan hampir tidak bisa) mengingat banyak hal.
Ivan
11
Ketika semua yang Anda tahu adalah SQL, semuanya tampak seperti masalah basis data relasional.
.log
dan.conf
sebagai pengidentifikasi?Jawaban:
Itu bagian dari filosofi Unix . Idenya adalah bahwa file teks bebas dari penguncian program dan semua orang dapat menggunakan teknik apa pun yang mereka inginkan. Untuk mengambil ini lebih lanjut, file flat sering digunakan, sebagai lawan dari bahasa markup seperti XML (walaupun saya telah melihat program menyimpan hal-hal dalam format XML juga).
Dalam googling saya menemukan tulisan yang bagus tentang teks biasa, dengan komentar tentang filosofi Unix.
sumber
Menggunakan file teks sederhana memiliki keuntungan bahwa Anda tidak memerlukan alat khusus basis data untuk mendapatkan entri log Anda.
Anda dapat menganalisisnya dengan grep jika Anda suka, Anda dapat membukanya dengan pager favorit Anda dan Anda dapat memprosesnya dalam bahasa skrip favorit Anda seperti Perl, Python, dll. Tanpa memerlukan perpustakaan tambahan.
Pada sistem Unix Anda sudah memiliki semacam "log sistem API". Ini disebut syslog. Syslog sebenarnya bukan API tetapi standar untuk mencatat pesan. Nama singkatan protokol jaringan dan perpustakaan dan daemon di belakangnya.
Konfigurasi default kebanyakan sistem adalah daemon syslog yang mendengarkan pesan lokal.
Daemon menerima pesan dan melakukan logging. Ada beberapa implementasi daemon syslog yang berbeda untuk semua jenis platform dan Anda juga dapat mencatat pesan Anda ke basis data.
Ini terserah kamu.
sumber
File log yang berbeda berisi informasi yang berbeda (walaupun biasanya ada beberapa duplikasi). Mereka sering memiliki karakteristik yang berbeda: kebijakan rotasi dan penyimpanan yang berbeda, izin yang berbeda, dll. Daemon syslog menangani penulisan mereka; Anda dapat melihat pengaturannya di
/etc/syslog.conf
atau/etc/syslog-ng.conf
.Ini ide yang bagus. Sebut saja syslog . Tugasnya adalah mengirim entri log ke daemon syslog.
Nah, itu keseluruhan kaleng cacing. Anda tampaknya mengasumsikan keberadaan mesin basis data, mungkin basis data relasional, mungkin salah satu yang dapat Anda query dalam SQL. Tetapi Unix lebih tua dari SQL, dan ada alasan yang sangat bagus mengapa ia tidak mengadopsi SQL sebagai komponen standar. Di bawah Unix, database adalah sistem file. Ini bukan basis data relasional, ini sederhana . Entrinya bukan baris, tetapi file sederhana , lebih disukai teks, lebih disukai dengan format sederhana. Misalnya, file log adalah file teks, dengan satu entri per baris, yang berisi tanggal, nama mesin, program asal dan teks entri. Menggunakan database relasional akan memiliki sejumlah kelemahan:
cat
,grep
,less
terhadap query SQL. Dan mengajukan izin, saya tidak tahu bagaimana Anda akan menangani ini dalam database relasional yang khas.sumber
Jika Anda benar-benar ingin menyimpan log sistem Anda dalam basis data relasional (yang dapat memiliki banyak keuntungan), periksa rsyslog ( Pengganti yang akan datang untuk syslog ), yang dapat menulis log sistem ke database MySQL , Postgres atau Oracle .
sumber
Ini akan membuat hal-hal seperti 'tail -f /var/log/apache/access.log' menjadi tidak mungkin.
Menurut Anda mengapa lebih baik meletakkan semuanya dalam satu file?
sumber
grep '\[apache\]' | tail -f /dev/stdin
- tetapi memiliki log per-pengguna di server (ketika pengguna tidak memiliki akses ke log pengguna lain).