Назад | Перейти на главную страницу

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"

И tcpdump на стороне сервера logstash (10.38.105.18), чтобы увидеть, что что-то проходит (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

Между ними действительно есть брандмауэр, но почему tcpdump на стороне logstash не показывает пакет, когда я отправляю сообщение через команду «logger», но он показывает его, когда я отправляю его через netcat? Я запутался.

Я не могу точно сказать, почему у вас не работает конфигурация, но я использую rsyslog для отправки сообщений в logstash, и у меня нет проблем. Если вы можете отправлять трафик в logstash с помощью nc, а logstash настроен для получения журналов как по UDP, так и по TCP, и вы используете те же порты, как вы говорите, тогда это должно работать.

Можете ли вы упростить настройку? Вы говорите, что между двумя машинами есть брандмауэр, можете ли вы отключить его для тестирования или воспроизвести на виртуальной машине без брандмауэров?

В своей настройке я использую следующую конфигурацию, это должен быть очень надежный способ отправки журналов. Я бы рекомендовал использовать TCP (например, @@ over @), поскольку он должен быть более надежным, чем 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, а сообщения не проходят, отправитель не знает и будет терять сообщения, пока кто-нибудь не обнаружит проблему.