
Então... instalei o Logstash e, em vez de usar o logstash shipper (porque ele precisa da JVM e geralmente é enorme), estou usando o rsyslogd com a seguinte configuração.
# 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
Em /etc/rsyslog.d/logstash.confexistem 28 blocos de monitoramento de arquivos usando 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
Existem 28 blocos InputFileMonitor, cada um monitorando um arquivo de log de aplicativo personalizado diferente.
Se eu correr
[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
Você pode ver que existemem lugar nenhumperto de 28 arquivos de log sendo realmente lidos.
EUrealmentetive que monitorar um arquivo, então movi-o para o topo e ele o pegou, mas gostaria de poder monitorar todos os mais de 28 arquivos e não precisa me preocupar.
SO é
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
Questões:
Por que o rsyslogd está monitorando apenas um subconjunto muito pequeno de arquivos? Como posso corrigir isso para que todos os arquivos sejam monitorados?
Responder1
Eu sei que algumas delas são óbvias, mas aqui estão as coisas que eu tentaria...
- Verifique se os nomes dos arquivos de estado são exclusivos
- Verifique se cada
$InputFileName
ponto aponta para um existenteregulararquivo - Dê um tempo. O intervalo de pesquisa padrão é de 10 segundos, o que pode parecer uma eternidade
- Demonstre claramente o que não está funcionando. Sua pergunta diz que os arquivos não estão sendo monitorados com base apenas na saída do
lsof
. Você não menciona se realmente tentou gravar em um dos arquivos problemáticos, esperou 10 segundos e nada apareceu no log de saída. E também demonstre como você verifica os arquivos que estão sendo monitorados corretamente. - Tente retirar alguns dos arquivos que estão sendo monitorados. Talvez seja um problema com apenas um dos arquivos monitorados, o que faz com que o rsyslog ignore o restante dos arquivos também. Ajudaria saber qual é.
E se ajudar, tenho um CentOS 5.5 com a mesma versão do rsyslog. E eu tentei com 40 arquivos e o rsyslog conseguiu monitorar todos eles. Então eu sei que pode funcionar corretamente.
Responder2
A pergunta já tem uma resposta aceita, mas caso alguém precise disso.
De acordo comdocumentação do rsyslogo valor padrão para PersistStateInterval
é 0 ( $InputFilePersistStateInterval
no contexto do módulo imfile), o que significa que o arquivo rsyslog só é gravado quando inputfile
é fechado. O que significa que parecerá não funcionar se você tiver um arquivo de log aberto continuamente.
Se você se deparar com esse problema, tente definir $InputFilePersistStateInterval
um valor baixo (apenas para teste), digamos 2 ou 3, e assim que o arquivo de entrada tiver esse número de linhas gravadas, elas serão passadas para o rsyslog.
Responder3
Não sei dizer se é um bug ou se pretende funcionar dessa maneira. O arquivo pode ser monitorado mesmo que não esteja aberto. Chamandoestatística(2)e verificar mtime/size dará dicas se houve alguma alteração desde a última leitura. Pelo menos é assim que o nxlog funciona e evita ficar sem descritores de arquivos se você precisar monitorar muito mais que 28.