วิธีการกำหนดค่านโยบายการจัดเก็บบันทึกต่อหน่วยด้วย journald?


14

ฉันมีบริการหนึ่งอย่างที่บันทึกข้อมูลที่หายาก แต่สำคัญ ฉันได้ตั้งค่าไม่กี่เดือนที่ผ่านมาและวันนี้ฉันทำงานjournalctl -n 50 --unit=my-serviceเพียงเพื่อจะพบว่าไม่มีรายการ

ฉันมีความสุขอย่างสมบูรณ์แบบกับพฤติกรรมนี้สำหรับหน่วยงานส่วนใหญ่ - ฉันต้องการบางสิ่งที่เกิดขึ้นทันที (หรือเมื่อไม่กี่วันที่ผ่านมา) และฉันไม่สนใจบันทึกเก่า ๆ หลายเดือน

อย่างไรก็ตามมีวิธีบอกjournaldให้มีนโยบายการจัดเก็บและการเก็บรักษาที่เป็นอิสระสำหรับบันทึกของหน่วยใดหน่วยหนึ่งหรือไม่? ฉันต้องการเก็บบันทึกเฉพาะเหล่านั้นไว้เป็นเวลา 5 ปีไม่ว่าจะต้องใช้ขนาดใดก็ตาม บันทึกของหน่วยอื่นควรไม่ได้รับผลกระทบจากสิ่งนี้และรักษาพฤติกรรมที่มีอยู่

ฉันขาดความเข้าใจjournald.conf(5)และไม่สามารถคิดออกได้ว่าเมื่อใดก็ตามที่สามารถกำหนดค่าต่อหน่วยได้ ถ้าเป็น - จะขอบคุณตัวอย่างที่เป็นรูปธรรมโดยย่อ - ฉันควรแก้ไข / สร้างไฟล์ใดและควรเขียนอะไร หรือถ้าคุณรู้ว่ามันไม่สามารถทำได้อย่างแน่นอน - นั่นก็เป็นคำตอบที่ดีเช่นกัน

หมายเหตุ:กรณีของฉันเกี่ยวข้องกับโฮสต์ Arch Linux แต่ฉันคิดว่ามันไม่สำคัญเท่าไหร่


ฉันไม่สามารถแสดงความคิดเห็นกับคำตอบข้างต้นเพื่อเพิ่มลิงค์นี้ไปยังปัญหาเกี่ยวกับการเพิ่มคุณสมบัตินี้ลงใน journald ดังนั้นที่นี่เป็นคำตอบอื่น: github.com/systemd/systemd/issues/4751
swoop81

คำตอบ:


7

ดูเหมือนว่าฉันน่าจะโชคดีมาก ๆ กับเจอร์นัล นอกจากว่าฉันจะหาวิธีที่จะวางไข่วารสาร "พื้นที่จัดเก็บข้อมูลระยะยาว" ที่เป็นอิสระ (เช่นปัจจุบันมีวารสารต่อผู้ใช้ที่แตกต่างกัน) แต่ฉันไม่แน่ใจว่ามันเป็นแนวทางที่มีประโยชน์และมีเหตุผล ฉันเดาว่าการตั้งค่า syslogd (และ logrotate) จะง่ายขึ้น

คุณลักษณะนี้ไม่ปรากฏในปลายปี 2014ตามที่ได้รับการยืนยันจาก Lennart

และดูเหมือนว่ายังไม่ได้อยู่ที่นี่ อย่างน้อยบรรทัด "journald: อนุญาตต่อเวลาการเก็บรักษาต่อลำดับความสำคัญและต่อบริการเมื่อการหมุน / การดูดฝุ่น" ยังคงอยู่ในไฟล์ TODO (ลิงก์ไปยังการแก้ไขจาก 2016-07-11)


3
ดูเหมือนว่าจะเป็นข้อบกพร่องในการออกแบบที่ใหญ่มากจนเกือบจะทำให้หมดอำนาจ โดยเฉพาะอย่างยิ่งหากต้องการลดการเก็บรักษาหรืออย่างน้อยระดับการบันทึกของหน่วยช่างพูดมากซึ่งอุดตันบันทึก
orion

1
สำหรับใครก็ตามที่สะดุดกับคำถามนี้บรรทัดอ้างอิงในสิ่งที่ต้องทำยังคงมีอยู่ในความคิดเห็นนี้ (26.03.18): github.com/systemd/systemd/blob/
......

1
ในความพยายามที่จะได้รับแรงดึงบางอย่างกับมันผมยกให้มันเป็นปัญหากับโครงการ - github.com/systemd/systemd/issues/9519
slm

1

มันง่ายอย่างน่าทึ่งในการสร้างไฟล์บันทึก โดยค่าเริ่มต้นการบันทึกไปยัง journald จะไปที่ syslog ด้วยและค่าเริ่มต้นนี้จะต้องมีอยู่ rsyslog.conf ควบคุมวิธีการจัดการรายการที่ส่งผ่านไปยัง syslog นอกจากนี้SyslogFacilityค่าเริ่มต้นเพื่อdaemonให้รายการบันทึกสำหรับบริการใด ๆ มักจะจบลงในdaemon.logไฟล์/var/logมา

ในไฟล์บริการของคุณเพิ่มไปยังส่วน [บริการ]

SyslogFacility=local2

(หมายเลขสามารถอยู่ระหว่าง 0 & 7) https://www.freedesktop.org/software/systemd/man/systemd.exec.html

แก้ไข /etc/rsyslog.conf (ค้นหาบรรทัดที่มีอยู่เพื่อแก้ไข) เพื่อให้ local2 ถูกบันทึกลงในไฟล์เฉพาะ (บรรทัดแรก) และไม่ควรล็อกออนเข้า syslog โดยเพิ่มlocal2.noneตามที่แสดง (มีอยู่แล้วในเจอร์นัล)

local2.*                        /var/log/your-service-name.log
*.*;auth,authpriv.none,local2.none          -/var/log/syslog

[แก้ไข] คุณต้องแก้ไขการดักทั้งหมดด้วย

*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none,local2.none      -/var/log/messages

แน่นอนการเก็บรักษาจริงแล้วจะต้องทำโดย logrotate

HTH

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.