Melihat dan Mengelola Berkas Log
Berkas log bisa sangat berguna ketika mencoba memecahkan masalah sistem seperti mencoba memuat driver kernel atau saat mencari upaya login yang tidak sah ke sistem. Bab ini membahas di mana menemukan berkas log, cara melihat berkas log, dan apa yang harus dicari dalam berkas log. Beberapa berkas log dikendalikan oleh daemon yang disebut rsyslogd
. Daemon rsyslogd
adalah pengganti yang disempurnakan untuk sysklogd, dan menyediakan pemfilteran yang diperluas, penyampaian pesan yang dilindungi enkripsi, berbagai opsi konfigurasi, modul masukan dan keluaran, dukungan untuk transportasi melalui protokol TCP
atau UDP
. Perhatikan bahwa rsyslog kompatibel dengan sysklogd.
Berkas log juga dapat dikelola oleh daemon journald
– komponen systemd
. Daemon journald
menangkap pesan Syslog, pesan log kernel, disk RAM awal, dan pesan boot awal serta pesan yang ditulis ke keluaran standar dan keluaran kesalahan standar dari semua layanan, mengindeksnya dan membuat ini tersedia bagi pengguna. Format berkas jurnal asli, yang merupakan berkas biner terstruktur dan terindeks, memperbaiki pencarian dan memberikan operasi yang lebih cepat, dan juga menyimpan informasi data meta seperti stempel waktu atau ID pengguna. Berkas log yang dihasilkan oleh journald
secara baku tidak persisten, berkas log hanya disimpan dalam memori atau penyangga cincin kecil di direktori /run/log/journal/
. Banyaknya data yang dicatat tergantung pada memori bebas, ketika Anda mencapai batas kapasitas, entri tertua akan dihapus. Namun, pengaturan ini dapat diubah – lihat Memfungsikan Penyimpanan Persisten. Untuk informasi lebih lanjut tentang Jurnal lihat Memakai Jurnal.
Secara default, hanya journald
yang dipasang pada sistem Anda. Anda harus memasang rsyslog sendiri. Juga jangan lupa untuk mengaktifkan dan memulainya setelah memasang sebelum melanjutkan dengan sisa panduan ini. Daemon journald
adalah alat utama untuk pemecahan masalah. Ini juga menyediakan data tambahan yang diperlukan untuk membuat pesan log terstruktur. Data yang diperoleh oleh journald
diteruskan ke soket /run/systemd/journal/syslog
yang dapat digunakan oleh rsyslogd
untuk memroses data lebih lanjut. Namun, rsyslog melakukan integrasi aktual secara default melalui modul masukan imjournal
, sehingga menghindari soket yang disebutkan di atas. Anda juga dapat mentransfer data ke arah yang berlawanan, dari rsyslogd
ke journald
dengan menggunakan modul omjournal
. Lihat Interaksi Rsyslog dan Jurnal untuk informasi lebih lanjut. Integrasi ini memungkinkan mempertahankan log berbasis teks dalam format yang konsisten untuk memastikan kompatibilitas dengan kemungkinan aplikasi atau konfigurasi yang bergantung pada rsyslogd
. Selain itu, Anda dapat memelihara pesan rsyslog dalam format terstruktur (lihat Pencatatan Log Terstruktur dengan Rsyslog).
Menemukan Berkas Log
Daftar berkas log yang dikelola oleh rsyslogd
dapat ditemukan di berkas konfigurasi /etc/rsyslog.conf
. Sebagian besar berkas log terletak di direktori /var/log/
. Beberapa aplikasi seperti httpd dan samba memiliki direktori dalam /var/log/
untuk berkas log mereka. Anda mungkin melihat beberapa berkas di direktori /var/log/
dengan angka setelahnya (misalnya, cron-20100906
). Angka-angka ini mewakili stempel waktu yang telah ditambahkan ke berkas log yang diputar. Berkas log dirotasi sehingga ukuran berkas mereka tidak menjadi terlalu besar. Paket logrotate
berisi tugas cron yang secara otomatis memrotasi berkas log sesuai dengan berkas konfigurasi /etc/logrotate.conf
dan berkas konfigurasi di direktori /etc/logrotate.d/
.
Konfigurasi Dasar Rsyslog
Berkas konfigurasi utama untuk rsyslog adalah /etc/rsyslog.conf
. Di sini, Anda dapat menentukan direktif global, modul, dan aturan yang terdiri dari bagian filter dan action. Selain itu, Anda dapat menambahkan komentar dalam bentuk teks setelah tanda hash (#
).
Tapis
Aturan ditentukan oleh bagian filter, yang memilih subset pesan syslog, dan bagian action, yang menentukan apa yang harus dilakukan dengan pesan yang dipilih. Untuk menentukan aturan dalam berkas konfigurasi /etc/rsyslog.conf
Anda, tentukan keduanya, filter dan tindakan, pada satu baris dan memisahkan mereka dengan satu atau beberapa spasi atau tab.
rsyslog menawarkan berbagai cara untuk memfilter pesan syslog sesuai dengan properti yang dipilih. Metode pemfilteran yang tersedia dapat dibagi menjadi Filter berbasis Fasilitas/Prioritas, Berbasis properti, dan Berbasis ekspresi.
- Filter berbasis fasilitas/prioritas
-
Cara yang paling banyak digunakan dan terkenal untuk memfilter pesan syslog adalah dengan menggunakan filter berbasis fasilitas/prioritas yang memfilter pesan syslog berdasarkan dua kondisi: facility dan priority dipisahkan oleh titik. Untuk membuat pemilih, gunakan sintaks berikut:
FACILITY.PRIORITY
dimana:
-
FACILITY menentukan subsistem yang menghasilkan pesan syslog tertentu. Misalnya, subsistem mail menangani semua pesan syslog terkait email. FACILITY dapat diwakili oleh salah satu kata kunci berikut (atau dengan kode numerik): kern (0), user (1), mail (2), daemon (3), auth (4), syslog (5), lpr (6), news (7), uucp (8), cron (9), authpriv (10), ftp (11), ntp (12), logaudit (13), logalert (14), clock (15), dan local0 sampai local7 (16 - 23).
-
PRIORITY menentukan prioritas pesan syslog. PRIORITY dapat diwakili oleh salah satu kata kunci berikut (atau dengan angka): debug (7), info (6), notice (5), warning (4), err (3), crit (2), alert (1), dan emerg (0).
Sintaks yang disebutkan di atas memilih pesan syslog dengan prioritas yang ditentukan atau lebih tinggi. Dengan mendahului kata kunci prioritas apa pun dengan tanda sama dengan (=
), Anda menentukan bahwa hanya pesan syslog dengan prioritas yang ditentukan yang akan dipilih. Semua prioritas lainnya akan diabaikan. Sebaliknya, sebelum kata kunci prioritas dengan tanda seru (!
) memilih semua pesan syslog kecuali yang memiliki prioritas yang ditentukan.
Selain kata kunci yang ditentukan di atas, Anda juga dapat menggunakan tanda bintang (*
) untuk menentukan semua fasilitas atau prioritas (tergantung di mana Anda menempatkan tanda bintang, sebelum atau sesudah koma). Menentukan kata kunci prioritas none
berfungsi untuk fasilitas tanpa prioritas yang diberikan. Baik fasilitas dan kondisi prioritas tidak peka huruf besar/kecil.
Untuk menentukan beberapa fasilitas dan prioritas, pisahkan dengan koma (,
). Untuk menentukan beberapa pemilih pada satu baris, pisahkan mereka dengan titik koma (;
). Perhatikan bahwa setiap pemilih di bidang pemilih mampu menimpa yang sebelumnya, yang dapat mengecualikan beberapa prioritas dari pola.
Berikut ini adalah beberapa contoh filter berbasis fasilitas/prioritas sederhana yang dapat ditentukan dalam /etc/rsyslog.conf
. Untuk memilih semua pesan syslog kernel dengan prioritas apa pun, tambahkan teks berikut ke dalam berkas konfigurasi:
kern.*
Untuk memilih semua pesan syslog surel dengan prioritas crit dan yang lebih tinggi, gunakan bentuk ini:
mail.crit
Untuk memilih semua pesan cron syslog kecuali yang memiliki prioritas info atau debug, atur konfigurasi dalam bentuk berikut:
cron.!info,!debug
- Filter Berbasis Properti
-
Filter berbasis properti memungkinkan Anda memfilter pesan syslog berdasarkan properti apa pun, seperti
timegenerated
atausyslogtag
. Untuk informasi selengkapnya tentang properti, lihat Properti. Anda dapat membandingkan masing-masing properti yang ditentukan dengan nilai tertentu menggunakan salah satu operasi perbandingan yang tercantum dalam Operasi perbandingan berbasis properti. Kedua nama properti dan operasi perbandingan peka huruf besar/kecil.
Filter berbasis properti harus dimulai dengan titik dua (:
). Untuk menentukan filter, gunakan sintaks berikut:
:PROPERTY, [!]COMPARE_OPERATION, "STRING"
dimana:
-
Atribut PROPERTY menentukan properti yang diinginkan.
-
Tanda seru opsional (
!
) meniadakan keluaran dari operasi perbandingan. Operator Boolean lainnya saat ini tidak didukung dalam filter berbasis properti. -
Atribut COMPARE_OPERATION menentukan salah satu operasi perbandingan yang tercantum dalam Operasi perbandingan berbasis properti.
-
Atribut STRING menentukan nilai yang dibandingkan dengan teks yang disediakan oleh properti. Nilai ini harus diapit dalam tanda kutip. Untuk meng-escape karakter tertentu di dalam string (misalnya tanda kutip (
"
)), gunakan karakter garis miring terbalik (\
).
Operasi-perbandingan | Deskripsi |
---|---|
|
Memeriksa apakah string yang disediakan cocok dengan bagian mana pun dari teks yang disediakan oleh properti. Untuk melakukan perbandingan tidak peka huruf besar kecil, gunakan |
|
Membandingkan string yang disediakan dengan semua teks yang disediakan oleh properti. Kedua nilai ini harus sama persis agar cocok. |
|
Memeriksa apakah string yang disediakan ditemukan persis di awal teks yang disediakan oleh properti. Untuk melakukan perbandingan tidak peka huruf besar kecil, gunakan |
|
Membandingkan POSIX BRE (Basic Regular Expression) yang disediakan dengan teks yang disediakan oleh properti. |
|
Membandingkan ekspresi reguler POSIX ERE (Extended Regular Expression) yang disediakan terhadap teks yang disediakan oleh properti. |
|
Memeriksa apakah properti kosong. Nilainya dibuang. Ini sangat berguna ketika bekerja dengan data yang dinormalisasi, di mana beberapa bidang dapat diisi berdasarkan hasil normalisasi. |
Berikut ini adalah beberapa contoh filter berbasis properti yang dapat ditentukan dalam /etc/rsyslog.conf
. Untuk memilih pesan syslog yang berisi string error
dalam teks pesannya, gunakan:
:msg, contains, "error"
Filter berikut memilih pesan syslog yang diterima dari nama host host1
:
:hostname, isequal, "host1"
Untuk memilih pesan syslog yang tidak berisi penyebutan kata fatal
dan error
dengan teks apa pun atau tanpa teks di antara mereka (misalnya, fatal lib error
), ketik:
:msg, !regex, "fatal .* error"
- Filter berbasis ekspresi
-
Filter berbasis ekspresi memilih pesan syslog sesuai dengan operasi aritmatika, Boolean, atau string yang ditentukan. Filter berbasis ekspresi menggunakan bahasa skrip rsyslog sendiri yang disebut RainerScript untuk membuat filter yang kompleks.
Sintaks dasar filter berbasis ekspresi terlihat sebagai berikut:
if EXPRESSION then ACTION else ACTION
dimana:
-
Atribut EXPRESSION mewakili ekspresi yang akan dievaluasi, misalnya:
$msg startswith 'DEVNAME'
atau$syslogfacility-text == 'local0'
. Anda dapat menentukan lebih dari satu ekspresi dalam satu filter dengan menggunakan operatorand
danor
. -
Atribut ACTION mewakili tindakan yang akan dilakukan jika ekspresi mengembalikan nilai
true
. Ini bisa berupa tindakan tunggal, atau sebarang skrip kompleks yang diapit kurung kurawal. -
Filter berbasis ekspresi ditunjukkan oleh kata kunci if di awal baris baru. Kata kunci then memisahkan EXPRESSION dari ACTION. Secara opsional, Anda dapat menggunakan kata kunci else untuk menentukan tindakan apa yang harus dilakukan jika kondisi tidak terpenuhi.
Dengan filter berbasis ekspresi, Anda dapat membuat syarat berlapis dengan menggunakan skrip yang diapit kurung kurawal seperti pada Filter berbasis ekspresi. Skrip memungkinkan Anda menggunakan filter facility/priority-based di dalam ekspresi. Di sisi lain, filter berbasis properti tidak direkomendasikan di sini. RainerScript mendukung ekspresi reguler dengan fungsi khusus re_match()
dan re_extract()
.
The following expression contains two nested conditions. The log files created by a program called prog1 are split into two files based on the presence of the "test" string in the message.
if $programname == 'prog1' then { action(type="omfile" file="/var/log/prog1.log") if $msg contains 'test' then action(type="omfile" file="/var/log/prog1test.log") else action(type="omfile" file="/var/log/prog1notest.log") }
Lihat Dokumentasi Daring untuk lebih banyak contoh berbagai filter berbasis ekspresi. RainerScript adalah dasar untuk format konfigurasi baru rsyslog, lihat Menggunakan Format Konfigurasi Baru
Aksi
Tindakan menentukan apa yang harus dilakukan dengan pesan yang difilter oleh pemilih yang sudah ditentukan. Berikut ini adalah beberapa tindakan yang dapat Anda tentukan dalam aturan Anda:
- Menyimpan pesan syslog ke berkas log
-
Sebagian besar tindakan menentukan ke berkas log mana pesan syslog disimpan. Ini dilakukan dengan menentukan path berkas setelah pemilih yang sudah ditentukan:
FILTER PATH
di mana FILTER adalah singkatan dari pemilih yang ditentukan pengguna dan PATH adalah path berkas target.
Misalnya, aturan berikut terdiri dari pemilih yang memilih semua pesan syslog cron dan tindakan yang menyimpannya ke dalam berkas log /var/log/cron.log
:
cron.* /var/log/cron.log
Secara baku, berkas log disinkronkan setiap kali pesan syslog dibuat. Gunakan tanda hubung (-
) sebagai prefiks path berkas yang Anda tentukan untuk meniadakan sinkronisasi:
FILTER -PATH
Perhatikan bahwa Anda mungkin kehilangan informasi jika sistem berakhir tepat setelah upaya penulisan. Namun, pengaturan ini dapat meningkatkan kinerja, terutama jika Anda menjalankan program yang menghasilkan pesan log yang sangat bertele-tele.
Path berkas yang Anda tentukan dapat berupa statik atau dinamik. Berkas statik diwakili oleh path berkas tetap seperti yang ditunjukkan pada contoh di atas. Path berkas dinamik dapat berbeda sesuai dengan pesan yang diterima. Path berkas dinamik diwakili oleh templat dan prefiks tanda tanya (?
):
FILTER ?DynamicFile
di mana DynamicFile adalah nama templat yang telah ditentukan yang memodifikasi path keluaran. Anda dapat menggunakan prefiks tanda hubung (-
) untuk menonaktifkan sinkronisasi, juga Anda dapat menggunakan beberapa templat yang dipisahkan oleh titik dua (;
) . Untuk informasi selengkapnya tentang templat, lihat Menghasilkan Nama Berkas Dinamik.
Jika berkas yang Anda tentukan adalah perangkat terminal atau /dev/console
yang sudah ada, pesan syslog masing-masing dikirim ke keluaran standar (menggunakan penanganan terminal khusus) atau konsol Anda (menggunakan penanganan khusus /dev/console
) saat menggunakan X Window System.
- Mengirim pesan syslog melalui jaringan
-
rsyslog memungkinkan Anda mengirim dan menerima pesan syslog melalui jaringan. Fitur ini memungkinkan Anda untuk mengelola pesan syslog dari beberapa host pada satu mesin. Untuk meneruskan pesan syslog ke mesin jarak jauh, gunakan sintaks berikut:
@(zNUMBER)HOST:PORT
dimana:
-
Tanda at (
@
) menunjukkan bahwa pesan syslog diteruskan ke host menggunakan protokolUDP
. Untuk menggunakan protokolTCP
, gunakan dua tanda tanpa spasi di antara mereka (@@
). -
Pengaturan opsional zNUMBER memungkinkan kompresi zlib untuk pesan syslog. Atribut NUMBER menentukan tingkat kompresi (dari 1 – terendah hingga 9 – maksimum). Penguatan kompresi secara otomatis diperiksa oleh
rsyslogd
, pesan dikompresi hanya jika ada penguatan kompresi dan pesan di bawah 60 byte tidak pernah dikompresi. -
Atribut HOST menentukan host yang menerima pesan syslog yang dipilih.
-
Atribut PORT menentukan port mesin host.
Saat menentukan alamat IPv6
sebagai host, lampirkan alamat dalam tanda kurung siku ([
, ]
).
Berikut ini adalah beberapa contoh tindakan yang meneruskan pesan syslog melalui jaringan (perhatikan bahwa semua tindakan didahului dengan pemilih yang memilih semua pesan dengan prioritas apa pun). Untuk meneruskan pesan ke 192.168.0.1
melalui protokol UDP
, ketik:
*.* @192.168.0.1
To forward messages to "example.com" using port 18 and the TCP
protocol, use:
*.* @@example.com:18
Berikut ini mengompresi pesan dengan zlib (kompresi level 9) dan meneruskannya ke 2001:db8::1
menggunakan protokol UDP
*.* @(z9)[2001:db8::1]
- Kanal keluaran
-
Saluran keluaran terutama digunakan untuk menentukan ukuran maksimum berkas log dapat tumbuh. Ini sangat berguna untuk rotasi berkas log (untuk informasi lebih lanjut lihat Rotasi Log). Saluran keluaran pada dasarnya adalah kumpulan informasi tentang aksi keluaran. Saluran keluaran didefinisikan oleh direktif
$outchannel
. Untuk menentukan saluran keluaran di/etc/rsyslog.conf
, gunakan sintaks berikut:
$outchannel NAME, FILE_NAME, MAX_SIZE, ACTION
dimana:
-
Atribut NAME menentukan nama saluran keluaran.
-
Atribut FILE_NAME menentukan nama berkas keluaran. Saluran keluaran hanya dapat menulis ke dalam berkas, bukan pipa, terminal, atau jenis keluaran lainnya.
-
Atribut MAX_SIZE mewakili ukuran maksimum berkas yang ditentukan (dalam FILE_NAME) dapat tumbuh. Nilai ini ditentukan dalam byte.
-
Atribut ACTION menentukan tindakan yang diambil ketika ukuran maksimum, yang didefinisikan dalam MAX_SIZE, tercapai.
Untuk menggunakan saluran keluaran yang ditentukan sebagai tindakan di dalam aturan, ketik:
FILTER :omfile:$NAME
Keluaran berikut menunjukkan rotasi log sederhana melalui penggunaan saluran keluaran. Pertama, saluran keluaran didefinisikan melalui direktif $outchannel
:
$outchannel log_rotation, /var/log/test_log.log, 104857600, /home/joe/log_rotation_script
dan kemudian digunakan dalam aturan yang memilih setiap pesan syslog dengan prioritas apa pun dan mengeksekusi saluran keluaran yang ditentukan sebelumnya pada pesan syslog yang diperoleh:
*.* :omfile:$log_rotation
Setelah batas (dalam contoh 100 MB) tercapai, /home/joe/log_rotation_script
dijalankan. Skrip ini dapat berisi apa saja mulai dari memindahkan berkas ke folder yang berbeda, menyunting konten tertentu darinya, atau hanya menghapusnya.
- Mengirim pesan syslog ke pengguna tertentu
-
rsyslog dapat mengirim pesan syslog ke pengguna tertentu dengan menentukan nama pengguna pengguna yang ingin Anda kirimi pesan (seperti pada Menentukan Beberapa Tindakan). Untuk menentukan lebih dari satu pengguna, pisahkan setiap nama pengguna dengan koma (
,
). Untuk mengirim pesan ke setiap pengguna yang saat ini masuk, gunakan tanda bintang (*
). - Mengeksekusi program
-
rsyslog memungkinkan Anda menjalankan program untuk pesan syslog yang dipilih dan menggunakan panggilan
system()
untuk menjalankan program dalam shell. Untuk menentukan program yang akan dieksekusi, awali dengan karakter caret (^
). Akibatnya, tentukan templat yang memformat pesan yang diterima dan meneruskannya ke executable yang ditentukan sebagai parameter satu baris (untuk informasi lebih lanjut tentang templat, lihat Templat).
FILTER ^EXECUTABLE; TEMPLATE
Di sini keluaran dari kondisi FILTER diproses oleh program yang diwakili oleh EXECUTABLE. Program ini dapat berupa executable yang valid. Ganti TEMPLATE dengan nama templat pemformatan.
Dalam contoh berikut, pesan syslog apa pun dengan prioritas apa pun dipilih, diformat dengan templat template
dan diteruskan sebagai parameter ke program test-program, yang kemudian dijalankan dengan parameter yang disediakan:
*.* ^test-program;template
Berhati-hatilah saat menggunakan tindakan eksekusi shell
Saat menerima pesan dari host mana pun, dan menggunakan tindakan eksekusi shell, Anda mungkin rentan terhadap injeksi perintah. Penyerang dapat mencoba menyuntikkan dan menjalankan perintah dalam program yang Anda tentukan untuk dieksekusi dalam tindakan Anda. Untuk menghindari kemungkinan ancaman keamanan, pertimbangkan secara menyeluruh penggunaan tindakan eksekusi shell. |
- Menyimpan pesan syslog dalam suatu basis data
-
Pesan syslog yang dipilih dapat langsung ditulis ke dalam tabel basis data menggunakan tindakan database writer. Penulis basis data menggunakan sintaks berikut:
:PLUGIN:DB_HOST,DB_NAME,DB_USER,DB_PASSWORD;TEMPLATE
dimana:
-
PLUGIN memanggil plug-in yang ditentukan yang menangani penulisan basis data (misalnya, plug-in
ommysql
). -
Atribut DB_HOST menentukan nama host basis data.
-
Atribut DB_NAME menentukan nama basis data.
-
Atribut DB_USER menentukan pengguna basis data.
-
Atribut DB_PASSWORD menentukan kata sandi yang digunakan dengan pengguna basis data yang disebutkan di atas.
-
Atribut TEMPLATE menentukan penggunaan opsional templat yang memodifikasi pesan syslog. Untuk informasi selengkapnya tentang templat, lihat Templat.
Menggunakan MySQL dan PostgreSQL
Saat ini, rsyslog hanya menyediakan dukungan untuk basis data $ModLoad ommysql # Output module for MySQL support $ModLoad ompgsql # Output module for PostgreSQL support Untuk informasi lebih lanjut tentang modul rsyslog, lihat Menggunakan Modul Rsyslog. Atau, Anda dapat menggunakan antarmuka basis data generik yang disediakan oleh modul |
- Membuang pesan syslog
-
Untuk membuang pesan yang Anda pilih, gunakan karakter tilde (
~
).
FILTER ~
Tindakan membuang sebagian besar digunakan untuk menyaring pesan sebelum melakukan pemrosesan lebih lanjut. Ini bisa efektif jika Anda ingin menghilangkan beberapa pesan berulang yang jika tidak akan memenuhi berkas log. Hasil tindakan buang tergantung pada di mana dalam berkas konfigurasi ditentukan, untuk hasil terbaik tempatkan tindakan ini di atas daftar tindakan. Harap dicatat bahwa setelah pesan telah dibuang, tidak ada cara untuk mengambilnya di baris berkas konfigurasi nanti.
Misalnya, aturan berikut membuang pesan syslog cron apa pun:
cron.* ~
Untuk setiap pemilih, Anda diizinkan untuk menentukan beberapa tindakan. Untuk menentukan beberapa tindakan untuk satu pemilih, tulis setiap tindakan pada baris terpisah dan mendahuluinya dengan karakter ampersand (&):
FILTER ACTION & ACTION & ACTION
Menentukan beberapa tindakan meningkatkan kinerja keseluruhan dari hasil yang diinginkan karena pemilih yang ditentukan harus dievaluasi hanya sekali.
Dalam contoh berikut, semua pesan syslog kernel dengan prioritas kritis (crit
) dikirim ke pengguna user1
, diproses oleh template temp
dan diantar ke test-program
yang dapat dieksekusi, dan diteruskan ke 192.168.0.1
melalui protokol UDP
.
kern.=crit user1 & ^test-program;temp & @192.168.0.1
Tindakan apa pun dapat diikuti oleh templat yang memformat pesan. Untuk menentukan templat, tambahkan titik koma (;
) di akhir tindakan dan tentukan nama templat. Untuk informasi selengkapnya tentang templat, lihat Templat.
Menggunakan templat
Templat harus didefinisikan sebelum digunakan dalam suatu tindakan, jika tidak maka diabaikan. Dengan kata lain, definisi templat harus selalu mendahului definisi aturan di |
Templat
Setiap keluaran yang dihasilkan oleh rsyslog dapat dimodifikasi dan diformat sesuai dengan kebutuhan Anda dengan menggunakan templat. Untuk membuat templat, gunakan sintaks berikut di /etc/rsyslog.conf
:
$template TEMPLATE_NAME,"text %PROPERTY% more text", OPTION
dimana:
-
$template
adalah direktif templat yang menunjukkan bahwa teks yang mengikutinya, mendefinisikan suatu templat. -
TEMPLATE_NAME
adalah nama templat. Gunakan nama ini untuk merujuk ke templat. -
Apa pun di antara dua tanda kutip (
`… `"
) adalah teks templat yang sebenarnya. Dalam teks ini, karakter khusus, seperti\n
untuk baris baru atau\r
untuk carriage return, dapat digunakan. Karakter lain, seperti%
atau"
, harus dihindari jika Anda ingin menggunakan karakter tersebut secara harafiah. -
Teks yang ditentukan antara dua tanda persen (
%
) menentukan properti yang memungkinkan Anda mengakses konten tertentu dari pesan syslog. Untuk informasi selengkapnya tentang properti, lihat Properti. -
Atribut
OPTION
menentukan opsi apa pun yang memodifikasi fungsionalitas templat. Opsi templat yang saat ini didukung adalahsql
danstdsql
, yang digunakan untuk memformat teks sebagai kueri SQL.
Opsi sql dan stdsql
Perhatikan bahwa penulis basis data memeriksa apakah opsi Lihat bagian Menyimpan pesan syslog dalam basis data di Aksi untuk informasi lebih lanjut. |
Templat dapat digunakan untuk menghasilkan nama berkas dinamis. Dengan menentukan properti sebagai bagian dari path berkas, berkas baru akan dibuat untuk setiap properti unik, yang merupakan cara mudah untuk mengklasifikasikan pesan syslog.
Misalnya, gunakan properti timegenerated
, yang mengekstrak stempel waktu dari pesan, untuk menghasilkan nama berkas unik untuk setiap pesan syslog:
$template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log"
Perlu diingat bahwa direktif $template
hanya menentukan templat. Anda harus menggunakannya di dalam aturan agar berlaku. Di /etc/rsyslog.conf
, gunakan tanda tanya (?
) dalam definisi tindakan untuk menandai templat nama berkas dinamis:
*.* ?DynamicFile
Properti yang didefinisikan di dalam templat (antara dua tanda persen (%
)) memungkinkan akses ke berbagai konten pesan syslog melalui penggunaan pengganti properti. Untuk menentukan properti di dalam templat (di antara dua tanda kutip (`
… "
)), gunakan sintaks berikut:
%PROPERTY_NAME:FROM_CHAR:TO_CHAR:OPTION%
dimana:
-
Atribut PROPERTY_NAME menentukan nama properti. Daftar semua properti yang tersedia dan deskripsi terperincinya dapat ditemukan di halaman manual
rsyslog.conf(5)
di bawah bagian Properti Yang Tersedia. -
FROM_CHAR dan atribut TO_CHAR menunjukkan berbagai karakter yang akan ditindaklanjuti oleh properti yang ditentukan. Atau, ekspresi reguler dapat digunakan untuk menentukan berbagai karakter. Untuk melakukannya, atur huruf
R
sebagai atribut FROM_CHAR dan tentukan ekspresi reguler yang Anda inginkan sebagai atribut TO_CHAR. -
Atribut OPTION menentukan opsi properti apa pun, seperti opsi
lowercase
untuk mengonversi masukan menjadi huruf kecil. Daftar semua opsi properti yang tersedia dan deskripsi terperincinya dapat ditemukan di halaman manualrsyslog.conf(5)
di bawah bagian Opsi Properti.
Berikut ini adalah beberapa contoh properti sederhana:
-
Properti berikut memperoleh seluruh teks pesan dari pesan syslog:
%msg%
-
Properti berikut memperoleh dua karakter pertama dari teks pesan dari pesan syslog:
%msg:1:2%
-
Properti berikut memperoleh seluruh teks pesan dari pesan syslog dan menjatuhkan karakter line feed terakhirnya:
%msg:::drop-last-lf%
-
Properti berikut memperoleh 10 karakter pertama dari stempel waktu yang dihasilkan ketika pesan syslog diterima dan memformatnya sesuai dengan standar tanggal RFC 3339.
%timegenerated:1:10:date-rfc3339%
Bagian ini menyajikan beberapa contoh templat rsyslog.
Templat pesan syslog bertele-tele menunjukkan templat yang memformat pesan syslog sehingga menghasilkan tingkat keparahan, fasilitas, stempel waktu pesan, stempel waktu pesan saat pesan diterima, nama host, tag pesan, teks pesan, dan diakhiri dengan baris baru.
$template verbose, "%syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%\n"
Template pesan wall menunjukkan templat yang menyerupai pesan wall tradisional (pesan yang dikirim ke setiap pengguna yang masuk dan memiliki izin mesg(1)
yang diatur ke ya
). Templat ini mengeluarkan teks pesan, bersama dengan nama host, tag pesan, dan stempel waktu, pada baris baru (menggunakan \r
dan \n
) dan membunyikan bel (menggunakan \7
).
$template wallmsg,"\r\n\7Message from syslogd@%HOSTNAME% at %timegenerated% ...\r\n %syslogtag% %msg%\n\r"
Templat pesan berformat basis data menunjukkan templat yang memformat pesan syslog sehingga dapat digunakan sebagai kueri basis data. Perhatikan penggunaan opsi sql
di akhir templat yang ditentukan sebagai opsi templat. Ini memberitahu penulis basis data untuk memformat pesan sebagai query SQL
MySQL.
$template dbFormat,"insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values (%msg%
, %syslogfacility%,%HOSTNAME%
, %syslogpriority%,%timereported:::date-mysql%
,%timegenerated:::date-mysql%
, %iut%,%syslogtag%
)", sql
rsyslog juga berisi satu set templat yang telah ditentukan yang diidentifikasi oleh awalan RSYSLOG_
. Ini dicadangkan untuk penggunaan syslog dan disarankan untuk tidak membuat templat menggunakan awalan ini untuk menghindari konflik. Daftar berikut menunjukkan templat yang telah ditentukan ini bersama dengan definisinya.
RSYSLOG_DebugFormat
-
Format khusus yang digunakan untuk penelusuran masalah properti.
"Debug line with all properties:\nFROMHOST:%FROMHOST%
, fromhost-ip:%fromhost-ip%
, HOSTNAME:%HOSTNAME%
, PRI: %PRI%,\nsyslogtag%syslogtag%
, programname:%programname%
, APP-NAME:%APP-NAME%
, PROCID:%PROCID%
, MSGID:%MSGID%
,\nTIMESTAMP:%TIMESTAMP%
, STRUCTURED-DATA:%STRUCTURED-DATA%
,\nmsg:%msg%
\nescaped msg:%msg:::drop-cc%
\nrawmsg:%rawmsg%
\n\n\"
RSYSLOG_SyslogProtocol23Format
-
Format yang ditentukan dalam IETF`s internet-draft ietf-syslog-protocol-23, yang diasumsikan menjadi RFC standar syslog baru.
"%PRI%1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n\"
RSYSLOG_FileFormat
-
Format berkas log gaya modern yang mirip dengan TraditionalFileFormat, tetapi dengan stempel waktu presisi tinggi dan informasi zona waktu.
"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"
RSYSLOG_TraditionalFileFormat
-
Format berkas log baku yang lebih lama dengan stempel waktu presisi rendah.
"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"
RSYSLOG_ForwardFormat
-
Format penerusan dengan stempel waktu presisi tinggi dan informasi zona waktu.
"%PRI%%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"
RSYSLOG_TraditionalForwardFormat
-
Format penerusan tradisional dengan stempel waktu presisi rendah.
"%PRI%%TIMESTAMP% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"
Direktif Global
Direktif global adalah opsi konfigurasi yang berlaku untuk daemon rsyslogd
. Mereka biasanya menentukan nilai untuk variabel tertentu yang telah didefinisikan yang mempengaruhi perilaku daemon rsyslogd
atau aturan yang mengikutinya. Semua direktif global harus dimulai dengan tanda dolar ($
). Hanya satu direktif yang dapat ditentukan per baris. Berikut ini adalah contoh direktif global yang menentukan ukuran maksimum antrean pesan syslog:
$MainMsgQueueSize 50000
Ukuran baku yang ditentukan untuk direktif ini (10.000 pesan) dapat ditimpa dengan menentukan nilai yang berbeda (seperti yang ditunjukkan pada contoh di atas).
Anda dapat menentukan beberapa direktif dalam berkas konfigurasi /etc/rsyslog.conf
. Direktif memengaruhi perilaku semua opsi konfigurasi hingga kejadian lain dari direktif yang sama terdeteksi. Direktif global dapat digunakan untuk mengonfigurasi tindakan, antrean, dan untuk debugging. Daftar lengkap semua direktif konfigurasi yang tersedia dapat ditemukan di Dokumentasi Daring. Saat ini, format konfigurasi baru telah dikembangkan yang menggantikan sintaks berbasis $ (lihat Menggunakan Format Konfigurasi Baru). Namun, arahan global klasik tetap didukung sebagai format warisan.
Rotasi Log
Berikut ini adalah contoh berkas konfigurasi /etc/logrotate.conf
:
# rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # uncomment this if you want your log files compressed compress
Semua baris dalam berkas konfigurasi sampel menentukan opsi global yang berlaku untuk setiap berkas log. Dalam contoh kami, berkas log diputar setiap minggu, berkas log yang diputar disimpan selama empat minggu, dan semua berkas log yang diputar dikompresi oleh gzip ke dalam format .gz
. Setiap baris yang dimulai dengan tanda hash (#) adalah komentar dan tidak diproses.
Anda dapat menentukan opsi konfigurasi untuk berkas log tertentu dan menempatkannya di bawah opsi global. Namun, disarankan untuk membuat berkas konfigurasi terpisah untuk berkas log tertentu di direktori /etc/logrotate.d/
dan menentukan opsi konfigurasi apa pun di sana.
Berikut ini adalah contoh berkas konfigurasi yang ditempatkan di direktori /etc/logrotate.d/
:
/var/log/messages { rotate 5 weekly postrotate /usr/bin/killall -HUP syslogd endscript }
Opsi konfigurasi dalam berkas ini khusus untuk berkas log /var/log/messages
saja. Pengaturan yang ditentukan di sini menimpa pengaturan global jika memungkinkan. Dengan demikian berkas log /var/log/messages
yang diputar akan disimpan selama lima minggu, bukan empat minggu seperti yang didefinisikan dalam opsi global.
Berikut ini adalah daftar beberapa direktif yang dapat Anda tentukan dalam berkas konfigurasi logrotate Anda:
-
weekly
— Menentukan rotasi berkas log yang akan dilakukan setiap minggu. Direktif serupa meliputi:-
daily
-
monthly
-
yearly
-
-
kompres
— Memungkinkan kompresi berkas log yang diputar. Direktif serupa meliputi:-
nocompress
-
compresscmd
— Menentukan perintah yang akan digunakan untuk kompresi. -
uncompresscmd
-
compressext
- Menentukan ekstensi apa yang akan digunakan untuk kompresi. -
compressoptions
- Menentukan opsi apa pun yang akan diteruskan ke program kompresi yang digunakan. -
delaycompress
- Menunda kompresi berkas log ke rotasi berkas log berikutnya.
-
-
rotate INTEGER
— Menentukan jumlah rotasi yang dialami berkas log sebelum dihapus atau dikirim ke alamat tertentu. Jika nilai 0 ditentukan, berkas log lama dihapus alih-alih diputar. -
mail ADDRESS
- Opsi ini memungkinkan pengiriman berkas log yang telah diputar sebanyak yang didefinisikan oleh direktifrotate
ke alamat yang ditentukan. Direktif serupa meliputi:-
nomail
-
mailfirst
- Menentukan bahwa berkas log yang baru saja diputar harus dikirim, bukan berkas log yang akan kedaluwarsa. -
maillast
- Menentukan bahwa berkas log yang akan kedaluwarsa akan dikirim, bukan berkas log yang baru saja diputar. Ini adalah opsi baku saatemail
diaktifkan.
-
For the full list of directives and various configuration options, see the logrotate(5)
manual page.
Menggunakan Format Konfigurasi Baru
Dalam rsyslog versi 6, sintaks konfigurasi baru diperkenalkan. Format konfigurasi baru ini bertujuan untuk menjadi lebih kuat, lebih intuitif, dan untuk mencegah kesalahan umum dengan tidak mengizinkan konstruksi tertentu yang tidak valid. Peningkatan sintaks diaktifkan oleh prosesor konfigurasi baru yang bergantung pada RainerScript. Format lama masih didukung sepenuhnya dan digunakan secara baku dalam berkas konfigurasi /etc/rsyslog.conf
.
RainerScript is a scripting language designed for processing network events and configuring event processors such as rsyslog. RainerScript was first used to define expression-based filters, see Expression-based Filters. The version of RainerScript in rsyslog version 7 implemented the input()
and ruleset()
statements, which permit the /etc/rsyslog.conf
configuration file to be written in the new syntax. The new syntax differs mainly in that it is much more structured; parameters are passed as arguments to statements, such as input, action, template, and module load. The scope of options is limited by blocks. This enhances readability and reduces the number of bugs caused by misconfiguration. There is also a significant performance gain. Some functionality is exposed in both syntaxes, some only in the new one.
Bandingkan konfigurasi yang ditulis dengan parameter gaya lama:
$InputFileName /tmp/inputfile $InputFileTag tag1: $InputFileStateFile inputfile-state $InputRunFileMonitor
dan konfigurasi yang sama dengan penggunaan pernyataan format baru:
input(type="imfile" file="/tmp/inputfile" tag="tag1:" statefile="inputfile-state")
Ini secara signifikan mengurangi banyaknya parameter yang digunakan dalam konfigurasi, meningkatkan keterbacaan, dan juga memberikan kecepatan eksekusi yang lebih tinggi. Untuk informasi lebih lanjut tentang pernyataan dan parameter RainerScript, lihat Dokumentasi Daring.
Rulesets
Leaving special directives aside, rsyslog handles messages as defined by rules that consist of a filter condition and an action to be performed if the condition is true. With a traditionally written /etc/rsyslog.conf
file, all rules are evaluated in order of appearance for every input message. This process starts with the first rule and continues until all rules have been processed or until the message is discarded by one of the rules.
However, rules can be grouped into sequences called rulesets. With rulesets, you can limit the effect of certain rules only to selected inputs or enhance the performance of rsyslog by defining a distinct set of actions bound to a specific input. In other words, filter conditions that will be inevitably evaluated as false for certain types of messages can be skipped. The legacy ruleset definition in /etc/rsyslog.conf
can look as follows:
$RuleSet rulesetname rule rule2
The rule ends when another rule is defined, or the default ruleset is called as follows:
$RuleSet RSYSLOG_DefaultRuleset
With the new configuration format in rsyslog 7, the input()
and ruleset()
statements are reserved for this operation. The new format ruleset definition in /etc/rsyslog.conf
can look as follows:
ruleset(name="rulesetname") { rule rule2 call rulesetname2 … }
Replace rulesetname with an identifier for your ruleset. The ruleset name cannot start with RSYSLOG_
since this namespace is reserved for use by rsyslog. RSYSLOG_DefaultRuleset
then defines the default set of rules to be performed if the message has no other ruleset assigned. With rule and rule2 you can define rules in filter-action format mentioned above. With the call
parameter, you can nest rulesets by calling them from inside other ruleset blocks.
After creating a ruleset, you need to specify what input it will apply to:
input(type="input_type" port="port_num" ruleset="rulesetname");
Here you can identify an input message by input_type, which is an input module that gathered the message, or by port_num – the port number. Other parameters such as file or tag can be specified for input()
. Replace rulesetname with a name of the ruleset to be evaluated against the message. In case an input message is not explicitly bound to a ruleset, the default ruleset is triggered.
You can also use the legacy format to define rulesets, for more information see Online Documentation.
The following rulesets ensure different handling of remote messages coming from different ports. Add the following into /etc/rsyslog.conf
:
ruleset(name="remote-10514") { action(type="omfile" file="/var/log/remote-10514") } ruleset(name="remote-10515") { cron.* action(type="omfile" file="/var/log/remote-10515-cron") mail.* action(type="omfile" file="/var/log/remote-10515-mail") } input(type="imtcp" port="10514" ruleset="remote-10514"); input(type="imtcp" port="10515" ruleset="remote-10515");
Rulesets shown in the above example define log destinations for the remote input from two ports, in case of 10515, messages are sorted according to the facility. Then, the TCP input is enabled and bound to rulesets. Note that you must load the required modules (imtcp) for this configuration to work.
Kompatibilitas dengan syslogd
Dari rsyslog versi 6, mode kompatibilitas yang ditentukan melalui opsi -c
telah dihapus. Selain itu, opsi baris perintah gaya syslogd tidak digunakan lagi dan mengonfigurasi rsyslog melalui opsi baris perintah ini harus dihindari. Namun, Anda dapat menggunakan beberapa templat dan direktif untuk mengonfigurasi rsyslogd
agar mengemulasi perilaku mirip syslogd.
Untuk informasi selengkapnya tentang berbagai opsi rsyslogd
, lihat halaman manual rsyslogd(8)
.
Bekerja dengan Antrian di Rsyslog
Antrean digunakan untuk meneruskan konten, sebagian besar pesan syslog, antara komponen rsyslog. Dengan antrean, rsyslog mampu memroses beberapa pesan secara bersamaan dan menerapkan beberapa tindakan ke satu pesan sekaligus. Aliran data di dalam rsyslog dapat diilustrasikan sebagai berikut:
Setiap kali rsyslog menerima pesan, pesan ini diteruskan ke preprosesor dan kemudian menempatkannya ke dalam antrean pesan utama. Pesan menunggu di sana untuk dicopot dan diteruskan ke prosesor aturan.
The rule processor is a parsing and filtering engine. Here, the rules defined in /etc/rsyslog.conf
are applied. Based on these rules, the rule processor evaluates which actions are to be performed. Each action has its own action queue. Messages are passed through this queue to the respective action processor which creates the final output. Note that at this point, several actions can run simultaneously on one message. For this purpose, a message is duplicated and passed to multiple action processors.
Hanya satu antrean per tindakan yang dimungkinkan. Tergantung pada konfigurasi, pesan dapat dikirim langsung ke prosesor aksi tanpa antrean tindakan. Ini adalah perilaku antrean langsung (lihat di bawah). Jika tindakan keluaran gagal, prosesor aksi memberi tahu antrean tindakan, yang kemudian mengambil elemen yang belum diproses kembali dan setelah interval waktu tertentu, tindakan tersebut dicoba lagi.
Singkatnya, ada dua posisi di mana antrean berdiri di rsyslog: baik di depan prosesor aturan sebagai satu antrean pesan utama atau di depan berbagai jenis tindakan keluaran sebagai antrean tindakan. Antrean memberikan dua keuntungan utama yang keduanya mengarah pada peningkatan kinerja pemrosesan pesan:
-
they serve as buffers that decouple producers and consumers in the structure of rsyslog
-
mereka memungkinkan paralelisasi tindakan yang dilakukan pada pesan
Selain itu, antrean dapat dikonfigurasi dengan beberapa direktif untuk memberikan kinerja optimal bagi sistem Anda. Opsi konfigurasi ini tercakup dalam bagian berikut.
Jika plug-in keluaran tidak dapat mengirimkan pesan, itu disimpan dalam antrean pesan sebelumnya. Jika antrean terisi, masukan diblokir hingga tidak lagi penuh. Ini akan mencegah pesan baru masuk melalui antrean yang diblokir. Dengan tidak adanya antrean tindakan terpisah ini dapat memiliki konsekuensi parah, seperti mencegah pencatatan log |
Mendefinisikan Antrian
Berdasarkan di mana pesan disimpan, ada beberapa jenis antrean: direct, in-memory, disk, dan disk-assisted in-memory yang paling banyak digunakan. Anda dapat memilih salah satu jenis ini untuk antrean pesan utama dan juga untuk antrean tindakan. Tambahkan yang berikut ini ke /etc/rsyslog.conf
:
$objectQueueType queue_type
Di sini, Anda dapat menerapkan pengaturan untuk antrean pesan utama (ganti object dengan MainMsg
) atau untuk antrean tindakan (ganti object dengan Action
). Ganti queue_type dengan salah satu direct
, linkedlist
atau fixedarray
(yang merupakan antrean dalam memori), atau disk
.
Pengaturan baku untuk antrean pesan utama adalah antrean FixedArray dengan batas 10.000 pesan. Antrean tindakan secara baku ditetapkan sebagai antrean Direct.
Untuk banyak operasi sederhana, seperti saat menulis keluaran ke berkas lokal, membangun antrean di depan tindakan tidak diperlukan. Untuk menghindari antrean, gunakan:
$objectQueueType Direct
Ganti object dengan MainMsg
atau dengan Action
untuk menggunakan opsi ini ke antrean pesan utama atau untuk antrean tindakan masing-masing. Dengan antrean langsung, pesan diteruskan secara langsung dan seketika dari produsen ke konsumen.
Antrean disk menyimpan pesan secara ketat pada hard drive, yang membuatnya sangat andal tetapi juga yang paling lambat dari semua mode antrean yang mungkin. Mode ini dapat digunakan untuk mencegah hilangnya data log yang sangat penting. Namun, antrean disk tidak disarankan dalam sebagian besar kasus penggunaan. Untuk mengatur antrean disk, ketik yang berikut ini ke dalam /etc/rsyslog.conf
:
$objectQueueType Disk
Ganti object dengan MainMsg
atau dengan Action
untuk menggunakan opsi ini ke antrean pesan utama atau untuk antrean tindakan masing-masing. Antrean disk ditulis dalam beberapa bagian, dengan ukuran baku 10 Mb. Ukuran baku ini dapat dimodifikasi dengan direktif konfigurasi berikut:
$objectQueueMaxFileSize size
di mana size mewakili ukuran komponen antrean disk yang ditentukan. Batas ukuran yang ditentukan tidak membatasi, rsyslog selalu menulis satu entri antrean lengkap, bahkan jika itu melanggar batas ukuran. Setiap bagian dari antrean disk cocok dengan berkas individual. Direktif penamaan untuk berkas-berkas ini terlihat sebagai berikut:
$objectQueueFilename name
Ini menetapkan prefiks name untuk berkas diikuti dengan angka 7 digit mulai dari satu dan bertambah untuk setiap berkas.
Dengan antrean dalam memori, pesan yang diantrekan disimpan dalam memori yang membuat prosesnya sangat cepat. Data yang diantrekan hilang jika komputer dihidupkan ulang atau dimatikan. Namun, Anda dapat menggunakan pengaturan $ActionQueueSaveOnShutdown
untuk menyimpan data sebelum shutdown. Ada dua jenis antrean dalam memori:
-
Antrean FixedArray — mode baku untuk antrean pesan utama, dengan batas 10.000 elemen. Jenis antrean ini menggunakan larik tetap yang telah dipra-alokasikan yang menyimpan penunjuk ke elemen antrean. Karena pointer ini, bahkan jika antrean kosong sejumlah memori dikonsumsi. Namun, FixedArray menawarkan kinerja runtime terbaik dan optimal ketika Anda mengharapkan banyaknya pesan antrean yang relatif rendah dan kinerja tinggi.
-
Antrean LinkedList — di sini, semua struktur dialokasikan secara dinamis dalam daftar tertaut, sehingga memori dialokasikan hanya bila diperlukan. Antrean LinkedList menangani rentetan pesan sesekali dengan sangat baik.
Secara umum, gunakan antrean LinkedList saat ragu. Dibandingkan dengan FixedArray, ia mengkonsumsi lebih sedikit memori dan menurunkan overhead pemrosesan.
Gunakan sintaks berikut untuk mengonfigurasi antrean dalam memori:
$objectQueueType LinkedList
$objectQueueType FixedArray
Ganti object dengan MainMsg
atau dengan Action
untuk menggunakan opsi ini ke antrean pesan utama atau untuk antrean tindakan masing-masing.
Antrean disk dan dalam memori memiliki kelebihan dan rsyslog memungkinkan Anda menggabungkannya dalam antrean dalam memori berbantuan disk. Untuk melakukannya, konfigurasikan antrean dalam memori normal lalu tambahkan direktif $objectQueueFileName
untuk menentukan nama berkas bagi bantuan disk. Antrean ini kemudian menjadi berbantuan disk, yang berarti memasangkan antrean dalam memori dengan antrean disk agar bekerja bersama-sama.
Antrean disk diaktifkan jika antrean dalam memori penuh atau perlu bertahan setelah mati. Dengan antrean berbantuan disk, Anda dapat mengatur parameter konfigurasi spesifik disk dan dalam memori. Jenis antrean ini mungkin yang paling umum digunakan, ini sangat berguna untuk aksi-aksi yang berpotensi berjalan lama dan tidak dapat diandalkan.
Untuk menentukan fungsi antrean dalam memori berbantuan disk, gunakan apa yang disebut watermark:
$objectQueueHighWatermark number
$objectQueueLowWatermark number
Ganti object dengan MainMsg
atau dengan Action
untuk menggunakan opsi ini ke antrean pesan utama atau untuk antrean tindakan masing-masing. Ganti number dengan banyaknya pesan yang diantrekan. Ketika antrean dalam memori mencapai angka yang ditentukan oleh watermark tinggi, ia mulai menulis pesan ke disk dan berlanjut sampai ukuran antrean dalam memori turun ke angka yang ditentukan oleh watermark rendah. Watermark yang diatur dengan benar meminimalkan penulisan disk yang tidak perlu, tetapi juga meninggalkan ruang memori untuk rentetan pesan karena menulis ke berkas disk agak makan waktu. Oleh karena itu, watermark tinggi harus lebih rendah dari seluruh kapasitas antrean yang ditetapkan dengan $objectQueueSize. Perbedaan antara watermark tinggi dan ukuran antrean keseluruhan adalah penyangga memori cadangan yang disediakan untuk rentetan pesan. Di sisi lain, mengatur watermark tinggi terlalu rendah akan sering mengaktifkan bantuan disk yang tidak perlu.
Rsyslog sering digunakan untuk mengelola sistem pencatatan terpusat, di mana pesan log diteruskan ke server melalui jaringan. Untuk menghindari kehilangan pesan saat server tidak tersedia, disarankan untuk mengonfigurasi antrean tindakan untuk tindakan penerusan. Dengan cara ini, pesan yang gagal dikirim disimpan secara lokal sampai server dapat dijangkau lagi. Perhatikan bahwa antrean tersebut tidak dapat dikonfigurasi untuk koneksi menggunakan protokol UDP
. Untuk membuat koneksi yang sepenuhnya andal, misalnya ketika server log Anda berada di luar jaringan pribadi Anda, pertimbangkan untuk menggunakan protokol RELP yang dijelaskan dalam Memakai RELP.
Misalkan tugasnya adalah meneruskan pesan log dari sistem ke server dengan nama host example.com, dan mengonfigurasi antrean tindakan untuk menyangga pesan jika terjadi pemadaman server. Untuk melakukannya, lakukan langkah-langkah berikut:
-
Buat direktori kerja untuk menyimpan berkas antrean. Misalnya:
~]# mkdir /rsyslog/work/
-
Gunakan konfigurasi berikut di
/etc/rsyslog.conf
atau buat berkas dengan konten berikut di direktori/etc/rsyslog.d/
:
$WorkDirectory /rsyslog/work $ActionQueueType LinkedList $ActionQueueFileName example_fwd $ActionResumeRetryCount -1 $ActionQueueSaveOnShutdown on *.* @@example.com:18
Dimana:
-
direktori
/rsyslog/work/
yang dibuat pada langkah sebelumnya ditandai sebagai direktori kerja, -
$ActionQueueType
memungkinkan antrean dalam memori LinkedList, -
$ActionFileName
mendefinisikan penyimpanan disk, dalam hal ini berkas cadangan dibuat di direktori/rsyslog/work/
dengan awalan example_fwd, -
pengaturan
$ActionResumeRetryCount -1
mencegah rsyslog membuang pesan saat mencoba kembali untuk terhubung jika server tidak merespons, -
mengaktifkan
$ActionQueueSaveOnShutdown
menyimpan data dalam memori jika rsyslog mati, -
baris terakhir meneruskan semua pesan yang diterima ke server log, spesifikasi port adalah opsional.
Dengan konfigurasi di atas, rsyslog menyimpan pesan dalam memori jika server jarak jauh tidak dapat dijangkau. Berkas pada disk dibuat hanya jika rsyslog kehabisan ruang antrean memori yang dikonfigurasi atau perlu dimatikan, yang menguntungkan kinerja sistem.
Proses meneruskan pesan log ke beberapa server mirip dengan prosedur sebelumnya:
-
Buat direktori kerja bagi rsyslog untuk menyimpan berkas antrean. Misalnya:
~]# mkdir /rsyslog/work/
-
Setiap server tujuan memerlukan aturan penerusan terpisah, spesifikasi antrean tindakan, dan berkas cadangan pada disk. Misalnya, gunakan konfigurasi berikut di
/etc/rsyslog.conf
atau buat berkas dengan konten berikut di direktori/etc/rsyslog.d/
:
$WorkDirectory /rsyslog/work $ActionQueueType LinkedList $ActionQueueFileName example_fwd1 $ActionResumeRetryCount -1 $ActionQueueSaveOnShutdown on *.* @@example1.com $ActionQueueType LinkedList $ActionQueueFileName example_fwd2 $ActionResumeRetryCount -1 $ActionQueueSaveOnShutdown on *.* @@example2.com
Mengelola Antrean
Semua jenis antrean dapat dikonfigurasi lebih lanjut agar sesuai dengan kebutuhan Anda. Anda dapat menggunakan beberapa direktif untuk mengubah antrean tindakan dan antrean pesan utama. Saat ini, ada lebih dari 20 parameter antrean yang tersedia, lihat Dokumentasi Daring. Beberapa pengaturan ini digunakan secara umum, yang lain, seperti manajemen thread pekerja, memberikan kontrol yang lebih dekat atas perilaku antrean dan dicadangkan untuk pengguna tingkat lanjut. Dengan pengaturan tingkat lanjut, Anda dapat mengoptimalkan kinerja rsyslog, menjadwalkan antrean, atau memodifikasi perilaku antrean pada shutdown sistem.
Anda dapat membatasi banyaknya pesan yang dapat berisi antrean dengan pengaturan berikut:
$objectQueueHighWatermark number
Ganti object dengan MainMsg
atau dengan Action
untuk menggunakan opsi ini ke antrean pesan utama atau untuk antrean tindakan masing-masing. Ganti number dengan banyaknya pesan yang diantrekan. Anda dapat mengatur ukuran antrean hanya sebagai banyaknya pesan, bukan sebagai ukuran memori sebenarnya. Ukuran antrean baku adalah 10.000 pesan untuk antrean pesan utama dan antrean ruleset, dan 1.000 untuk antrean tindakan.
Antrean berbantuan disk tidak terbatas secara baku dan tidak dapat dibatasi dengan direktif ini, tetapi Anda dapat memesannya ruang disk fisik dalam byte dengan pengaturan berikut:
$objectQueueMaxDiscSpace number
Ganti object dengan MainMsg
atau dengan Action
. Ketika batas ukuran yang ditentukan oleh number tercapai, pesan akan dibuang sampai banyaknya ruang yang cukup dibebaskan oleh pesan yang dilepas dari antrean.
Saat antrean mencapai sejumlah pesan tertentu, Anda dapat membuang pesan yang kurang penting untuk menghemat ruang dalam antrean untuk entri dengan prioritas lebih tinggi. Ambang batas yang meluncurkan proses pembuangan dapat diatur dengan apa yang disebut discard mark:
$objectQueueDiscardMark number
Ganti object dengan MainMsg
atau dengan Action
untuk menggunakan opsi ini ke antrean pesan utama atau untuk antrean tindakan masing-masing. Di sini, number adalah banyaknya pesan yang harus berada dalam antrean untuk memulai proses pembuangan. Untuk menentukan pesan mana yang akan dibuang, gunakan:
$objectQueueDiscardSeverity priority
Ganti priority dengan salah satu kata kunci berikut (atau dengan angka): debug (7), info (6), notice (5), warning (4), err (3), crit (2), alert (1), dan emerg (0). Dengan pengaturan ini, pesan yang baru masuk dan sudah diantrekan dengan prioritas yang lebih rendah dari yang ditentukan akan dihapus dari antrean segera setelah tanda buang tercapai.
Anda dapat mengonfigurasi rsyslog agar memproses antrean selama periode waktu tertentu. Dengan opsi ini Anda dapat, misalnya, mentransfer beberapa pemrosesan ke jam di luar jam sibuk. Untuk menentukan kerangka waktu, gunakan sintaks berikut:
$objectQueueDequeueTimeBegin hour
$objectQueueDequeueTimeEnd hour
Dengan hour Anda dapat menentukan jam yang mengikat kerangka waktu Anda. Gunakan format 24 jam tanpa menit.
Suatu worker thread melakukan tindakan tertentu pada pesan yang diantrekan. Misalnya, dalam antrean pesan utama, tugas pekerja adalah menerapkan logika filter ke setiap pesan masuk dan mengirimkannya ke antrean tindakan yang relevan. Saat pesan tiba, thread pekerja dimulai secara otomatis. Saat banyaknya pesan mencapai angka tertentu, thread pekerja lain diaktifkan. Untuk menentukan angka ini, gunakan:
$objectQueueWorkerThreadMinimumMessages number
Ganti number dengan banyaknya pesan yang akan memicu thread pekerja tambahan. Misalnya, dengan number diatur ke 100, thread pekerja baru dimulai ketika lebih dari 100 pesan tiba. Ketika lebih dari 200 pesan tiba, thread pekerja ketiga dimulai dan seterusnya. Namun, terlalu banyak thread pekerja yang berjalan secara paralel menjadi tidak efektif, sehingga Anda dapat membatasi angka maksimumnya dengan menggunakan:
$objectQueueWorkerThreads number
dimana number adalah banyaknya maksimum thread kerja yang dapat berjalan secara paralel. Untuk antrean pesan utama, batas baku adalah 1 thread. Setelah thread pekerja telah dimulai, itu terus berjalan sampai batas waktu tidak aktif muncul. Untuk mengatur panjang batas waktu, ketik:
$objectQueueWorkerTimeoutThreadShutdown time
Ganti time dengan durasi yang ditetapkan dalam mili detik. Tanpa pengaturan ini, batas waktu nol diterapkan dan thread pekerja dihentikan segera ketika kehabisan pesan. Jika Anda menentukan time sebagai -1
, tidak ada thread yang akan ditutup.
To increase performance, you can configure rsyslog to dequeue multiple messages at once. To set the upper limit for such dequeueing, use:
$objectQueueDequeueBatchSize number
Replace number with the maximum number of messages that can be dequeued at once. Note that a higher setting combined with a higher number of permitted working threads results in greater memory consumption.
Saat mengakhiri antrean yang masih berisi pesan, Anda dapat mencoba meminimalkan kehilangan data dengan menentukan interval waktu bagi thread pekerja untuk menyelesaikan pemrosesan antrean:
$objectQueueTimeoutShutdown time
Tentukan time dalam mili detik. Jika setelah periode itu masih ada beberapa pesan yang diterima, pekerja menyelesaikan elemen data saat ini dan kemudian mengakhiri. Oleh karena itu, pesan yang tidak diproses hilang. Interval waktu lain dapat diatur bagi pekerja untuk menyelesaikan elemen akhir:
$objectQueueTimeoutActionCompletion time
Jika batas waktu ini berakhir, setiap pekerja yang tersisa ditutup. Untuk menyimpan data saat shutdown, gunakan:
$objectQueueTimeoutSaveOnShutdown time
Jika diatur, semua elemen antrean disimpan ke disk sebelum rsyslog berakhir.
Mengonfigurasi rsyslog di Server Log
The rsyslog
service provides facilities both for running a logging server and for configuring individual systems to send their log files to the logging server. See Reliable Forwarding of Log Messages to a Server for information on client rsyslog configuration.
The rsyslog
service must be installed on the system that you intend to use as a logging server and all systems that will be configured to send logs to it. Rsyslog is installed by default in 29. If required, to ensure that it is, enter the following command as root
:
~]# dnf install rsyslog
The steps in this procedure must be followed on the system that you intend to use as your logging server. All steps in this procedure must be made as the root
user:
-
Configure the firewall to allow
rsyslog
TCP
traffic.-
The default port for
rsyslog
TCP
traffic is514
. To allowTCP
traffic on this port, enter a command as follows:
-
~]# firewall-cmd --zone=zone --add-port=514/tcp success
Where zone is the zone of the interface to use.
-
Buka berkas
/etc/rsyslog.conf
di editor teks dan lanjutkan sebagai berikut:-
Tambahkan baris-baris ini di bawah bagian modul tetapi di atas bagian
Provides UDP syslog reception
:
-
# Define templates before the rules that use them ### Per-Host Templates for Remote Systems ### $template TmplAuthpriv, "/var/log/remote/auth/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log" $template TmplMsg, "/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
-
Ganti bagian baku
Provides TCP syslog reception
dengan yang berikut:
# Provides TCP syslog reception $ModLoad imtcp # Adding this ruleset to process remote messages $RuleSet remote1 authpriv.* ?TmplAuthpriv *.info;mail.none;authpriv.none;cron.none ?TmplMsg $RuleSet RSYSLOG_DefaultRuleset #End the rule set by switching back to the default rule set $InputTCPServerBindRuleset remote1 #Define a new input and bind it to the "remote1" rule set $InputTCPServerRun 514
Simpan perubahan ke berkas /etc/rsyslog.conf
.
-
Layanan
rsyslog
harus berjalan di server log dan sistem yang mencoba mencatatkan log ke sana.-
Gunakan perintah systemctl untuk memulai layanan
rsyslog
.
-
~]# systemctl start rsyslog
-
Untuk memastikan layanan
rsyslog
dimulai secara otomatis di masa mendatang, masukkan perintah berikut sebagai root:
~]# systemctl enable rsyslog
Server log Anda sekarang dikonfigurasi untuk menerima dan menyimpan berkas log dari sistem lain di lingkungan Anda.
Menggunakan Sintaks Templat Baru pada Server Log
Rsyslog 7 has a number of different templates styles. The string template most closely resembles the legacy format. Reproducing the templates from the example above using the string format would look as follows:
template(name="TmplAuthpriv" type="string" string="/var/log/remote/auth/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log" ) template(name="TmplMsg" type="string" string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log" )
Templat ini juga dapat ditulis dalam format daftar sebagai berikut:
template(name="TmplAuthpriv" type="list") { constant(value="/var/log/remote/auth/") property(name="hostname") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") }
template(name="TmplMsg" type="list") { constant(value="/var/log/remote/msg/") property(name="hostname") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") }
Format teks templat ini mungkin lebih mudah dibaca bagi mereka yang baru mengenal rsyslog dan oleh karena itu dapat lebih mudah beradaptasi seiring perubahan persyaratan.
Untuk menyelesaikan perubahan sintaks baru, kita perlu mereproduksi perintah memuat modul, menambahkan kumpulan aturan, dan kemudian mengikat kumpulan aturan ke protokol, port, dan ruleset:
module(load="imtcp") ruleset(name="remote1"){ authpriv.* action(type="omfile" DynaFile="TmplAuthpriv") *.info;mail.none;authpriv.none;cron.none action(type="omfile" DynaFile="TmplMsg") } input(type="imtcp" port="514" ruleset="remote1")
Menggunakan Modul Rsyslog
Due to its modular design, rsyslog offers a variety of modules which provide additional functionality. Note that modules can be written by third parties. Most modules provide additional inputs (see Input Modules below) or outputs (see Output Modules below). Other modules provide special functionality specific to each module. The modules may provide additional configuration directives that become available after a module is loaded. To load a module, use the following syntax:
$ModLoad MODULE
where $ModLoad
is the global directive that loads the specified module and MODULE represents your desired module. For example, if you want to load the Text File Input Module (imfile) that enables rsyslog to convert any standard text files into syslog messages, specify the following line in the /etc/rsyslog.conf
configuration file:
$ModLoad imfile
rsyslog offers a number of modules which are split into the following main categories:
-
Modul Masukan — Modul masukan mengumpulkan pesan dari berbagai sumber. Nama modul masukan selalu dimulai dengan awalan
im
, seperti imfile dan imjournal. -
Output Modules — Output modules provide a facility to issue message to various targets such as sending across a network, storing in a database, or encrypting. The name of an output module always starts with the
om
prefix, such as omsnmp, omrelp, and so on. -
Parser Modules — These modules are useful in creating custom parsing rules or to parse malformed messages. With moderate knowledge of the C programming language, you can create your own message parser. The name of a parser module always starts with the
pm
prefix, such as pmrfc5424, pmrfc3164, and so on. -
Message Modification Modules — Message modification modules change content of syslog messages. Names of these modules start with the
mm
prefix. Message Modification Modules such as mmanon, mmnormalize, or mmjsonparse are used for anonymization or normalization of messages. -
String Generator Modules — String generator modules generate strings based on the message content and strongly cooperate with the template feature provided by rsyslog. For more information on templates, see Templates. The name of a string generator module always starts with the
sm
prefix, such as smfile or smtradfile. -
Library Modules — Library modules provide functionality for other loadable modules. These modules are loaded automatically by rsyslog when needed and cannot be configured by the user.
A comprehensive list of all available modules and their detailed description can be found at https://www.rsyslog.com/doc/rsyslog_conf_modules.html.
Note that when rsyslog loads any modules, it provides them with access to some of its functions and data. This poses a possible security threat. To minimize security risks, use trustworthy modules only. |
Mengimpor Berkas Teks
The Text File Input Module, abbreviated as imfile, enables rsyslog to convert any text file into a stream of syslog messages. You can use imfile to import log messages from applications that create their own text file logs. To load imfile, add the following into /etc/rsyslog.conf
:
$ModLoad imfile $InputFilePollInterval int
It is sufficient to load imfile once, even when importing multiple files. The $InputFilePollInterval global directive specifies how often rsyslog checks for changes in connected text files. The default interval is 10 seconds, to change it, replace int with a time interval specified in seconds.
To identify the text files to import, use the following syntax in /etc/rsyslog.conf
:
# File 1 $InputFileName path_to_file $InputFileTag tag: $InputFileStateFile state_file_name $InputFileSeverity severity $InputFileFacility facility $InputRunFileMonitor # File 2 $InputFileName path_to_file2 ...
Four settings are required to specify an input text file:
-
replace path_to_file with a path to the text file.
-
replace tag: with a tag name for this message.
-
replace state_file_name with a unique name for the state file. State files, which are stored in the rsyslog working directory, keep cursors for the monitored files, marking what partition has already been processed. If you delete them, whole files will be read in again. Make sure that you specify a name that does not already exist.
-
add the $InputRunFileMonitor directive that enables the file monitoring. Without this setting, the text file will be ignored.
Apart from the required directives, there are several other settings that can be applied on the text input. Set the severity of imported messages by replacing severity with an appropriate keyword. Replace facility with a keyword to define the subsystem that produced the message. The keywords for severity and facility are the same as those used in facility/priority-based filters, see Filters.
The Apache HTTP server creates log files in text format. To apply the processing capabilities of rsyslog to apache error messages, first use the imfile module to import the messages. Add the following into /etc/rsyslog.conf
:
$ModLoad imfile $InputFileName /var/log/httpd/error_log $InputFileTag apache-error: $InputFileStateFile state-apache-error $InputRunFileMonitor
Mengekspor Pesan ke Basis Data
Processing of log data can be faster and more convenient when performed in a database rather than with text files. Based on the type of DBMS used, choose from various output modules such as ommysql, ompgsql, omoracle, or ommongodb. As an alternative, use the generic omlibdbi output module that relies on the libdbi
library. The omlibdbi module supports database systems Firebird/Interbase, MS SQL, Sybase, SQLite, Ingres, Oracle, mSQL, MySQL, and PostgreSQL.
To store the rsyslog messages in a MySQL database, add the following into /etc/rsyslog.conf
:
$ModLoad ommysql $ActionOmmysqlServerPort 1234 *.* :ommysql:database-server,database-name,database-userid,database-password
First, the output module is loaded, then the communication port is specified. Additional information, such as name of the server and the database, and authentication data, is specified on the last line of the above example.
Mengaktifkan Transportasi Terenkripsi
Confidentiality and integrity in network transmissions can be provided by either the TLS or GSSAPI encryption protocol.
Transport Layer Security (TLS) is a cryptographic protocol designed to provide communication security over the network. When using TLS, rsyslog messages are encrypted before sending, and mutual authentication exists between the sender and receiver.
Generic Security Service API (GSSAPI) is an application programming interface for programs to access security services. To use it in connection with rsyslog you must have a functioning Kerberos environment.
Interaksi Rsyslog dan Jurnal
As mentioned above, Rsyslog and Journal, the two logging applications present on your system, have several distinctive features that make them suitable for specific use cases. In many situations it is useful to combine their capabilities, for example to create structured messages and store them in a file database (see Structured Logging with Rsyslog). A communication interface needed for this cooperation is provided by input and output modules on the side of Rsyslog and by the Journal's communication socket.
By default, rsyslogd
uses the imjournal
module as a default input mode for journal files. With this module, you import not only the messages but also the structured data provided by journald
. Also, older data can be imported from journald
(unless forbidden with the $ImjournalIgnorePreviousMessages
directive). See Importing Data from Journal for basic configuration of imjournal
.
As an alternative, configure rsyslogd
to read from the socket provided by journal
as an output for syslog-based applications. The path to the socket is /run/systemd/journal/syslog
. Use this option when you want to maintain plain rsyslog messages. Compared to imjournal
the socket input currently offers more features, such as ruleset binding or filtering. To import Journal data trough the socket, use the following configuration in /etc/rsyslog.conf
:
$ModLoad imuxsock $OmitLocalLogging off
The above syntax loads the imuxsock
module and turns off the $OmitLocalLogging
directive, which enables the import trough the system socket. The path to this socket is specified separately in /etc/rsyslog.d/listen.conf
as follows:
$SystemLogSocketName /run/systemd/journal/syslog
You can also output messages from Rsyslog to Journal with the omjournal
module. Configure the output in /etc/rsyslog.conf
as follows:
$ModLoad omjournal *.* :omjournal:
For instance, the following configuration forwards all received messages on tcp port 10514 to the Journal:
$ModLoad imtcp $ModLoad omjournal $RuleSet remote *.* :omjournal: $InputTCPServerBindRuleset remote $InputTCPServerRun 10514
Pencatatan Log Terstruktur dengan Rsyslog
On systems that produce large amounts of log data, it can be convenient to maintain log messages in a structured format. With structured messages, it is easier to search for particular information, to produce statistics and to cope with changes and inconsistencies in message structure. Rsyslog uses the JSON (JavaScript Object Notation) format to provide structure for log messages.
Bandingkan pesan log tidak terstruktur berikut:
Oct 25 10:20:37 localhost anacron[1395]: Jobs will be executed sequentially
dengan yang terstruktur:
{"timestamp":"2013-10-25T10:20:37", "host":"localhost", "program":"anacron", "pid":"1395", "msg":"Jobs will be executed sequentially"}
Searching structured data with use of key-value pairs is faster and more precise than searching text files with regular expressions. The structure also lets you to search for the same entry in messages produced by various applications. Also, JSON files can be stored in a document database such as MongoDB, which provides additional performance and analysis capabilities. On the other hand, a structured message requires more disk space than the unstructured one.
In rsyslog, log messages with meta data are pulled from Journal with use of the imjournal
module. With the mmjsonparse
module, you can parse data imported from Journal and from other sources and process them further, for example as a database output. For parsing to be successful, mmjsonparse
requires input messages to be structured in a way that is defined by the Lumberjack project.
The Lumberjack project aims to add structured logging to rsyslog in a backward-compatible way. To identify a structured message, Lumberjack specifies the @cee: string that prepends the actual JSON structure. Also, Lumberjack defines the list of standard field names that should be used for entities in the JSON string. For more information on Lumberjack, see Online Documentation.
The following is an example of a lumberjack-formatted message:
@cee: {"pid":17055, "uid":1000, "gid":1000, "appname":"logger", "msg":"Message text."}
To build this structure inside Rsyslog, a template is used, see Filtering Structured Messages. Applications and servers can employ the libumberlog
library to generate messages in the lumberjack-compliant form. For more information on libumberlog
, see Online Documentation.
Mengimpor Data dari Jurnal
The imjournal module is Rsyslog's input module to natively read the journal files (see Interaction of Rsyslog and Journal). Journal messages are then logged in text format as other rsyslog messages. However, with further processing, it is possible to translate meta data provided by Journal into a structured message.
To import data from Journal to Rsyslog, use the following configuration in /etc/rsyslog.conf
:
$ModLoad imjournal $imjournalPersistStateInterval number_of_messages $imjournalStateFile path $imjournalRatelimitInterval seconds $imjournalRatelimitBurst burst_number $ImjournalIgnorePreviousMessages off/on
-
With number_of_messages, you can specify how often the journal data must be saved. This will happen each time the specified number of messages is reached.
-
Ganti path dengan jalur ke berkas status. Berkas ini melacak entri jurnal yang terakhir diproses.
-
With seconds, you set the length of the rate limit interval. The number of messages processed during this interval can not exceed the value specified in burst_number. The default setting is 20,000 messages per 600 seconds. Rsyslog discards messages that come after the maximum burst within the time frame specified.
-
With
$ImjournalIgnorePreviousMessages
you can ignore messages that are currently in Journal and import only new messages, which is used when there is no state file specified. The default setting isoff
. Please note that if this setting is off and there is no state file, all messages in the Journal are processed, even if they were already processed in a previous rsyslog session.
You can use $ModLoad imuxsock $ModLoad imjournal $OmitLocalLogging on $AddUnixListenSocket /run/systemd/journal/syslog |
You can translate all data and meta data stored by Journal into structured messages. Some of these meta data entries are listed in Verbose journalctl Output, for a complete list of journal fields see the systemd.journal-fields(7)
manual page. For example, it is possible to focus on kernel journal fields, that are used by messages originating in the kernel.
Memfilter Pesan Terstruktur
To create a lumberjack-formatted message that is required by rsyslog's parsing module, use the following template:
template(name="CEETemplate" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag% @cee: %$!all-json%\n")
This template prepends the @cee:
string to the JSON string and can be applied, for example, when creating an output file with omfile
module. To access JSON field names, use the $! prefix. For example, the following filter condition searches for messages with specific hostname and UID:
($!hostname == "hostname" && $!UID== "UID")
Mengurai JSON
Modul mmjsonparse
digunakan untuk mengurai pesan terstruktur.
These messages can come from Journal or from other input sources, and must be formatted in a way defined by the Lumberjack project. These messages are identified by the presence of the @cee: string. Then, mmjsonparse
checks if the JSON structure is valid and then the message is parsed.
To parse lumberjack-formatted JSON messages with mmjsonparse
, use the following configuration in the /etc/rsyslog.conf
:
$ModLoad mmjsonparse *.* :mmjsonparse:
In this example, the mmjsonparse
module is loaded on the first line, then all messages are forwarded to it. Currently, there are no configuration parameters available for mmjsonparse
.
Storing Messages in the MongoDB
Rsyslog mendukung penyimpanan log JSON dalam basis data dokumen MongoDB melalui modul keluaran ommongodb.
To forward log messages into MongoDB, use the following syntax in the /etc/rsyslog.conf
(configuration parameters for ommongodb are available only in the new configuration format; see Using the New Configuration Format):
$ModLoad ommongodb *.* action(type="ommongodb" server="DB_server" serverport="port" db="DB_name" collection="collection_name" uid="UID" pwd="password")
-
Replace DB_server with the name or address of the MongoDB server. Specify port to select a non-standard port from the MongoDB server. The default port value is
0
and usually there is no need to change this parameter. -
With DB_name, you identify to which database on the MongoDB server you want to direct the output. Replace collection_name with the name of a collection in this database. In MongoDB, collection is a group of documents, the equivalent of an RDBMS table.
-
Anda dapat mengatur detail login Anda dengan mengganti UID dan password.
You can shape the form of the final database output with use of templates. By default, rsyslog uses a template based on standard lumberjack field names.
Debugging Rsyslog
To run rsyslogd
in debugging mode, use the following command:
rsyslogd
-dn
With this command, rsyslogd
produces debugging information and prints it to the standard output. The -n
stands for "no fork". You can modify debugging with environmental variables, for example, you can store the debug output in a log file. Before starting rsyslogd
, type the following on the command line:
export RSYSLOG_DEBUGLOG="path" export RSYSLOG_DEBUG="Debug"
Replace path with a desired location for the file where the debugging information will be logged. For a complete list of options available for the RSYSLOG_DEBUG variable, see the related section in the rsyslogd(8)
manual page.
To check if syntax used in the /etc/rsyslog.conf
file is valid use:
rsyslogd
-N
1
Where 1
represents level of verbosity of the output message. This is a forward compatibility option because currently, only one level is provided. However, you must add this argument to run the validation.
Penelusuran Masalah Pencatatan Log ke suatu Server
-
Ensure the time is correctly set on the systems generating the log messages as well as on any logging servers. See Configuring the Date and Time for information on checking and setting the time. See Configuring NTP Using ntpd and Configuring NTP Using the chrony Suite for information on using
NTP
to keep the system clock accurately set. -
On a logging server, check that the firewall has the appropriate ports open to allow ingress of either
UDP
orTCP
, depending on what traffic and port the sending systems are configured to use. For example:
~]# firewall-cmd --zone=public --list-ports
For more information on opening and closing ports in firewalld
, see the Red Hat Enterprise Linux 7 Security Guide. Review the configuration of the logging server to ensure it is listening on the same port the sending systems are configured to send on, and all are set to use the same protocol.
-
Use the logger command to generate test log messages. For example:
~]$ logger -p authpriv.info "Test Secret" ~]$ logger -p auth.info "Test Info"
Lihat halaman manual logger(1)
untuk informasi lebih lanjut tentang perintah logger.
Menggunakan Jurnal
The Journal is a component of systemd that is responsible for viewing and management of log files. It can be used in parallel, or in place of a traditional syslog daemon, such as rsyslogd
. The Journal was developed to address problems connected with traditional logging. It is closely integrated with the rest of the system, supports various logging technologies and access management for the log files.
Logging data is collected, stored, and processed by the Journal’s journald
service. It creates and maintains binary files called journals based on logging information that is received from the kernel, from user processes, from standard output, and standard error output of system services or via its native API. These journals are structured and indexed, which provides relatively fast seek times. Journal entries can carry a unique identifier. The journald
service collects numerous meta data fields for each log message. The actual journal files are secured, and therefore cannot be manually edited.
Melihat Berkas Log
To access the journal logs, use the journalctl tool. For a basic view of the logs type as root
:
journalctl
Keluaran dari perintah ini adalah daftar semua berkas log yang dihasilkan pada sistem termasuk pesan yang dihasilkan oleh komponen sistem dan oleh pengguna. Struktur keluaran ini mirip dengan yang digunakan dalam /var/log/messages/
tetapi dengan perbaikan tertentu:
-
prioritas entri ditandai secara visual. Baris-baris dengan prioritas kesalahan dan yang lebih tinggi disorot dengan warna merah dan fonta tebal digunakan untuk baris-baris dengan prioritas pemberitahuan dan peringatan
-
stempel waktu dikonversi untuk zona waktu lokal sistem Anda
-
semua data yang dicatat ditampilkan, termasuk log yang diputar
-
awal boot ditandai dengan baris khusus
Berikut ini adalah contoh keluaran yang disediakan oleh alat journalctl. Ketika dipanggil tanpa parameter, entri yang tercantum dimulai dengan stempel waktu, maka nama host dan aplikasi yang melakukan operasi disebutkan diikuti oleh pesan yang sebenarnya. Contoh ini menunjukkan tiga entri pertama dalam log jurnal:
# journalctl -- Logs begin at Thu 2013-08-01 15:42:12 CEST, end at Thu 2013-08-01 15:48:48 CEST. -- Aug 01 15:42:12 localhost systemd-journal[54]: Allowing runtime journal files to grow to 49.7M. Aug 01 15:42:12 localhost kernel: Initializing cgroup subsys cpuset Aug 01 15:42:12 localhost kernel: Initializing cgroup subsys cpu [...]
Dalam banyak kasus, hanya entri terbaru dalam log jurnal yang relevan. Cara paling sederhana untuk mengurangi keluaran journalctl adalah dengan menggunakan opsi -n
yang hanya mencantumkan jumlah entri log terbaru yang ditentukan:
journalctl -n
Number
Ganti Number dengan jumlah baris yang akan ditampilkan. Ketika tidak ada angka yang ditentukan, journalctl menampilkan sepuluh entri terbaru.
Perintah journalctl memungkinkan pengendalian bentuk keluaran dengan sintaks berikut:
journalctl -o
form
Ganti form dengan kata kunci yang menentukan bentuk keluaran yang diinginkan. Ada beberapa opsi, seperti verbose
, yang mengembalikan item entri terstruktur penuh dengan semua bidang, export
, yang menciptakan aliran biner yang cocok untuk pencadangan dan transfer jaringan, dan json
, yang memformat entri sebagai struktur data JSON. Untuk daftar lengkap kata kunci, lihat halaman manual journalctl(1)
.
Untuk melihat data meta lengkap tentang semua entri, ketik:
# journalctl -o verbose [...] Fri 2013-08-02 14:41:22 CEST [s=e1021ca1b81e4fc688fad6a3ea21d35b;i=55c;b=78c81449c920439da57da7bd5c56a770;m=27cc _BOOT_ID=78c81449c920439da57da7bd5c56a770 PRIORITY=5 SYSLOG_FACILITY=3 _TRANSPORT=syslog _MACHINE_ID=69d27b356a94476da859461d3a3bc6fd _HOSTNAME=localhost.localdomain _PID=562 _COMM=dbus-daemon _EXE=/usr/bin/dbus-daemon _CMDLINE=/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation _SYSTEMD_CGROUP=/system/dbus.service _SYSTEMD_UNIT=dbus.service SYSLOG_IDENTIFIER=dbus SYSLOG_PID=562 _UID=81 _GID=81 _SELINUX_CONTEXT=system_u:system_r:system_dbusd_t:s0-s0:c0.c1023 MESSAGE=[system] Successfully activated service 'net.reactivated.Fprint' _SOURCE_REALTIME_TIMESTAMP=1375447282839181 [...]
Contoh ini mencantumkan bidang yang mengidentifikasi entri log tunggal. Data meta ini dapat digunakan untuk penyaringan pesan seperti yang ditunjukkan pada Penyaringan Tingkat Lanjut. Untuk deskripsi lengkap tentang semua bidang yang mungkin lihat halaman manual systemd.journal-fields(7)
.
Kontrol Akses
Secara baku, pengguna Journal tanpa hak istimewa root
hanya dapat melihat berkas log yang dihasilkan oleh mereka. Administrator sistem dapat menambahkan pengguna yang dipilih ke grup adm, yang memberi mereka akses ke berkas log lengkap. Untuk melakukannya, ketik sebagai root
:
usermod-a
-G
adm username
Di sini, ganti username dengan nama pengguna yang akan ditambahkan ke grup adm. Pengguna ini kemudian menerima keluaran yang sama dari perintah journalctl sebagai pengguna root. Perhatikan bahwa kontrol akses hanya berfungsi saat penyimpanan persisten diaktifkan untuk Journal.
Using The Live View
When called without parameters, journalctl shows the full list of entries, starting with the oldest entry collected. With the live view, you can supervise the log messages in real time as new entries are continuously printed as they appear. To start journalctl in live view mode, type:
journalctl -f
Perintah ini mengembalikan daftar sepuluh baris log terbaru. Utilitas journalctl kemudian tetap berjalan dan menunggu perubahan baru untuk seketika menunjukkannya.
Memfilter Pesan
Keluaran dari perintah journalctl yang dijalankan tanpa parameter sering kali luas, oleh karena itu Anda dapat menggunakan berbagai metode penyaringan untuk mengekstrak informasi untuk memenuhi kebutuhan Anda.
Pesan log sering digunakan untuk melacak perilaku yang salah pada sistem. Untuk hanya melihat entri dengan prioritas yang dipilih atau lebih tinggi, gunakan sintaks berikut:
journalctl -p
priority
Di sini, ganti priority dengan salah satu kata kunci berikut (atau dengan angka): debug (7), info (6), notice (5), warning (4), err (3), crit (2), alert (1), dan emerg (0).
Untuk hanya melihat entri dengan error atau prioritas yang lebih tinggi, gunakan:
journalctl -p err
Untuk melihat entri log hanya dari boot saat ini, ketik:
journalctl -b
Jika Anda me-reboot sistem Anda sesekali, -b
tidak akan secara signifikan mengurangi keluaran journalctl. Dalam kasus seperti itu, pemfilteran berbasis waktu lebih membantu:
journalctl--since
=value--until
=value
Dengan --since
dan --until
, Anda hanya dapat melihat pesan log yang dibuat dalam rentang waktu yang ditentukan. Anda dapat meneruskan values ke opsi ini dalam bentuk tanggal atau waktu atau keduanya seperti yang ditunjukkan dalam contoh berikut.
Opsi pemfilteran dapat digabungkan untuk mengurangi kumpulan hasil sesuai dengan permintaan tertentu. Misalnya, untuk melihat warning atau pesan prioritas yang lebih tinggi dari titik waktu tertentu, ketik:
journalctl-p warning
--since="2013-3-16 23:59:59"
Verbose journalctl Output lists a set of fields that specify a log entry and can all be used for filtering. For a complete description of meta data that systemd
can store, see the systemd.journal-fields(7)
manual page. This meta data is collected for each log message, without user intervention. Values are usually text-based, but can take binary and large values; fields can have multiple values assigned though it is not very common.
Untuk melihat daftar nilai unik yang muncul di bidang tertentu, gunakan sintaks berikut:
journalctl -F
fieldname
Ganti fieldname dengan nama bidang yang Anda minati.
Untuk menampilkan hanya entri log yang sesuai dengan kondisi tertentu, gunakan sintaks berikut:
journalctl fieldname=value
Ganti fieldname dengan nama bidang dan value dengan nilai tertentu yang terdapat dalam bidang tersebut. Akibatnya, hanya baris-baris yang cocok dengan kondisi ini yang dikembalikan.
Tab Penyelesaian Nama Bidang
Karena jumlah bidang meta data yang disimpan oleh journalctl
dan tekan tombol Tab dua kali. Ini menunjukkan daftar nama bidang yang tersedia. Tab penyelesaian berdasarkan konteks bekerja pada nama bidang, sehingga Anda dapat mengetik satu set huruf khas dari nama bidang dan kemudian tekan Tab untuk menyelesaikan nama secara otomatis. Demikian pula, Anda dapat mencantumkan nilai unik dari bidang. Ketikkan: journalctl fieldname=
dan tekan Tab dua kali. Ini berfungsi sebagai alternatif untuk journalctl |
Anda dapat menentukan beberapa nilai untuk satu bidang:
journalctl fieldname=value1 fieldname=value2 ...
Menentukan dua kecocokan untuk bidang yang sama menghasilkan kombinasi OR
logis dari kecocokan. Entri yang cocok dengan value1 atau value2 ditampilkan.
Selain itu, Anda dapat menentukan beberapa pasangan nilai bidang untuk mengurangi kumpulan keluaran lebih lanjut:
journalctl fieldname1=value fieldname2=value ...
Jika dua kecocokan untuk nama bidang yang berbeda ditentukan, mereka akan digabungkan dengan AND
logis. Entri harus sesuai dengan kedua kondisi yang akan ditampilkan.
Dengan menggunakan simbol +, Anda dapat mengatur kombinasi kecocokan OR
logis untuk beberapa bidang:
journalctl fieldname1=value + fieldname2=value ...
Perintah ini mengembalikan entri yang cocok dengan setidaknya satu kondisi, tidak hanya yang cocok dengan keduanya.
Untuk menampilkan entri yang dibuat oleh avahi-daemon.service
atau crond.service
di bawah pengguna dengan UID 70, gunakan perintah berikut:
journalctl_UID=70
_SYSTEMD_UNIT=avahi-daemon.service
_SYSTEMD_UNIT=crond.service
Karena ada dua nilai yang ditetapkan untuk bidang _SYSTEMD_UNIT
, kedua hasil akan ditampilkan, tetapi hanya ketika cocok kondisi _UID=70
. Ini dapat dinyatakan hanya sebagai: (UID=70 and (avahi or cron)).
You can apply the aforementioned filtering also in the live-view mode to keep track of the latest changes in the selected group of log entries:
journalctl -f
fieldname=value ...
Mengaktifkan Penyimpanan Persisten
Secara baku, Journal menyimpan berkas log hanya di memori atau penyangga cincin kecil di direktori /run/log/journal/
. Ini cukup untuk menunjukkan riwayat log terbaru dengan journalctl. Direktori ini volatil, data log tidak disimpan secara permanen. Dengan konfigurasi baku, syslog membaca log jurnal dan menyimpannya di direktori /var/log/
. Dengan logging persisten diaktifkan, berkas jurnal disimpan dalam /var/log/journal
yang berarti mereka bertahan setelah reboot. Jurnal kemudian dapat menggantikan rsyslog untuk beberapa pengguna (tetapi lihat pengenalan bab).
Penyimpanan persisten yang diaktifkan memiliki keunggulan berikut
-
Data yang lebih kaya dicatat untuk pemecahan masalah dalam jangka waktu yang lebih lama
-
Untuk pemecahan masalah segera, data yang lebih kaya tersedia setelah reboot
-
Konsol server saat ini membaca data dari jurnal, bukan berkas log
Penyimpanan persisten juga memiliki kelemahan tertentu:
-
Bahkan dengan penyimpanan persisten, banyaknya data yang disimpan tergantung pada memori bebas, tidak ada jaminan untuk mencakup rentang waktu tertentu
-
Lebih banyak ruang disk diperlukan untuk log
Untuk mengaktifkan penyimpanan persisten bagi Jurnal, buat direktori jurnal secara manual seperti yang ditunjukkan dalam contoh berikut. Sebagai root
ketikkan:
mkdir-p
/var/log/journal
Kemudian, jalankan ulang journald
untuk menerapkan perubahan:
systemctlrestart
systemd-journald
Mengelola Berkas Log di Lingkungan Grafis
Sebagai alternatif untuk utilitas baris perintah yang disebutkan di atas, Red Hat Enterprise Linux 7 menyediakan GUI yang dapat diakses untuk mengelola pesan log.
Melihat Berkas Log
Sebagian besar berkas log disimpan dalam format teks biasa. Anda dapat melihatnya dengan editor teks apa pun seperti Vi atau Emacs. Beberapa berkas log dapat dibaca oleh semua pengguna di sistem; namun, hak root diperlukan untuk membaca sebagian besar berkas log. Untuk melihat berkas log sistem dalam aplikasi interaktif dan real-time, gunakan Log Sistem.
Memasang paket gnome-system-log
Untuk menggunakan System Log, pertama-tama pastikan paket gnome-system-log terpasang pada sistem Anda dengan menjalankan, sebagai ~]# dnf install gnome-system-log Untuk informasi selengkapnya tentang memasang paket dengan DNF, lihat Memasang Paket. |
Setelah Anda memasang paket gnome-system-log, buka Log Sistem dengan mengklik
, atau ketik perintah berikut pada prompt shell:~]$ gnome-system-log
Aplikasi hanya menampilkan berkas log yang ada; dengan demikian, daftar mungkin berbeda dari yang ditunjukkan di Log Sistem.
Aplikasi Log Sistem memungkinkan Anda memfilter berkas log yang ada. Klik tombol yang ditandai dengan simbol roda gigi untuk melihat menu, pilih menu:[Filter
> > Kelola Filter
] untuk menentukan atau mengedit filter yang diinginkan.
Menambahkan atau menyunting filter memungkinkan Anda menentukan parameternya seperti yang ditunjukkan di Log Sistem - mendefinisikan sebuah filter.
Saat menentukan filter, parameter berikut dapat disunting:
-
Nama
— Menentukan nama filter. -
Ekspresi Reguler
- Menentukan ekspresi reguler yang akan diterapkan ke berkas log dan akan mencoba mencocokkan string teks yang mungkin di dalamnya. -
'Efek'
-
Sorot
— Jika dicentang, hasil yang ditemukan akan disorot dengan warna yang dipilih. Anda dapat memilih apakah akan menyorot latar belakang atau latar depan teks. -
Sembunyikan
— Jika dicentang, hasil yang ditemukan akan disembunyikan dari berkas log yang Anda lihat.
-
Ketika Anda memiliki setidaknya satu filter yang ditentukan, itu dapat dipilih dari menu Filter
dan secara otomatis akan mencari string yang telah Anda tentukan di filter dan menyorot atau menyembunyikan setiap kecocokan yang berhasil dalam berkas log yang saat ini Anda lihat.
Saat Anda memilih opsi Tampilkan hanya kecocokan
, hanya string yang cocok yang akan ditampilkan dalam berkas log yang saat ini Anda lihat.
Menambahkan Berkas Log
Untuk menambahkan berkas log yang ingin Anda lihat dalam daftar, pilih Buka Log
di mana Anda dapat memilih direktori dan nama berkas dari berkas log yang ingin Anda lihat. Log Sistem - menambahkan berkas log menggambarkan jendela Buka Log.
Klik tombol Buka untuk membuka berkas. Berkas segera ditambahkan ke daftar tampilan di mana Anda dapat memilihnya dan melihat isinya.
Membaca berkas log yang di-zip
Log Sistem juga memungkinkan Anda untuk membuka berkas log yang di-zip dalam format |
Memantau Berkas Log
Log Sistem memantau semua log yang dibuka secara baku. Jika baris baru ditambahkan ke berkas log yang dipantau, nama log akan muncul dalam huruf tebal di daftar log. Jika berkas log dipilih atau ditampilkan, baris baru muncul dalam huruf tebal di bagian bawah berkas log. Log Sistem - peringatan log baru menggambarkan peringatan baru dalam berkas log cron
dan dalam berkas log messages
. Mengklik berkas log messages
menampilkan log dalam berkas dengan baris baru memakai huruf tebal.
Sumber Daya Tambahan
Untuk informasi selengkapnya tentang cara mengonfigurasi daemon rsyslog
dan cara menemukan, melihat, dan memantau berkas log, lihat sumber daya yang tercantum di bawah ini.
-
rsyslogd
(8) — Halaman manual untuk daemonrsyslogd
mendokumentasikan penggunaannya. -
rsyslog.conf
(5) — Halaman manual bernamarsyslog.conf
mendokumentasikan opsi konfigurasi yang tersedia. -
logrotate
(8) — Halaman manual untuk utilitas logrotate menjelaskan secara lebih rinci cara mengonfigurasi dan menggunakannya. -
journalctl
(1) — Halaman manual untuk daemon journalctl mendokumentasikan penggunaannya. -
journald.conf
(5) — Halaman manual ini mendokumentasikan opsi konfigurasi yang tersedia. -
systemd.journal-fields
(7) — Halaman manual ini mencantumkan bidang khusus Jurnal.
-
Beranda rsyslog — Halaman beranda rsyslog menawarkan perincian teknis menyeluruh dari fitur, dokumentasi, contoh konfigurasi, dan tutorial videonya.
-
Dokumentasi RainerScript di Beranda rsyslog — Ringkasan yang dikomentari tentang tipe, ekspresi, dan fungsi data yang tersedia di RainerScript.
-
Deskripsi antrean di Beranda rsyslog — Informasi umum tentang berbagai jenis antrean pesan dan penggunaannya.
Want to help? Learn how to contribute to Fedora Docs ›