GNU/Linux >> Belajar Linux >  >> Linux

Mengubah format tanggal di syslog

Selalu ada opsi baru untuk masalah tanggal, hanya menambahkan beberapa baris.
Solusi saya datang dengan menambahkan file ke /etc/rsyslog.d/ , misalnya myrsyslog.conf , lalu tambahkan format pilihan Anda, milik saya adalah:

$template myformat,"%TIMESTAMP:1:10:date-rfc3339% %TIMESTAMP:19:12:date-rfc3339% %syslogtag%%msg%\n"
$ActionFileDefaultTemplate myformat

ini akan menerapkan format baru ke log Anda sehingga mudah diurai.

sebelum

Sep  3 12:52:37 whs dhcpcd[477]: wlan0: expired address ...
Sep  3 12:52:37 whs dhcpcd[477]: wlan0: part of Router Advertisement expired
Sep  3 12:52:37 whs dhcpcd[477]: wlan0: deleting route to ...

setelah

2020-09-03 13:00:49 systemd[1]: rsyslog.service: Succeeded. 
2020-09-03 13:00:49 systemd[1]: Stopped System Logging Service. 
2020-09-03 13:00:49 systemd[1]: Starting System Logging Service...

Bahkan jika Anda menemukan solusi yang berbeda, saya memberikan jawaban untuk orang lain.

Edit file konfigurasi syslog Anda (Pada Debian misalnya:/etc/syslog-ng/syslog-ng.conf ).

Kemudian deklarasikan template baru seperti ini :

template template_date_format {
    template("${YEAR}-${MONTH}-${DAY} ${HOUR}:${MIN}:${SEC} ${HOST} ${MSGHDR}${MSG}\n");
    template_escape(no);
};

Ini adalah contoh tetapi Anda dapat menggunakan makro yang berbeda menurut dokumentasi syslog yang ditautkan dalam jawaban pengguna9645.

Setelah itu, temukan di file konfigurasi ini, semua file yang ingin Anda ubah format outputnya dan terapkan template ini ke file tersebut.

Misalnya, saya ingin mengubah /var/log/auth.log format keluaran, lalu saya ubah :

destination d_auth { file("/var/log/auth.log"); };

untuk :

destination d_auth { file("/var/log/auth.log" template(template_date_format)); };

Kemudian mulai ulang syslog (service syslog-ng restart ) dan coba login untuk melihat perubahan di auth.log Anda .


Saya mengalami masalah yang sama saat menggunakan FreeBSD 9.2 dan Zabbix monitor sistem GUI yang tidak dapat menangani hal-hal seperti 'Jan' atau 'Feb' pada stempel tanggal (!) pada pesan log sistem.

Apa yang saya lakukan adalah menginstal sysutils/syslog-ng port, dan gunakan convert-syslogconf.awk skrip untuk memigrasikan /etc/syslog.conf saya ke /usr/local/etc/syslog-ng.conf (yang untungnya tampaknya bekerja dengan baik bahkan dengan konfigurasi yang cukup rumit) dan menambahkan template pemformatan khusus ini ke semua file() tujuan:

template t_msgfmt {
    template("${ISODATE} ${HOST} ${FACILITY} ${LEVEL} ${MSGHDR}${MSG}\n");
    template_escape(no);
};

Anda dapat menemukan (banyak) info pemformatan lainnya di bagian manual syslog-ng 11.1 . Ini bekerja dengan baik untuk saya (sejauh ini) harap ini membantu Anda!


Linux
  1. Linux – Bagaimana Menemukan Tanggal Pembuatan File?

  2. Bagaimana Cara Mengatur Tanggal Dengan Format Epoch?

  3. Bagaimana Cara Membuat Script Bash Untuk Mengubah Format Tanggal Dalam File Csv?

  1. Cookie – Pembuat File Berbasis Template untuk Proyek

  2. Ubah tanggal pembuatan file

  3. a.out diganti dengan format file ELF?

  1. Memulai ulang cron setelah mengubah file crontab?

  2. Mengubah konten file melalui skrip shell

  3. Dapatkan Tanggal Modifikasi File Terakhir di Linux