สำหรับฉันแล้วการมีปัญหากับการใช้งานโมดูล imuxsock ใน rsyslog ทำงานกับ systemd
ในเอกสารประกอบ imuxsockพวกเขาดำเนินการตามวิธีที่โมดูลควรทำงานกับ systemd ขั้นตอนที่ 1 คือที่ที่ฉันเห็นปัญหา:
ขั้นตอนที่ 1: เลือกชื่อของซ็อกเก็ตระบบ
หากผู้ใช้ไม่ได้เลือกอย่างชัดเจนเพื่อตั้ง SysSock.Use = "ปิด" ดังนั้นซ็อกเก็ตผู้ฟังเริ่มต้น (aka“ ซ็อกเก็ตบันทึกระบบ” หรือชื่อ“ ซ็อกเก็ตระบบ”) จะถูกตั้งค่าเป็น / dev / log มิฉะนั้นหากผู้ใช้ตั้งค่า SysSock.Use = "ปิด" ไว้อย่างชัดเจนแล้ว rsyslog จะไม่ฟัง / dev / log หรือซ็อกเก็ตใด ๆ ที่กำหนดโดยพารามิเตอร์ SysSock.Name และส่วนที่เหลือของส่วนนี้ไม่ได้ใช้
หากผู้ใช้ระบุ sysSock.Name = "/ path / to / custom / socket" (และไม่ได้ตั้งค่า SysSock.Use = "off" อย่างชัดเจน) ชื่อซ็อกเก็ตผู้ฟังเริ่มต้นจะถูกเขียนทับด้วย / path / to / custom / socket .
มิฉะนั้นถ้า rsyslog ทำงานภายใต้ systemd AND / run / systemd / journal / syslog อยู่ (และผู้ใช้ยังไม่ได้ตั้งค่า SysSock.Use = "ปิด" อย่างชัดเจน) ชื่อซ็อกเก็ตผู้ฟังเริ่มต้นจะถูกเขียนทับด้วย / run / systemd / journal / syslog
ระบบควรเข้าสู่ขั้นตอนที่ 3 และเปลี่ยนเส้นทางเริ่มต้นเป็น "/ run / systemd / journal / syslog" แต่แทนที่จะเป็น "/ var / log" แทน นี่หมายความว่าโมดูล imuxsock จะพยายาม (และประสบความสำเร็จในบางครั้ง) เพื่อสร้างซ็อกเก็ตที่ / dev / log ซึ่งควรจะมีลิงค์สัญลักษณ์ที่สร้างขึ้นแทน systemd-journald-dev-log.socket ในกรณีที่มันไม่สามารถสร้างซ็อกเก็ตจริงลิงก์สัญลักษณ์จะยังคงถูกลบออก
เอกสารนั้นเป็นผลลัพธ์ของปัญหานี้ที่รายงานใน rsyslog github หากคุณต้องการข้ามการอภิปรายและข้ามไปที่การเปลี่ยนแปลงโปรดดูPR # 1และPR # 2ตามลำดับ
โซลูชันของฉันคือเพียงกำหนดค่าโมดูล imuxsock เพื่อใช้เส้นทาง systemd ใน /etc/rsyslog.conf ของฉัน:
module(load="imuxsock"
SysSock.Name="/run/systemd/journal/syslog")
ดูเหมือนว่าจะแก้ไขปัญหาของฉันแล้วและดูเหมือนเป็นโซลูชันที่ดีที่นี่เนื่องจากจะอธิบายว่าทำไมลิงก์สัญลักษณ์อาจหายไปอีกครั้งหลังจากที่คุณสร้างด้วยตนเอง
หากคุณดูระบบของคุณและ "/ run / systemd / journal / syslog" จะไม่ปรากฏที่ "syslog.socket" เพื่อดูว่ามันเริ่มต้นได้สำเร็จหรือไม่ซึ่งเป็นสิ่งที่รับผิดชอบในการสร้างซ็อกเก็ต
systemctl status syslog.socket
อาจเป็นได้ว่า rsyslog.service เวอร์ชันของคุณไม่ได้กำหนด syslog.service เป็นนามแฝงที่จำเป็นเนื่องจาก syslog.socket พยายามใช้บริการดังกล่าว นอกจากนี้ยังเป็นไปได้ที่บริการการบันทึกหลายรายการพยายามที่จะใช้นามแฝง syslog.service ซึ่งในกรณีสุดท้ายที่จะเปิดใช้งานจะชนะ