
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
$InputFileName
auf 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 PersistStateInterval
ist 0 ( $InputFilePersistStateInterval
im Kontext des Imfile-Moduls), was bedeutet, dass in die rsyslog-Datei nur geschrieben wird, wenn sie inputfile
geschlossen 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 $InputFilePersistStateInterval
mit 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.