gpt4 book ai didi

tomcat - rsyslog 的多行日志问题

转载 作者:行者123 更新时间:2023-11-28 21:49:19 58 4
gpt4 key购买 nike

我有一个应用程序服务器 (Ubuntu 14.04),上面运行着 tomcat 服务器。此应用程序服务器使用“rsyslog”,它被配置为将日志发送到 NXlog 服务器(在 Ubuntu 14.04 上)。

Rsyslog 将其所有日志(包括 tomcat 错误、异常和堆栈跟踪)发送到 syslog 服务器,但多行日志存在问题。当日志消息存储在文件中或在没有任何封装的情况下通过网络转发时,跨越多行的消息中出现的换行符会混淆简单的基于行的解析器,这些解析器将每一行都视为一个单独的事件; & 因此我的异常日志在新行中被破坏。

我的 rsyslog 版本是:7.4.4

rsyslog.conf 文件如下所示:

#################
#### MODULES ####
#################
$EscapeControlCharactersOnReceive off
$LocalHostName nishant-app

$ModLoad imuxsock # provides support for local system logging
$ModLoad imklog # provides kernel logging support (previously done by rklogd)i
#$ModLoad immark # provides --MARK-- message capability
$ModLoad imfile
$ModLoad omrelp
#$ModLoad omhdfs

# provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514

module(load="imfile" PollingInterval="10")
###########################
#### GLOBAL DIRECTIVES ####
###########################
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#

#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# Filter duplicated messages
$RepeatedMsgReduction on

#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog

#
# Where to place spool files
#
$WorkDirectory /var/spool/rsyslog

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf ## This includes all the conf files which tells rsyslog which logs need to be sent

所以基本上我需要发送 tomcat 堆栈跟踪和异常,这样异常就不会分散在多行中。

  • 我希望在 rsyslog 端解决这个问题,但也很困惑天气这也可以在 Nxlog 服务器端解决吗?

最佳答案

我认为答案取决于您的日志如何在 rsyslog 中结束。如果有一个 appender 而不是将内容发送到 syslog 套接字,则由它决定。据我所知,您可以在那里发送多行日志,但是如果附加程序在到达 rsyslog 之前破坏了它们,那么您在那里无能为力。 UDP转发也是一样,每个数据包都是一个日志,所以rsyslog就是拿到就拿。

如果通过 TCP 发送,消息的默认分隔符是换行符。尽管 rsyslog 支持八位字节分隔的帧,但这又是发送方需要处理的事情。

但是,如果您正在拖尾文件,那么您可以在这里做些事情。尽管您可能需要最新版本的 rsyslog(有 Ubuntu 软件包 here)。有了它,您将获得此用例的两个重要功能:

  • inotify 模式(默认使用)。在性能和日志轮换方面比轮询模式好得多
  • startmsg.regex(它允许您指定一个正则表达式来确定哪一行应该属于当前事件,哪一行应该开始一个新事件)

重点是,对于多行日志,您(或者更确切地说,rsyslog)必须想出另一种分隔消息的方法。对于 imfile,即使在 7.4.4 中,也有使用 ReadMode 的选项,默认为 0(换行符是分隔符),但您可以将其设置为 2(如果行以空格/制表符开头,则它属于上一行)。

您可以在此处找到有关 imfile 的所有选项:http://www.rsyslog.com/doc/master/configuration/modules/imfile.html

关于tomcat - rsyslog 的多行日志问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33184234/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com