การตั้งค่า rsyslog บน ubuntu 16.04 server

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 26-08-2559
ดูแลโดย WIBOON

การเก็บ log ภายในเครื่อง มีไฟล์ต่าง ๆ ที่เกี่ยวข้องดังนี้
ไฟล์ที่ใช้กำหนดค่าการทำงาน เปิด port ใช้ไฟล์นี้ /etc/rsyslog.conf
ไฟล์ที่ใช้กำหนดค่าส่ง log จากโปรแกรมต่าง ๆ ไปเก็บในไฟล์ที่ใดบ้างนั้น ใช้ไฟล์นี้ /etc/rsyslog.d/50-default.conf
และยังใช้ไฟล์ที่สร้างขั้นใหม่ในไดเรกทอรีนี้ /etc/rsyslog.d/

การส่ง log ไปยัง remote syslog server
ต้องทำที่ server ทั้ง 2 เครื่อง คือ
1. ตั้งค่า rsyslog ให้ส่ง log ไปยัง remote syslog server
แบบที่ 1 ตั้งค่าให้ส่งทุกอย่างไป ตัวอย่าง IP 10.0.100.3 ทำดังนี้
สร้างไฟล์เพิ่ม 1 ไฟล์ ชื่อ 99-remote.conf ภายในใส่ข้อความดังนี้

*.*    @10.0.100.3

แบบที่ 2 ตั้งค่าให้ส่งเฉพาะที่ตามเงื่อนไข (regex) ไป ตัวอย่าง IP 10.0.100.3 ทำดังนี้
สร้างไฟล์เพิ่ม 1 ไฟล์ ชื่อ 99-remote.conf ภายในใส่ข้อความดังนี้

:msg, regex, "fail2ban.actions.* Ban .*" @10.0.100.3

และมีอีกหลาย ๆ แบบ ตาม references ข้างล่าง

2. ตั้งค่าที่ remote syslog server ให้รับ log ที่ส่งมาด้วย UDP port 514
ขั้นตอน
2.1 ตั้งค่าการเปิด Port ที่ไฟล์ rsyslog.conf ที่ประมาณบรรทัดที่ 18
mama@ubuntu:~$ sudo vi /etc/rsyslog.conf
เดิม

#module(load="imudp")
#input(type="imudp" port="514")

แก้ไขเป็น

module(load="imudp")
input(type="imudp" port="514")

2.2 สร้างไฟล์เพิ่ม 1 ไฟล์ ชื่อ 99-fromremoteserver.conf
แบบที่ 1 เพื่อให้รับ log แล้วแยกเก็บตั้งชื่อไฟล์ให้มี IP และมีชื่อเปลี่ยนไปตามวันที่รับ log

mama@ubuntu:~$ sudo vi /etc/rsyslog.d/99-fromremoteserver.conf
$template Remote,"/var/log/rsyslog/remote-%fromhost-ip%/%$YEAR%-%$MONTH%-%$DAY%.log"
:fromhost-ip, isequal, "10.0.100.23" ?Remote

หรือ
แบบที่ 2 เอาอย่างง่าย ลงไฟล์ชื่อเดียวกันตลอด เช่น จะไว้ในชื่อ fromremoteserver.log

mama@ubuntu:~$ sudo vi /etc/rsyslog.d/99-fromremoteserver.conf
:fromhost-ip, isequal, "10.0.100.23" /var/log/rsyslog/fromremoteserver.log


การรีสตาร์ทและตรวจสอบ rsyslog

mama@ubuntu:~$ sudo systemctl restart rsyslog
mama@ubuntu:~$ sudo systemctl status rsyslog
rsyslog.service - System Logging Service
   Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset:
   Active: active (running) since Fri 2016-08-26 14:53:45 ICT; 5s ago
Aug 26 14:53:45 ubuntu systemd[1]: Stopped System Logging Service.
Aug 26 14:53:45 ubuntu systemd[1]: Starting System Logging Service...
Aug 26 14:53:45 ubuntu systemd[1]: Started System Logging Service.


หากไม่ต้องการให้ log file โตขึ้นเรื่อย ๆ ให้ใช้ logrotate
โดยนำรายชื่อ log file (/var/log/rsyslog/fromremoteserver.log) ไปใส่เพิ่มในไฟล์ /etc/logrotate.d/rsyslog

...

/var/log/mail.err
/var/log/mail.log
/var/log/rsyslog/fromremoteserver.log
{
  ...
}
...


หรือในกรณีที่ log file มีชื่อไฟล์เปลี่ยนไปตามวันที่ เช่น /var/log/rsyslog/remote-10.0.100.3/2016-08-26.log อย่างนี้ก็ไม่ต้องทำ logrotate เพราะแยกเป็นวันอยู่แล้ว
แต่ถ้าเป็นแบบนี้ /var/log/rsyslog/remote-10.0.100.3/server1.log มันก็จะโตขึ้นเรื่อย ๆ
ให้นำรายชื่อ log file (เขียนแบบนี้ /var/log/rsyslog/remote-*/*.log) ไปใส่เพิ่มใน /etc/logrotate.d/rsyslog

...

/var/log/mail.err
/var/log/mail.log
/var/log/rsyslog/remote-*/*.log
{
  ...
}
...


References: System: Controlling what logs where with rsyslog.conf
http://www.the-art-of-web.com/system/rsyslog-config/
rsyslog configure sample
https://gist.github.com/kenshinx/054aaf9df0ad60727ae7
rsyslog 8.18.0 documentation » Configuration
http://www.rsyslog.com/doc/v8-stable/configuration/filters.html
rsyslog with remote log and rotation by date
http://enricorossi.org/blog/2014/rsyslog_with_remote_log_and_rotation_by_date/