จะบอก rsyslog ให้สร้างไฟล์บันทึกได้อย่างไรถ้าไม่มี


12

พฤติกรรมเริ่มต้นโดย rsyslog คือการผนวกการติดตามไปยังไฟล์บันทึกที่มีอยู่

ตอนนี้ฉันได้เห็นแล้ว (CentOs, Scientific Linux) ว่าเมื่อ rsyslog กำลังทำงานอยู่คุณลบไฟล์บันทึก (เช่นไฟล์บันทึกการติดตามเฉพาะจากแอปพลิเคชันของคุณ) จากนั้นคุณเรียกใช้แอปพลิเคชันของคุณ rsyslog จะไม่สร้างไฟล์บันทึก และจะไม่มีการบันทึกการติดตาม

มีตัวเลือกการตั้งค่าอย่างใดที่สามารถบอก rsyslog เพื่อสร้างไฟล์บันทึกหากไม่มีก่อนที่จะผนวกการติดตามต่อท้ายหรือไม่

หมายเหตุ : การservice rsyslog restartบังคับให้สร้างไฟล์บันทึกเปล่า

rsyslog.conf (ไม่มีอะไรเพิ่มลงไป)

# rsyslog v5 configuration file

# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

#### MODULES ####

$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
#$ModLoad immark  # provides --MARK-- message capability

$SystemLogRateLimitInterval 1
$SystemLogRateLimitBurst 50000

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514


#### GLOBAL DIRECTIVES ####

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf


#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none    /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$WorkDirectory /var/lib/rsyslog # where to place spool files
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList   # run asynchronously
#$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###

คุณสามารถแบ่งปันไฟล์. conf ของคุณได้หรือไม่?
slm

คำตอบ:


10

จาก POV ของ rsyslog ไฟล์บันทึกที่ถูกลบยังคงมีอยู่ นี่เป็นเพราะ rsyslog ไม่ได้เขียนชื่อไฟล์มันกำลังเขียนไปยังตัวจัดการไฟล์ที่เปิดไว้สำหรับไฟล์บันทึก

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

การส่งสัญญาณ HUP (เช่นผ่านpkill -HUP rsyslogหรือ/etc/init.d/rsyslog rotate) ไปยัง rsyslog บอกให้ปิดไฟล์ที่เปิดอยู่ทั้งหมดโหลดไฟล์ config ใหม่และเปิดไฟล์บันทึกทั้งหมดอีกครั้งเพื่อเขียน (สร้างหากจำเป็น)

การเริ่มใหม่ rsyslogd ยังใช้งานได้

โปรดทราบว่านี่เป็นคุณสมบัติไม่ใช่ข้อผิดพลาดโดยมีผลกระทบที่มีประโยชน์บางประการ - เช่นนั้น rsyslog ยังคงเขียนไปยังไฟล์บันทึกเดียวกันแม้ว่าจะถูกหมุน (เช่นเปลี่ยนชื่อ / mv-ed) จนกระทั่ง rsyslog ได้รับสัญญาณ HUP ซึ่งหมายความว่าสคริปต์การประมวลผลการบันทึกและยูทิลิตี้ไม่จำเป็นต้องระมัดระวังอย่างรอบคอบเกี่ยวกับการจับเวลา - พวกเขาสามารถหมุนบันทึกทั้งหมดส่ง HAS rsyslog และทุกอย่างยังคงทำงานได้โดยไม่สูญเสียข้อมูลบันทึก

BTW วิธีเดียวที่จะไม่เกิดขึ้นกับ rsyslog ก็คือถ้าปิดและเปิดไฟล์บันทึกทุกไฟล์ใหม่ทุกครั้งที่เขียน (หรืออย่างน้อยเรียกว่าsync()) การแสดงจะเป็นสุดซึ้ง


คุณรู้หรือไม่ว่ามือสังหารหาก -HUP to rsyslog จะทริกเกอร์ให้เริ่มเขียนไฟล์ใหม่?
slm

คุณหมายถึงถ้า rsyslog.conf มีการเปลี่ยนแปลงและมีการกำหนดไฟล์บันทึกใหม่หรือไม่ ใช่มันจะสร้างและเริ่มเขียนลงในไฟล์ใหม่เมื่อได้รับ HUP ... ซึ่งเป็นส่วนหนึ่งของการโหลดการกำหนดค่าอีกครั้ง
cas

ตกลงนั่นคือสิ่งที่ฉันแนะนำในวิธีที่ 3 ของฉันขอบคุณ!
slm

ปัญหาคือ rsyslog กำลังทำงานอยู่คุณลบไฟล์บันทึกของแอปพลิเคชัน (โดยไม่ต้องรีสตาร์ท rsyslog) จากนั้นจะไม่มีการติดตามอีกต่อไปเนื่องจาก rsyslog จะไม่สร้างไฟล์บันทึกหากไม่ได้อยู่ในขณะที่กำลังทำงาน ...
fduff

1
อย่างที่ฉันพูดจาก POV ของ rsyslog การจัดการไฟล์นั้นยังคงมีอยู่ มันจะไม่ปิดและเปิดใหม่ / สร้างไฟล์บันทึกใหม่จนกว่าคุณจะบอกด้วยการรีสตาร์ทหรือด้วยสัญญาณ HUP rsyslog ทำในสิ่งที่คุณบอกให้ทำไม่มาก ที่สำคัญกว่านั้นปัญหาไม่ได้อยู่ในสิ่งที่ rsyslog ทำ แต่ในความเข้าใจของคุณเกี่ยวกับพฤติกรรมของ rsyslog และสาเหตุที่มันทำงานเช่นนั้น
cas

3

$ FileCreateMode

ตัวเลือกนี้ไม่ได้ทำในสิ่งที่คุณต้องการ$ FileCreateMode ?

สิ่งที่สกัดมา

$FileCreateMode 0600

This sample lets rsyslog create files with read and write access only for the 
users it runs under.

The following sample is deemed to be a complete rsyslog.conf:

$umask 0000 # make sure nothing interferes with the following definitions
*.* /var/log/file-with-0644-default
$FileCreateMode 0600
*.* /var/log/file-with-0600
$FileCreateMode 0644

*.* /var/log/file-with-0644

โมดูลเอาต์พุตไฟล์

ตามเอกสาร rsyslog อาร์กิวเมนต์ไฟล์ของโมดูลเอาต์พุตไฟล์สามารถใช้เพื่อทำสิ่งนี้

ตัดตอนมาโมดูล omfile

ไฟล์

หากไฟล์มีอยู่แล้วข้อมูลใหม่จะถูกผนวกเข้ากับมัน ข้อมูลที่มีอยู่จะไม่ถูกตัดทอน หากไฟล์นั้นไม่มีอยู่ไฟล์นั้นจะถูกสร้างขึ้น ไฟล์ถูกเก็บไว้เปิดตราบใดที่ rsyslogd ทำงานอยู่ สิ่งนี้ขัดแย้งกับการหมุนไฟล์บันทึกภายนอก เพื่อปิดไฟล์หลังจากการหมุนให้ส่ง rsyslogd สัญญาณ HUP หลังจากไฟล์ถูกหมุนไป

ส่ง syslog สัญญาณ HUP

ฉันคิดว่าท้ายที่สุดคุณต้อง "ทริกเกอร์" rsyslog เพื่อทำสิ่งนี้ ฉันไม่คิดว่ามันจะเป็นสิ่งที่คุณต้องการโดยอัตโนมัติ ดังนั้นคุณสามารถให้สัญญาณ HUP เพื่อทริกเกอร์การสร้างไฟล์บันทึกอีกครั้งหลังจากลบแล้ว

$ sudo pkill -HUP rsyslog

การทำเช่นนั้นสร้างข้อความต่อไปนี้ใน/var/log/messagesไฟล์บันทึกของฉัน:

Sep 26 15:16:17 grinchy rsyslogd: [origin software="rsyslogd" swVersion="4.6.3" x-pid="1245" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightweight'.
Sep 26 15:16:44 grinchy rsyslogd: [origin software="rsyslogd" swVersion="4.6.3" x-pid="1245" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightweight'.

ไม่ฉันใช้เพื่อตั้งค่าการอนุญาตไฟล์และใช้งานได้ดี ปัญหาคือว่าถ้าไฟล์บันทึกถูกลบแล้ว syslog จะไม่พยายามสร้างมันก่อนที่จะเข้าสู่ระบบผงชูรส
fduff

มันถูกลบไปแล้วและเซิร์ฟเวอร์ไม่ได้ถูกรีสตาร์ท?
slm

อย่างแน่นอน ฉันทำแบบทดสอบบางอย่างและฉันมาข้ามพิลึกนี้ ...
fduff

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