ในการกำหนดค่าของฉันฉันได้ rsyslog ผู้ที่อยู่ในความดูแลของการเปลี่ยนแปลงต่อไปของการใช้/home/user/my_app/shared/log/unicorn.stderr.log
imfile
เนื้อหาถูกส่งไปยังเซิร์ฟเวอร์บันทึกข้อมูลระยะไกลอื่นโดยใช้ TCP
เมื่อล็อกไฟล์หมุน rsyslog หยุดส่งข้อมูลไปยังเซิร์ฟเวอร์ระยะไกล
ฉันลองโหลด rsyslog ใหม่ส่งสัญญาณ HUP และเริ่มต้นใหม่พร้อมกัน แต่ไม่มีอะไรทำงาน
วิธีเดียวที่ฉันจะพบว่าใช้งานได้จริงสกปรก:
- หยุดบริการลบไฟล์ rsyslog stat และเริ่ม rsyslog อีกครั้ง ทั้งหมดที่อยู่ในเบ็ด postrotate ในไฟล์ logrotate ของฉัน
kill -9
rsyslog และเริ่มต้นใหม่
มีวิธีที่เหมาะสมสำหรับฉันที่จะทำเช่นนี้โดยไม่ต้องสัมผัส rsyslog internals?
ไฟล์ Rsyslog
$ ModLoad ตราสัญลักษณ์ $ ModLoad ไม่ทำงาน $ ModLoad imtcp $ ModLoad imuxsock $ ModLoad imklog $ ModLoad imfile $ เทมเพลตโดยไม่ต้องมีรูปแบบ "[สภาพแวดล้อม] [% syslogtag%] -% msg%" $ WorkDirectory / var / spool / rsyslog $ InputFileName /home/user/my_app/shared/log/unicorn.stderr.log $ InputFileTag unicorn-stderr $ InputFileStateFile สถิติยูนิคอร์น-stderr ข้อมูล $ InputFileSeverity $ InputFileFacility local8 $ InputFilePollInterval 1 $ InputFilePersistStateInterval 1 $ InputRunFileMonitor # ส่งต่อไปยังเซิร์ฟเวอร์ระยะไกล ถ้า $ syslogtag มี 'apache-' ดังนั้น @@ my_server: 5000; WithoutTimeFormat : syslogtag, มี, "apache-" ~ *. * @@ my_server: 5000; SyslFormat
ไฟล์บันทึก
/home/user/my_app/shared/log/*.log { ประจำวัน missingok dateext หมุน 30 การบีบอัด notifempty นามสกุล gz copytruncate สร้างผู้ใช้ 640 คน sharedscripts โพสต์หมุน (หยุด rsyslog && rm / var / spool / rsyslog / stat- * && เริ่ม rsyslog 2> & 1) || จริง endscript }
FYI ไฟล์สามารถอ่านได้สำหรับผู้ใช้ rsyslog เซิร์ฟเวอร์ของฉันสามารถเข้าถึงได้และไฟล์บันทึกอื่น ๆ ที่ไม่หมุนในรอบเดียวกันยังคงถูกติดตามอย่างถูกต้อง
ฉันใช้ Ubuntu 12.04
post-rotate
(ซึ่งไม่ใช่สิ่ง) แทนpostrotate
เพราะสคริปต์ logrotate ดั้งเดิมที่คุณควรทำงานได้ดีกับ rsyslog (ถ้าสคริปต์ postrotate ทำงานอยู่ ) ...