belajar tentang logging / logrotation umum di linux?

13

Asumsikan, bahwa di samping log server web Apache saya tidak pernah memiliki kontak dengan segala jenis log (profesional) pada sistem operasi apa pun. Jadi Logging, meskipun saya mengerti beberapa dasar, semuanya merupakan topik yang cukup baru. Pada saat ini, investasi untuk sepenuhnya mempelajari tentang topik ini tampaknya sangat besar, tetapi saya belum tahu, apakah itu layak untuk diketahui lebih dari konsep yang paling abstrak.

Sumber daya apa yang akan Anda sarankan seandainya seseorang dalam situasi itu mengkonsumsi (tutorial, halaman manual, buku) untuk belajar tentang Logging?

Log mana yang harus dibaca pengguna Linux normal setiap hari / bulan? Apakah asumsinya bahkan benar bahwa itu ditulis untuk keterbacaan manusia atau mereka umumnya dievaluasi dan digunakan oleh alat lain?

Apa yang harus diketahui pengguna * normal dan pengembang perangkat lunak tentang log ini?

Apa yang perlu Anda ketahui tentang rotasi log, jika Anda tidak diharapkan untuk mengelola server web profesional dengan banyak peristiwa?

erikbwork
sumber
Apakah Anda keberatan jika saya (atau Anda) mengedit judul untuk membaca "di linux" daripada "di ubuntu" karena ini pada dasarnya adalah pertanyaan yang sama (lihat jawaban saya)? Dengan begitu, kita cenderung tidak memiliki pertanyaan duplikat tertutup tentang "belajar logging di arch", "belajar logging di centOS", dll.
goldilocks
Saya tidak keberatan dengan perubahan seperti itu, selama jawabannya bagus :)
erikbwork

Jawaban:

18

[Ini ditulis beberapa tahun sebelum adopsi journald pada sistem systemd dan tidak menyinggungnya. Saat ini (akhir 2018) baik journald dan (r) syslog, dijelaskan di bawah, digunakan pada distro seperti Debian. Pada yang lain, Anda mungkin harus menginstal rsyslog jika Anda ingin menggunakannya bersama, tetapi integrasi dengan journald sangat mudah.]

Saya tidak akan membahas penebangan berkaitan dengan ubuntu secara khusus, karena topik tersebut distandarisasi untuk linux secara umum (dan saya percaya sebagian besar atau semua yang saya katakan juga berlaku secara umum untuk setiap rasa * nix, tetapi jangan ambil kata saya untuk itu). Saya juga tidak akan banyak bicara tentang "cara membaca log" selain menjawab pertanyaan ini:

Apakah asumsinya bahkan benar bahwa itu ditulis untuk keterbacaan manusia atau mereka umumnya dievaluasi dan digunakan oleh alat lain?

Saya kira itu tergantung pada aplikasinya, tetapi secara umum, setidaknya sehubungan dengan apa yang masuk ke syslog (lihat di bawah), mereka harus dapat dibaca manusia. "Berarti bagiku" adalah masalah lain, lol. Namun, mereka juga dapat disusun dengan cara yang membuat parsing dengan alat standar (grep, awk, dll) untuk tujuan tertentu lebih mudah.

Siapa pun, pertama, ada perbedaan antara aplikasi yang melakukan logging sendiri dan aplikasi yang menggunakan sistem logger. Apache secara default adalah yang pertama, meskipun dapat dikonfigurasi untuk melakukan yang lebih baru (yang saya pikir kebanyakan orang akan menganggap tidak diinginkan). Aplikasi yang melakukan pencatatan sendiri dapat melakukannya dengan cara apa pun menggunakan lokasi apa pun untuk file, sehingga tidak banyak yang bisa dikatakan tentang itu. Logger sistem umumnya disebut sebagai syslog.

syslog

"Syslog" adalah standar yang diimplementasikan dengan proses daemon yang secara umum disebut syslogd (d adalah untuk daemon!). Daemon syslog dominan yang saat ini digunakan di linux, termasuk ubuntu, adalah rsyslogd. Rsyslogd dapat melakukan banyak hal, tetapi karena dikonfigurasikan di luar kotak pada kebanyakan distro, ia mengemulasi syslog tradisional, yang mengurutkan berbagai hal menjadi file teks biasa /var/log. Anda mungkin menemukan dokumentasi untuk itu di /usr/share/doc/rsyslog-doc-[version](hati-hati, ada juga /usr/share/doc/rsyslog-[version], tapi itu hanya pemberitahuan dari paket sumber seperti NEWSdan ChangeLog). Jika ada, itu html, tetapi Stack Exchange tidak mengizinkan menanamkan tautan file lokal:

file://usr/share/doc/rsyslog-doc/index.html

Jadi Anda bisa mencoba menyalinnya. Jika tidak ada di sana, itu mungkin bagian dari paket terpisah yang tidak diinstal. Permintaan sistem pengemasan Anda (mis., apt-cache search rsyslog | grep doc).

Konfigurasi berada di /etc/rsyslog.conf, yang memiliki halaman manual man rsyslog.conf,, meskipun sementara halaman manual membuat referensi yang bagus, itu mungkin kurang dapat ditembus sebagai pengantar. Untungnya, dasar-dasar dari stock rsyslog.conf sesuai dengan yang ada di syslog.conf tradisional, yang ada banyak perkenalan dan tutorial di sekitar. Yang ini , misalnya; apa yang ingin Anda ambil dari itu, sambil mengintip rsyslog.conf lokal Anda, adalah pemahaman tentang fasilitas dan prioritas ("prioritas" kadang-kadang disebut sebagai loglevel), karena ini adalah bagian dari standar syslog tersebut. Alasan standar ini penting adalah karena rsyslog benar-benar mendapatkan barang-barangnya melalui kernel, dan apa yang mengimplementasikan kernel adalah standar.

Sehubungan dengan $arahan di rsyslog.conf, ini adalah rsyslog khusus dan jika Anda menginstal paket doc opsional Anda akan menemukan panduan untuk mereka di rsyslog_conf_global.html.

Selamat bersenang-senang ... jika Anda ingin tahu tentang bagaimana aplikasi menggunakan logger sistem, lihat man loggerdan man 3 syslog.

Rotasi log

Cara normatif untuk memutar log adalah melalui alat yang disebut logrotate(dan ada a man logrotate). Metode normatif menggunakan logrotate adalah melalui cron daemon , meskipun tidak harus dilakukan dengan cara itu (misalnya, jika Anda cenderung mematikan desktop Anda setiap hari, Anda mungkin juga cukup melakukannya sekali saat boot sebelum syslog dimulai tetapi, jelas, setelah filesystem di-mount rw).

Ada pengantar yang bagus untuk logrotate di sini . Perhatikan bahwa logrotate bukan hanya untuk hal-hal syslog , tetapi juga dapat digunakan dengan file apa pun. File konfigurasi dasar adalah /etc/logrotate.conf, tetapi karena konfigurasi memiliki direktif "include", umumnya sebagian besar barang masuk ke file individual dalam /etc/logrotate.ddirektori (di sini adalah untuk direktori, bukan daemon; logrotate bukan daemon).

Suatu hal penting untuk dipertimbangkan ketika menggunakan logrotate adalah bagaimana suatu aplikasi akan bertindak kembali ketika file log-nya "diputar" - dengan kata lain, dipindahkan - saat aplikasi sedang berjalan. WRT (r) syslogd, itu hanya akan berhenti menulis ke log itu (saya pikir ada justifikasi keamanan untuk ini). Cara biasa untuk mengatasinya adalah dengan memberitahu syslog untuk me-restart (dan membuka kembali semua file-nya), itulah sebabnya Anda akan melihat postrotatearahan dalam file conf logrotate yang mengirimkan SIGHUP ke daemon syslog.

goldilocks
sumber
2
Jika Anda menyebutkan syslog-ngjuga, Anda akan menulis semua yang bisa dikatakan di linux-logging. Jawaban yang sangat bagus.
Nils
Saya belajar banyak dan memiliki lebih banyak sumber untuk dibaca. Terima kasih! Btw. Mengapa menggunakan sistem logging untuk apache itu buruk? Dan log mana yang harus saya baca?
erikbwork
@ erikb85 1) Sebagian besar karena apache menghasilkan banyak output. Saya tidak harus mengkonfigurasi apache dalam waktu yang lama, jadi saya tidak ingat betapa fleksibelnya WRT untuk mengirim hal-hal tertentu ke syslog (tapi saya rasa sangat fleksibel) 2) log WRT yang ingin Anda baca, lihat di logika Anda /etc/rsyslog.conf. Misalnya: sering kali hal - hal di atas prioritas tertentu akan masuk /var/log/messages, dan hal-hal di bawah ini yang akan masuk /var/log/notice. Saya juga ingin memiliki log yang berisi segalanya, yang membuat tumpang tindih ganda dan tiga kali lipat, tetapi jika Anda membuatnya diputar itu bukan masalah besar.
goldilocks
Hanya untuk mengonfirmasi, rsyslogbukankah pembungkus daemon ada logrotate, kan? Kenapa begitu ?
Thomas
@Thomas Mereka melakukan tujuan yang berbeda, meskipun (r) syslog dapat menerapkan rotasi untuk cadangan kebutuhan untuk logrotate. Namun, memisahkannya berarti Anda dapat menggunakan logrotate pada hal-hal selain file syslog.
goldilocks