rsyslogd überwacht nicht alle Dateien

rsyslogd überwacht nicht alle Dateien

Also … ich habe Logstash installiert und anstatt den Logstash-Shipper zu verwenden (weil dieser die JVM benötigt und im Allgemeinen riesig ist), verwende ich rsyslogd mit der folgenden Konfiguration.

# Use traditional timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf


# Provides kernel logging support (previously done by rklogd)
$ModLoad imklog
# Provides support for local system logging (e.g. via logger command)
$ModLoad imuxsock

# 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;local6.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

In /etc/rsyslog.d/logstash.confEs gibt 28 Dateimonitorblöcke, die Imfile verwenden

$ModLoad imfile   # Load the imfile input module
$ModLoad imklog   # for reading kernel log messages
$ModLoad imuxsock # for reading local syslog messages

$InputFileName /var/log/rabbitmq/startup_err
$InputFileTag rmq-err:
$InputFileStateFile state-rmq-err
$InputFileFacility local6
$InputRunFileMonitor
....
$InputFileName /var/log/some.other.custom.log
$InputFileTag cust-log:
$InputFileStateFile state-cust-log
$InputFileFacility local6
$InputRunFileMonitor
....
*.* @@10.90.0.110:5514

Es gibt 28 InputFileMonitor-Blöcke, die jeweils eine andere benutzerdefinierte Anwendungsprotokolldatei überwachen.

Wenn ich renne

[root@secret-gm02 ~]# lsof|grep rsyslog
rsyslogd   5380        root  cwd       DIR              253,0       4096          2 /
rsyslogd   5380        root  rtd       DIR              253,0       4096          2 /
rsyslogd   5380        root  txt       REG              253,0     278976    1015955 /sbin/rsyslogd
rsyslogd   5380        root  mem       REG              253,0      58400    1868123 /lib64/libgcc_s-4.1.2-20080825.so.1
rsyslogd   5380        root  mem       REG              253,0     144776    1867778 /lib64/ld-2.5.so
rsyslogd   5380        root  mem       REG              253,0    1718232    1867780 /lib64/libc-2.5.so
rsyslogd   5380        root  mem       REG              253,0      23360    1867787 /lib64/libdl-2.5.so
rsyslogd   5380        root  mem       REG              253,0     145872    1867797 /lib64/libpthread-2.5.so
rsyslogd   5380        root  mem       REG              253,0      85544    1867815 /lib64/libz.so.1.2.3
rsyslogd   5380        root  mem       REG              253,0      53448    1867801 /lib64/librt-2.5.so
rsyslogd   5380        root  mem       REG              253,0      92816    1868016 /lib64/libresolv-2.5.so
rsyslogd   5380        root  mem       REG              253,0      20384    1867990 /lib64/rsyslog/lmnsd_ptcp.so
rsyslogd   5380        root  mem       REG              253,0      53880    1867802 /lib64/libnss_files-2.5.so
rsyslogd   5380        root  mem       REG              253,0      23736    1867800 /lib64/libnss_dns-2.5.so
rsyslogd   5380        root  mem       REG              253,0      20768    1867988 /lib64/rsyslog/lmnet.so
rsyslogd   5380        root  mem       REG              253,0      11488    1867982 /lib64/rsyslog/imfile.so
rsyslogd   5380        root  mem       REG              253,0      24040    1867983 /lib64/rsyslog/imklog.so
rsyslogd   5380        root  mem       REG              253,0      11536    1867987 /lib64/rsyslog/imuxsock.so
rsyslogd   5380        root  mem       REG              253,0      13152    1867989 /lib64/rsyslog/lmnetstrms.so
rsyslogd   5380        root  mem       REG              253,0       8400    1867992 /lib64/rsyslog/lmtcpclt.so
rsyslogd   5380        root    0r      REG                0,3          0 4026531848 /proc/kmsg
rsyslogd   5380        root    1u     IPv4         1200589517        0t0        TCP 10.10.10.90 t:40629->10.10.10.90:5514 (ESTABLISHED)
rsyslogd   5380        root    2u     IPv4         1200589527        0t0        UDP *:45801 
rsyslogd   5380        root    3w      REG              253,3   17999744    2621483 /var/log/messages
rsyslogd   5380        root    4w      REG              253,3      13383    2621484 /var/log/secure
rsyslogd   5380        root    5w      REG              253,3       7180    2621493 /var/log/maillog
rsyslogd   5380        root    6w      REG              253,3      43321    2621529 /var/log/cron
rsyslogd   5380        root    7w      REG              253,3          0    2621494 /var/log/spooler
rsyslogd   5380        root    8w      REG              253,3          0    2621495 /var/log/boot.log
rsyslogd   5380        root    9r      REG              253,3 1064271998    2621464 /var/log/custom-application.monolog.log
rsyslogd   5380        root   10u     unix 0xffff81081fad2e40        0t0 1200589511 /dev/log  

Sie können sehen, dass esnirgendsTatsächlich werden fast 28 Protokolldateien gelesen.

ICHWirklichmusste eine Datei überwachen, also habe ich sie nach oben verschoben und sie wurde erkannt, aber ich möchte alle 28+ Dateien überwachen können, ohne mir Sorgen machen zu müssen.

OS ist

Centos 5.5 

Kernel 2.6.18-308.el5

rsyslogd 3.22.1, compiled with:
    FEATURE_REGEXP:             Yes
    FEATURE_LARGEFILE:          Yes
    FEATURE_NETZIP (message compression):   Yes
    GSSAPI Kerberos 5 support:      Yes
    FEATURE_DEBUG (debug build, slow code): No
    Atomic operations supported:        Yes
    Runtime Instrumentation (slow code):    No

Fragen:

Warum überwacht rsyslogd nur eine sehr kleine Teilmenge der Dateien? Wie kann ich das beheben, sodass alle Dateien überwacht werden?

Antwort1

Ich weiß, dass einige davon offensichtlich sind, aber hier sind die Dinge, die ich versuchen würde …

  • Überprüfen Sie, ob die Statusdateinamen eindeutig sind.
  • Überprüfen Sie, ob alle $InputFileNameauf eine vorhandeneregulärDatei
  • Geben Sie ihm etwas Zeit. Das Standardabfrageintervall beträgt 10 Sekunden, was sich wie eine Ewigkeit anfühlen kann
  • Deutlich aufzeigen, was nicht funktioniert. Ihre Frage besagt, dass die Dateien nicht ausschließlich auf Grundlage der Ausgabe von überwacht werden lsof. Sie erwähnen nicht, ob Sie tatsächlich versucht haben, in eine der problematischen Dateien zu schreiben, 10 Sekunden gewartet haben und im Ausgabeprotokoll nichts angezeigt wurde. Und zeigen Sie auch, wie Sie die Dateien überprüfen, die ordnungsgemäß überwacht werden.
  • Versuchen Sie, einige der überwachten Dateien zu entfernen. Vielleicht liegt ein Problem mit nur einer der überwachten Dateien vor, sodass rsyslog auch die übrigen Dateien ignoriert. Es wäre hilfreich zu wissen, welche es ist.

Und falls es hilft: Ich habe ein CentOS 5.5 mit derselben Version von rsyslog. Ich habe es mit 40 Dateien ausprobiert und rsyslog konnte sie alle überwachen. Ich weiß also, dass es richtig funktionieren kann.

Antwort2

Auf die Frage gibt es bereits eine akzeptierte Antwort, aber falls jemand anderes diese braucht.

Entsprechend derrsyslog-DokumentationDer Standardwert für PersistStateIntervalist 0 ( $InputFilePersistStateIntervalim Kontext des Imfile-Moduls), was bedeutet, dass in die rsyslog-Datei nur geschrieben wird, wenn sie inputfilegeschlossen ist. Das bedeutet, dass es scheinbar nicht funktioniert, wenn Sie eine ständig geöffnete Protokolldatei haben.

Wenn dieses Problem bei Ihnen auftritt, versuchen Sie es $InputFilePersistStateIntervalmit einem niedrigen Wert (nur zum Testen), beispielsweise 2 oder 3. Sobald diese Zeilenanzahl in die Eingabedatei geschrieben wurde, werden sie an rsyslog weitergegeben.

Antwort3

Ich kann nicht sagen, ob es ein Fehler ist oder so gewollt ist. Die Datei kann überwacht werden, auch wenn sie nicht geöffnet ist. AufrufStatistik(2)und die Überprüfung von mtime/size gibt Hinweise darauf, ob es seit dem letzten Lesen Änderungen gab. Zumindest funktioniert nxlog so und vermeidet, dass die Dateideskriptoren ausgehen, wenn Sie viel mehr als 28 überwachen müssen.

verwandte Informationen