ค้นหาเว็บไซต์

วิธีการตั้งค่าเซิร์ฟเวอร์การบันทึกส่วนกลางด้วย Rsyslog ใน Linux


บันทึกเป็นองค์ประกอบที่สำคัญของซอฟต์แวร์หรือระบบปฏิบัติการ โดยปกติแล้วบันทึกจะบันทึกการกระทำของผู้ใช้ กิจกรรมของระบบ กิจกรรมเครือข่าย และอื่นๆ อีกมากมาย ขึ้นอยู่กับวัตถุประสงค์ของบันทึก หนึ่งในระบบการบันทึกที่ใช้กันอย่างแพร่หลายที่สุดบนระบบ Linux คือ rsyslog

Rsyslog เป็นระบบประมวลผลบันทึกที่มีประสิทธิภาพ ปลอดภัย และมีประสิทธิภาพสูง ซึ่งรับข้อมูลจากแหล่งที่มาประเภทต่างๆ (ระบบ/แอปพลิเคชัน) และส่งออกข้อมูลออกเป็นหลายรูปแบบ

ได้พัฒนาจาก syslog daemon ปกติไปเป็นระบบการบันทึกระดับองค์กรที่มีคุณลักษณะครบถ้วน ได้รับการออกแบบในโมเดลไคลเอ็นต์/เซิร์ฟเวอร์ จึงสามารถกำหนดค่าเป็นไคลเอ็นต์และ/หรือเซิร์ฟเวอร์บันทึกส่วนกลางสำหรับเซิร์ฟเวอร์ อุปกรณ์เครือข่าย และแอปพลิเคชันระยะไกลอื่นๆ ได้

สภาพแวดล้อมการทดสอบ

เพื่อวัตถุประสงค์ของคู่มือนี้ เราจะใช้โฮสต์ต่อไปนี้:

  • เซิร์ฟเวอร์: 192.168.241.140
  • ลูกค้า: 172.31.21.58

วิธีการติดตั้งและกำหนดค่าเซิร์ฟเวอร์ Rsyslog

Linux ส่วนใหญ่จะมาพร้อมกับแพ็คเกจ rsyslog ที่ติดตั้งไว้ล่วงหน้า ในกรณีที่ไม่ได้ติดตั้ง คุณสามารถติดตั้งโดยใช้เครื่องมือจัดการแพ็คเกจ Linux ดังที่แสดง

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04

เมื่อติดตั้ง rsyslog แล้ว คุณต้องเริ่มบริการในตอนนี้ เปิดใช้งานเพื่อเริ่มอัตโนมัติเมื่อบู๊ตเครื่อง และตรวจสอบสถานะด้วยคำสั่ง systemctl

sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

ไฟล์การกำหนดค่า rsyslog หลักอยู่ที่ /etc/rsyslog.conf ซึ่งโหลดโมดูล กำหนดคำสั่งส่วนกลาง มีกฎสำหรับการประมวลผลข้อความบันทึก และยังรวมไฟล์การกำหนดค่าทั้งหมดใน /etc /rsyslog.d/ สำหรับแอปพลิเคชัน/บริการต่างๆ

sudo vim /etc/rsyslog.conf

ตามค่าเริ่มต้น rsyslog จะใช้โมดูล imjournal และ imusock สำหรับการนำเข้าข้อความบันทึกที่มีโครงสร้างจาก systemd Journal และสำหรับการยอมรับ syslog ข้อความจากแอปพลิเคชันที่ทำงานบนระบบโลคัลผ่านซ็อกเก็ต Unix ตามลำดับ

ในการกำหนดค่า rsyslog เป็นเซิร์ฟเวอร์การบันทึกเครือข่าย/ส่วนกลาง คุณต้องตั้งค่าโปรโตคอล (UDP หรือ TCP หรือทั้งสองอย่าง) ที่จะใช้สำหรับการรับ syslog ระยะไกลตลอดจน พอร์ตที่มันฟังอยู่

หากคุณต้องการใช้การเชื่อมต่อ UDP ซึ่งเร็วกว่าแต่ไม่น่าเชื่อถือ ให้ค้นหาและยกเลิกการใส่เครื่องหมายข้อคิดเห็นในบรรทัดด้านล่าง (แทนที่ 514 ด้วยพอร์ตที่คุณต้องการให้ฟัง สิ่งนี้ควร ตรงกับที่อยู่พอร์ตที่ไคลเอ็นต์ส่งข้อความไป เราจะดูข้อมูลเพิ่มเติมเมื่อกำหนดค่าไคลเอ็นต์ rsyslog)

$ModLoad imudp
$UDPServerRun 514

หากต้องการใช้การเชื่อมต่อ TCP (ซึ่งช้ากว่าแต่เชื่อถือได้มากกว่า) ให้ค้นหาและไม่ใส่เครื่องหมายข้อคิดเห็นในบรรทัดด้านล่าง

$ModLoad imtcp
$InputTCPServerRun 514

ในกรณีนี้ เราต้องการใช้ทั้งการเชื่อมต่อ UDP และ TCP ในเวลาเดียวกัน

ถัดไป คุณต้องกำหนด ชุดกฎ สำหรับการประมวลผลบันทึกระยะไกลในรูปแบบต่อไปนี้

facility.severity_level	destination (where to store log)

ที่ไหน :

  • สิ่งอำนวยความสะดวก: เป็นประเภทของข้อความที่สร้างกระบวนการ/แอปพลิเคชัน ซึ่งได้แก่ auth, cron, daemon, kernel, local0..local7 การใช้ * หมายถึงสิ่งอำนวยความสะดวกทั้งหมด
  • ระดับความรุนแรง: เป็นประเภทของข้อความบันทึก: emerg-0, alert-1, crit-2, err-3, warn-4, Notice-5, info-6, debug-7 การใช้ * หมายถึงระดับความรุนแรงทั้งหมด และไม่มีนัยถึงระดับความรุนแรงใดๆ
  • ปลายทาง: เป็นไฟล์ในเครื่องหรือเซิร์ฟเวอร์ rsyslog ระยะไกล (กำหนดในรูปแบบ IP: พอร์ต)

เราจะใช้ ชุดกฎ ต่อไปนี้ในการรวบรวมบันทึกจากโฮสต์ระยะไกล โดยใช้เทมเพลต RemoteLogs โปรดทราบว่ากฎเหล่านี้ต้องมาก่อนกฎใดๆ สำหรับการประมวลผลข้อความในเครื่อง ดังที่แสดงในภาพหน้าจอ

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs 
& ~

เมื่อพิจารณา ชุดกฎ ข้างต้น กฎข้อแรกคือ “$template RemoteLogs,”/var/log/%HOSTNAME%/%PROGRAMNAME%.log” ”

คำสั่ง $template บอกให้ rsyslog daemon รวบรวมและเขียนข้อความระยะไกลที่ได้รับทั้งหมดไปยังบันทึกที่แตกต่างกันภายใต้ /var/log โดยยึดตาม ชื่อโฮสต์ (ชื่อเครื่องไคลเอนต์) และสิ่งอำนวยความสะดวกไคลเอนต์ระยะไกล (โปรแกรม/แอปพลิเคชัน) ที่สร้างข้อความตามที่กำหนดโดยการตั้งค่าที่มีอยู่ในเทมเพลต RemoteLogs

บรรทัดที่สอง “*.* ?RemoteLogs ” หมายถึงบันทึกข้อความจากเครื่องมืออำนวยความสะดวกทั้งหมดในทุกระดับความรุนแรงโดยใช้การกำหนดค่าเทมเพลต RemoteLogs

บรรทัดสุดท้าย “& ~ ” สั่งให้ rsyslog หยุดการประมวลผลข้อความเมื่อเขียนลงไฟล์แล้ว หากคุณไม่ใส่ “& ~” ข้อความจะถูกเขียนลงในไฟล์ในเครื่องแทน

มีเทมเพลตอื่นๆ อีกมากมายที่คุณสามารถใช้ได้ สำหรับข้อมูลเพิ่มเติม โปรดดูที่หน้าคู่มือการกำหนดค่า rsyslog (man rsyslog.conf) หรืออ้างอิงถึงเอกสารประกอบออนไลน์ของ Rsyslog

เพียงเท่านี้ด้วยการกำหนดค่าเซิร์ฟเวอร์ rsyslog บันทึกและปิดไฟล์การกำหนดค่า หากต้องการใช้การเปลี่ยนแปลงล่าสุด ให้รีสตาร์ท rsyslog daemon ด้วยคำสั่งต่อไปนี้

sudo systemctl restart rsyslog

ตอนนี้ตรวจสอบซ็อกเก็ตเครือข่าย rsyslog ใช้คำสั่ง ss (หรือ netstat ที่มีแฟล็กเดียวกัน) และไปป์เอาต์พุตไปที่ grep เพื่อกรองการเชื่อมต่อ rsyslogd ออก

sudo ss -tulnp | grep "rsyslog"

ถัดไป บน CentOS 7 หากคุณเปิดใช้งาน SELinux ให้รันคำสั่งต่อไปนี้เพื่ออนุญาตการรับส่งข้อมูล rsyslog ตามประเภทซ็อกเก็ตเครือข่าย

sudo semanage -a -t syslogd_port_t -p udp 514
sudo semanage -a -t syslogd_port_t -p tcp 514 

หากระบบเปิดใช้งานไฟร์วอลล์ คุณจะต้องเปิดพอร์ต 514 เพื่ออนุญาตการเชื่อมต่อ UDP/TCP ไปยังเซิร์ฟเวอร์ rsyslog โดยการเรียกใช้

------------- On CentOS ------------- 
sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --permanent --add-port=514/tcp
sudo firewall-cmd --reload

------------- On Ubuntu -------------
sudo ufw allow 514/udp
sudo ufw allow 514/tcp
sudo ufw reload 

วิธีกำหนดค่าไคลเอนต์ Rsyslog เพื่อส่งบันทึกไปยังเซิร์ฟเวอร์ Rsyslog

ขณะนี้บนระบบไคลเอ็นต์ ให้ตรวจสอบว่าบริการ rsyslog กำลังทำงานอยู่หรือไม่โดยใช้คำสั่งต่อไปนี้

sudo systemctl status rsyslog

หากไม่ได้ติดตั้ง ให้ติดตั้งและเริ่มบริการตามที่แสดงไว้ก่อนหน้า

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04
sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

เมื่อบริการ rsyslog เปิดใช้งานแล้ว ให้เปิดไฟล์การกำหนดค่าหลักที่คุณจะทำการเปลี่ยนแปลงการกำหนดค่าเริ่มต้น

sudo vim /etc/rsyslog.conf

หากต้องการบังคับให้ rsyslog daemon ทำหน้าที่เป็นไคลเอ็นต์บันทึกและส่งต่อข้อความบันทึกที่สร้างขึ้นในเครื่องทั้งหมดไปยังเซิร์ฟเวอร์ rsyslog ระยะไกล ให้เพิ่มกฎการส่งต่อนี้ที่ส่วนท้ายของไฟล์ดังที่แสดงในภาพหน้าจอต่อไปนี้

*. *  @@192.168.100.10:514

กฎข้างต้นจะส่งข้อความจากสิ่งอำนวยความสะดวกทั้งหมดและทุกระดับความรุนแรง หากต้องการส่งข้อความจากสถานที่เฉพาะ เช่น การตรวจสอบสิทธิ์ ให้ใช้กฎต่อไปนี้

auth. *  @@192.168.100.10:514

บันทึกการเปลี่ยนแปลงและปิดไฟล์การกำหนดค่า หากต้องการใช้การตั้งค่าข้างต้น ให้รีสตาร์ท rsyslog daemon

sudo systemctl restart rsyslog

วิธีการตรวจสอบการบันทึกระยะไกลบนเซิร์ฟเวอร์ Rsyslog

ขั้นตอนสุดท้ายคือการตรวจสอบว่า rsyslog ได้รับและบันทึกข้อความจากไคลเอ็นต์จริงหรือไม่ ภายใต้ /var/log ในรูปแบบ hostname/programname.log

เรียกใช้คำสั่ง ls เพื่อแสดงรายการไดเร็กทอรีบันทึกหลักแบบยาว และตรวจสอบว่ามีไดเร็กทอรีชื่อ ip-172.31.21.58 (หรือชื่อโฮสต์ของเครื่องไคลเอ็นต์ของคุณ)

 
ls -l /var/log/

หากมีไดเร็กทอรีอยู่ ให้ตรวจสอบไฟล์บันทึกภายในไดเร็กทอรีโดยการรัน

sudo ls -l /var/log/ip-172-31-21-58/

สรุป

Rsyslog เป็นระบบประมวลผลบันทึกประสิทธิภาพสูง ออกแบบในสถาปัตยกรรมไคลเอ็นต์/เซิร์ฟเวอร์ เราหวังว่าคุณจะสามารถติดตั้งและกำหนดค่า Rsyslog เป็นเซิร์ฟเวอร์บันทึกส่วนกลาง/เครือข่ายและเป็นไคลเอ็นต์ตามที่แสดงในคู่มือนี้

คุณอาจต้องการดูหน้าคู่มือ rsyslog ที่เกี่ยวข้องเพื่อขอความช่วยเหลือเพิ่มเติม อย่าลังเลที่จะให้ข้อเสนอแนะหรือถามคำถามกับเรา