rsyslog 无法将日志发送到 logstash

rsyslog 无法将日志发送到 logstash

这是我的 rsyslog.conf(/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

重新启动rsyslog服务后,我尝试以下操作进行测试:

logger  "Host1 kernel: device eth0 left promiscuous mode"

然后在 logstash 服务器端 (10.38.105.18) 上运行 tcpdump,查看是否有什么事情发生(10.36.52.81 是发送日志的服务器):

[~] # 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

没有什么。

当我通过 nc 发送数据时:

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

我可以看到它经过了:

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

所以,这意味着路径上没有障碍物。我做错了什么?

更新:

在客户端执行了 tcpdump,看起来客户端正在将日志发送到 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

中间确实有防火墙,但是为什么我通过“logger”命令发送消息时,logstash 端的 tcpdump 不显示数据包,而我通过 netcat 发送时却显示数据包?我很困惑。

答案1

我不能肯定地说为什么你的配置不起作用,但我使用 rsyslog 向 logstash 发送消息,没有遇到任何问题。如果你可以使用 nc 向 logstash 发送流量,并且 logstash 设置为在 UDP 和 TCP 上接收日志,并且你使用相同的端口,那么这应该可以工作。

您能简化设置吗?您说两台机器之间有防火墙,您能出于测试目的禁用它或在没有防火墙的虚拟机上重现吗?

在我的设置中,我使用以下配置,这应该是一种非常可靠的发送日志的方式。我建议使用 TCP(即 @@ 而不是 @),因为它应该比 UDP 更可靠,并且如果使用以下配置发送失败,消息将在磁盘和内存中排队,因此您可以在不丢失消息的情况下修复它:

# 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

请记住,如果您使用 UDP 发送并且消息没有发送成功,则发送者不会知道并且会一直丢失消息,直到有人发现该问题。

相关内容