คำตอบสำหรับคำถามแรกของคุณคือ:
ใช่การเรียกไปยัง syslog () กำลังบล็อค อาจเป็นเวลาสั้น ๆ แต่ก็ยังคงมีการโทรแบบซิงโครนัสที่เกี่ยวข้องกับตัวให้คำอธิบายไฟล์ ดูman 3 syslog
detials เพิ่มเติม
เว้นแต่เซิร์ฟเวอร์ของคุณใช้สถาปัตยกรรมและแบบอะซิงโครนัสจะมีการล็อคอยู่เสมอ Thsi สามารถบรรเทาได้ แต่ไม่ตัดออกตัวอย่างเช่นโดยใช้ separatethread สำหรับการบันทึก สำหรับคำถามอีกสองข้อที่ฉันไม่รู้จริงๆ แต่การตรวจสอบซอร์สโค้ด rsyslogd (เช่นเดียวกับคำถามสำหรับตระกูล syslog () ของฟังก์ชัน) เป็นวิธีเดียวที่จะรู้
โดยทั่วไปหากคุณย้ายการบันทึกไปยังเซิร์ฟเวอร์ภายนอกผ่านทาง UDP: 514 "โปรโตคอลเครือข่าย syslog" คุณจะนำความเป็นไปได้ในการสร้างการล็อคไปเกือบเป็นศูนย์ ด้วยข้อเสียเปรียบของการสูญเสียที่เป็นไปได้ของการบันทึกบางอย่างในระหว่างการโหลดสูง
ก่อนอื่นในเซิร์ฟเวอร์ "ที่มา" คุณต้องแน่ใจว่าการบันทึกทั้งหมดเกิดขึ้นผ่าน syslog ตัวอย่างเช่นใน Apache2 คุณต้องระบุ:
ErrorLog "syslog:daemon"
สำหรับเซิร์ฟเวอร์อื่น ๆ โปรดดูที่หน้าคนที่เหมาะสม หากคุณไม่สามารถมั่นใจได้โปรดจำไว้ว่าการเข้าสู่ระบบไฟล์สามารถสร้างได้
ประการที่สองในการกำหนดค่า rsyslogd ดั้งเดิมคุณขอให้นำการรับส่งข้อมูล syslog ทั้งหมดสำหรับสิ่งอำนวยความสะดวกที่คุณเลือก ("daemon" ในตัวอย่างนี้) ไปยังเซิร์ฟเวอร์ syslog ภายนอกหนึ่งเซิร์ฟเวอร์ขึ้นไป ในไฟล์กำหนดค่า rsyslog คุณสามารถระบุ:
daemon.* @192.168.128.1
daemon.* @192.168.254.1
เพื่อให้มีสองชุดของบันทึกที่จะส่งไปยังเซิร์ฟเวอร์ที่แตกต่างกันสองเครื่องในเวลาเดียวกัน
ประการที่สามในเซิร์ฟเวอร์ปลายทางคุณเปิดใช้งานการรับข้อความ syslog ผ่าน UDP: 514 มันอยู่ในไฟล์กำหนดค่า (ปลายทาง) rsyslogd และปกติจะถูกปิดใช้งานโดย defualt (มันเพียงพอที่จะลบ #s นำหน้า:
$ModLoad imudp
$UDPServerRun 514
ประการที่สี่เป็นทางเลือก แต่แนะนำเป็นอย่างยิ่งฉันจะเปิดใช้งานการประทับเวลาความละเอียดสูงด้วย:
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
ตัวเลือกนี้จะถูกปิดใช้งานตามค่าเริ่มต้น (ทำไมบนโลก)