rsyslog não pode enviar logs para logstash

1

Aqui está o meu rsyslog.conf (nada na pasta /etc/rsyslog.d/):

#### MODULES ####

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

#### GLOBAL DIRECTIVES ####

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

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


#### RULES ####

# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.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

 # SEND ALL THE MESSAGES TO CENTRAL LOGSTASH SERVER
#
*.* @10.38.105.18:5000

Depois de reiniciar o serviço rsyslog, tento o seguinte para testar:

logger  "Host1 kernel: device eth0 left promiscuous mode"

E o tcpdump no lado do servidor do logstash (10.38.105.18) para ver qualquer passagem (10.36.52.81 é o servidor que está enviando os logs):

[~] # tcpdump src host 10.36.52.81 -nn -XXX
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

Nada.

Quando eu envio dados por meio do nc:

[~] # echo -n "Host1 kernel: device eth0 left promiscuous mode" | nc -4u -w1 10.38.105.18 5000

Eu posso ver que ele passa por:

03:04:19.521433 IP 10.36.52.81.42159 > 10.38.105.18.5000: UDP, length 47
        0x0000:  0050 56a6 4600 0026 981c bd42 0800 4500  .PV.F..&...B..E.
        0x0010:  004b 9560 4000 3e11 f594 0a24 3451 0a26  .K.'@.>....$4Q.&
        0x0020:  6912 a4af 1388 0037 01da 486f 7374 3120  i......7..Host1.
        0x0030:  6b65 726e 656c 3a20 6465 7669 6365 2065  kernel:.device.e
        0x0040:  7468 3020 6c65 6674 2070 726f 6d69 7363  th0.left.promisc
        0x0050:  756f 7573 206d 6f64 65                   uous.mode

Então, isso significa que não há obstáculos no caminho. O que estou fazendo errado?

Atualização:

fez um tcpdump no clientside e parece que o cliente está enviando o log para o Logstash:

03:30:20.073608 IP 10.36.52.81.39653 > 10.38.105.18.5000: UDP, length 88
        0x0000:  001b 1700 0125 0050 56a6 6b5e 0800 4500  .....%.PV.k^..E.
        0x0010:  0074 0000 4000 4011 88cc 0a24 3451 0a26  .t..@.@....$4Q.&
        0x0020:  6912 9ae5 1388 0060 b21e 3c31 333e 4465  i......'..<13>De
        0x0030:  6320 2031 2030 333a 3330 3a32 3020 6d73  c..1.03:30:20.ms
        0x0040:  7070 3170 6573 6c6f 6730 3031 2072 6f6f  pp1peslog001.roo
        0x0050:  743a 2048 6f73 7431 206b 6572 6e65 6c3a  t:.Host1.kernel:
        0x0060:  2064 6576 6963 6520 6574 6830 206c 6566  .device.eth0.lef
        0x0070:  7420 7072 6f6d 6973 6375 6f75 7320 6d6f  t.promiscuous.mo
        0x0080:  6465                                     de

Existe, de fato, um firewall entre eles, mas por que o tcpdump no lado do logstash não mostra o pacote quando eu mando a mensagem através do comando "logger", mas ele aparece quando eu o envio através do netcat? Estou confuso.

    
por Iokanaan Iokan 01.12.2015 / 10:05

1 resposta

0

Eu não posso dizer com certeza porque você config não funciona, mas eu uso rsyslog para enviar mensagens para logstash e não tenho problemas. Se você puder enviar tráfego para logstash usando nc, e o logstash estiver configurado para receber logs tanto no UDP quanto no TCP, e você estiver usando as mesmas portas, como você diz, isso deve funcionar.

Você é capaz de simplificar sua configuração? Você diz que há um firewall entre as duas máquinas, você pode desativá-lo para fins de teste ou reproduzir em uma VM sem firewalls?

Na minha configuração eu uso a seguinte configuração, esta deve ser uma maneira muito confiável de enviar logs. Eu recomendaria usar o TCP (ou seja, @@ over @), pois ele deve ser mais confiável que o UDP e, se falhar ao enviar a seguinte configuração, as mensagens serão enfileiradas no disco e na memória, para que você possa corrigi-las sem perder mensagens:

# start forwarding rule 2
$ActionQueueType LinkedList # use asynchronous processing
$ActionQueueFileName logstash # set file name, also enables disk mode
$ActionResumeRetryCount -1 # infinite retries on insert failure
$ActionResumeInterval 10 # Attempt resuming after 10 seconds
$ActionQueueSaveOnShutdown on # save in-memory data if rsyslog shuts down
$ActionQueueMaxDiskSpace 200M #Limit the amount of space used on disk to 200M
$ActionQueueSize 20000 # Limit the amount of messages to queue in memory to 20000, average size is 512 bytes, so shouldn't be greater than 10M

*.* @@logstash:5114;RSYSLOG_SyslogProtocol23Format # end forwarding rule 2

Lembre-se de que, se você estiver enviando com o UDP e as mensagens não forem recebidas, o remetente não saberá e continuará perdendo as mensagens até que alguém identifique o problema.

    
por 06.12.2015 / 11:51