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

ตั้งค่าเซิร์ฟเวอร์บันทึกส่วนกลางด้วย Rsyslog ใน CentOS/RHEL 8


เพื่อให้ผู้ดูแลระบบรับรู้หรือวิเคราะห์ปัญหาบนเซิร์ฟเวอร์ CentOS 8 หรือ RHEL 8 สิ่งสำคัญคือต้องทราบและดูเหตุการณ์ที่เกิดขึ้นบนเซิร์ฟเวอร์ใน ช่วงเวลาหนึ่งจากไฟล์บันทึกที่พบใน /var/log ไดเร็กทอรีในระบบ

ระบบ Syslog (System Logging Protocol) บนเซิร์ฟเวอร์สามารถทำหน้าที่เป็นจุดตรวจสอบบันทึกส่วนกลางผ่านเครือข่ายที่เซิร์ฟเวอร์ อุปกรณ์เครือข่าย สวิตช์ เราเตอร์ และบริการภายในทั้งหมด สร้างบันทึก ไม่ว่าจะเชื่อมโยงกับปัญหาภายในโดยเฉพาะหรือเพียงข้อความที่ให้ข้อมูลก็สามารถส่งบันทึกได้

บนเซิร์ฟเวอร์ CentOS/RHEL 8 Rsyslog daemon เป็นเซิร์ฟเวอร์บันทึกที่สำคัญที่สุดที่ติดตั้งไว้ล่วงหน้าตามค่าเริ่มต้น ตามด้วย Systemd Journal Daemon (วารสาร)

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

ความต้องการ

  1. การติดตั้ง “CentOS 8.0″ พร้อมภาพหน้าจอ
  2. การติดตั้ง RHEL 8 พร้อมภาพหน้าจอ

ในการตั้งค่าเซิร์ฟเวอร์บันทึกแบบรวมศูนย์บนเซิร์ฟเวอร์ CentOS/RHEL 8 คุณต้องตรวจสอบการยืนยันว่าพาร์ติชัน /var มีพื้นที่เพียงพอ (ขั้นต่ำสองสาม GB ) เพื่อจัดเก็บไฟล์บันทึกที่บันทึกไว้ทั้งหมดบนระบบที่ส่งโดยอุปกรณ์อื่นบนเครือข่าย ฉันแนะนำให้คุณมีไดรฟ์แยกต่างหาก (LVM หรือ RAID) เพื่อเมานต์ไดเร็กทอรี /var/log/

วิธีกำหนดค่าเซิร์ฟเวอร์ Rsyslog ใน CentOS/RHEL 8

1. อย่างที่ฉันบอกไป บริการ Rsyslog ได้รับการติดตั้งและทำงานโดยอัตโนมัติในเซิร์ฟเวอร์ CentOS/RHEL 8 เพื่อตรวจสอบว่า daemon กำลังทำงานอยู่ในระบบ ให้รันคำสั่งต่อไปนี้

systemctl status rsyslog.service

หากบริการไม่ได้ทำงานตามค่าเริ่มต้น ให้รันคำสั่งต่อไปนี้เพื่อเริ่ม rsyslog daemon

systemctl start rsyslog.service

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


dnf install rsyslog
systemctl start rsyslog.service

3. เมื่อติดตั้งยูทิลิตี้ Rsyslog แล้ว ตอนนี้คุณสามารถกำหนดค่า rsyslog เป็นเซิร์ฟเวอร์การบันทึกแบบรวมศูนย์ได้โดยการเปิดไฟล์การกำหนดค่าหลัก /etc/rsyslog.conf เพื่อรับข้อความบันทึกสำหรับไคลเอนต์ภายนอก

vi /etc/rsyslog.conf

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

module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

4. โปรโตคอล UDP ไม่มีค่าใช้จ่าย TCP และทำให้การรับส่งข้อมูลเร็วกว่าโปรโตคอล TCP ในทางกลับกัน โปรโตคอล UDP ไม่รับประกันความน่าเชื่อถือของข้อมูลที่ส่ง

อย่างไรก็ตาม หากคุณต้องการใช้โปรโตคอล TCP สำหรับการรับบันทึก คุณต้องค้นหาและไม่ใส่เครื่องหมายข้อคิดเห็นบรรทัดต่อไปนี้ในไฟล์การกำหนดค่า /etc/rsyslog.conf เพื่อกำหนดค่า Rsyslog daemon เพื่อผูกและฟังซ็อกเก็ต TCP บนพอร์ต 514

module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")

5. ตอนนี้ให้สร้างเทมเพลตใหม่สำหรับการรับข้อความระยะไกล เนื่องจากเทมเพลตนี้จะแนะนำเซิร์ฟเวอร์ Rsyslog ในเครื่องที่จะบันทึกข้อความที่ได้รับที่ส่งโดยไคลเอ็นต์เครือข่าย Syslog


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

คำสั่ง $template RemoteLogs จะแนะนำ Rsyslog daemon ในการรวบรวมและเขียนข้อความบันทึกที่ส่งทั้งหมดไปยังไฟล์ที่แตกต่างกัน โดยยึดตามชื่อไคลเอ็นต์และแอปพลิเคชันไคลเอ็นต์ระยะไกลที่สร้างข้อความตามคุณสมบัติโครงร่างที่เพิ่มใน การกำหนดค่าเทมเพลต: %HOSTNAME% และ %PROGRAMNAME%

ไฟล์บันทึกที่ได้รับทั้งหมดจะถูกเขียนลงในระบบไฟล์ในเครื่องไปยังไฟล์ที่จัดสรรซึ่งตั้งชื่อตามชื่อโฮสต์ของเครื่องไคลเอ็นต์ และเก็บไว้ในไดเร็กทอรี /var/log/

กฎการเปลี่ยนเส้นทาง & ~ กำหนดให้เซิร์ฟเวอร์ Rsyslog ภายในเครื่องหยุดการประมวลผลข้อความบันทึกที่ได้รับเพิ่มเติม และลบข้อความ (ไม่ใช่เขียนลงในไฟล์บันทึกภายใน)

RemoteLogs เป็นชื่อที่กำหนดเองที่กำหนดให้กับคำสั่งเทมเพลตนี้ คุณสามารถใช้ชื่อใดก็ได้ที่คุณต้องการให้เหมาะสมกับเทมเพลตของคุณมากที่สุด

หากต้องการกำหนดค่าเทมเพลต Rsyslog ที่ซับซ้อนมากขึ้น โปรดอ่านคู่มือไฟล์การกำหนดค่า Rsyslog โดยเรียกใช้คำสั่ง man rsyslog.conf หรือศึกษาเอกสารประกอบออนไลน์ของ Rsyslog

man rsyslog.conf

6. หลังจากทำการเปลี่ยนแปลงการกำหนดค่าข้างต้น คุณสามารถรีสตาร์ท Rsyslog daemon เพื่อใช้การเปลี่ยนแปลงล่าสุดได้โดยการรันคำสั่งต่อไปนี้

service rsyslog restart

7. เมื่อคุณรีสตาร์ทเซิร์ฟเวอร์ Rsyslog ตอนนี้เซิร์ฟเวอร์ควรทำหน้าที่เป็นเซิร์ฟเวอร์บันทึกส่วนกลางและบันทึกข้อความจากไคลเอ็นต์ Syslog เพื่อยืนยันซ็อกเก็ตเครือข่าย Rsyslog ให้รันคำสั่ง netstat และใช้ยูทิลิตี้ grep เพื่อกรองสตริง rsyslog

netstat -tulpn | grep rsyslog 

หากไม่ได้ติดตั้ง คำสั่ง netstat บน CentOS 8 คุณสามารถติดตั้งได้โดยใช้คำสั่งต่อไปนี้


dnf whatprovides netstat
dnf install net-tools

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

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

หากไม่ได้ติดตั้ง คำสั่ง semanage บน CentOS 8 คุณสามารถติดตั้งได้โดยใช้คำสั่งต่อไปนี้


dnf whatprovides semanage
dnf install policycoreutils-python-utils

9. หากคุณมีไฟร์วอลล์ที่ทำงานอยู่บนระบบ ให้รันคำสั่งต่อไปนี้เพื่อเพิ่มกฎที่จำเป็นสำหรับการอนุญาตการรับส่งข้อมูล rsyslog บนพอร์ตใน Firewalld


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

คุณยังสามารถจำกัดการเชื่อมต่อขาเข้าบนพอร์ต 514 จากช่วง IP ที่อนุญาตพิเศษดังที่แสดง


firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="123.123.123.0/21" port port="514" protocol="tcp" accept'
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="123.123.123.0/21" port port="514" protocol="udp" accept'
firewall-cmd --reload

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