
Entonces... instalé Logstash y, en lugar de usar el transportista logstash (porque necesita la JVM y generalmente es enorme), estoy usando rsyslogd con la siguiente configuración.
# 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
En /etc/rsyslog.d/logstash.confhay 28 bloques de monitorización de archivos que utilizan imfile
$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
Hay 28 bloques InputFileMonitor, cada uno de los cuales monitorea un archivo de registro de aplicación personalizado diferente.
si corro
[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
Puedes ver que hayen ningún lugarEn realidad se están leyendo cerca de 28 archivos de registro.
Ien realidadTenía que monitorear un archivo, así que lo moví a la parte superior y lo recogió, pero me gustaría poder monitorear los más de 28 archivos y no tener que preocuparme.
El sistema operativo es
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
Preguntas:
¿Por qué rsyslogd solo monitorea un subconjunto muy pequeño de archivos? ¿Cómo puedo solucionar este problema para que se supervisen todos los archivos?
Respuesta1
Sé que algunas de ellas son obvias, pero aquí vienen las cosas que probaría...
- Verifique que los nombres de los archivos de estado sean únicos
- Verifique que cada
$InputFileName
punto apunte a un existenteregulararchivo - Dale tiempo. El intervalo de sondeo predeterminado es de 10 segundos, lo que podría parecer una eternidad.
- Demostrar claramente lo que no funciona.. Su pregunta dice que los archivos no se monitorean basándose únicamente en la salida de
lsof
. No menciona si realmente intentó escribir en uno de los archivos problemáticos, esperó 10 segundos y no apareció nada en el registro de salida. Y también demuestre cómo verifica correctamente los archivos que se están monitoreando. - Intente eliminar algunos de los archivos que se están monitoreando. Tal vez sea un problema con solo uno de los archivos monitoreados, lo que hace que rsyslog también ignore el resto de los archivos. Sería útil saber cuál es.
Y si te ayuda, tengo un CentOS 5.5 con la misma versión de rsyslog. Y lo probé con 40 archivos y rsyslog pudo monitorearlos todos. Entonces sé que puede funcionar correctamente.
Respuesta2
La pregunta ya tiene respuesta aceptada, pero por si alguien más la necesita.
De acuerdo con ladocumentación de rsyslogel valor predeterminado PersistStateInterval
es 0 ( $InputFilePersistStateInterval
en el contexto del módulo imfile), lo que significa que el archivo rsyslog solo se escribe cuando está inputfile
cerrado. Lo que significa que parecerá que no funciona si tiene un archivo de registro abierto continuamente.
Si se encuentra con este problema, intente configurarlo $InputFilePersistStateInterval
en un valor bajo (solo para pruebas), digamos 2 o 3, luego una vez que el archivo de entrada tenga esa cantidad de líneas escritas, se pasarán a rsyslog.
Respuesta3
No puedo decir si es un error o si está diseñado para funcionar de esta manera. El archivo se puede monitorear incluso si no está abierto. Vocaciónestadística(2)y verificar mtime/size le dará pistas sobre si hay algún cambio desde la última lectura. Al menos así es como funciona nxlog y evita quedarse sin descriptores de archivos si necesita monitorear muchos más de 28.