rsyslog 发送特定行到远程服务器

rsyslog 发送特定行到远程服务器

我正在使用 rsyslog 将 /var/log/messages 发送到远程日志服务器,语法如下

*.* @remote_server_ip:port

在 /var/log/messages 中有如下行;

06-03-2021  11:26:50    System0.Info    10.0.0.124  Jun  3 11:26:50 neptun04 HDB_SYSTEMDB[2049]: 2021-06-03T11:26:50.093414Z;nameserver;server_name;EHP;00;30001;SYSTEMDB;server_ip;pordevdb;28522;62678;Session_Management;INFO;CONNECT;SYSTEM;;;;;;SYSTEM;SUCCESSFUL;;;;;;;;162347;unknown;;;;;SYSTEM;HANACockpit;SYSTEM;;;;;;;;;;;;;;

我只想将这些行而不是所有消息发送到远程 rsyslog。

我试图在 /etc/rsyslog.conf 中添加以下行来将以“HDB_SYSTEMD”开头的行分隔到另一个日志文件(我想如果我可以分隔,我就可以只发送该日志文件)但没有成功,它没有向 hanna.log 文件写入任何内容;

*.*;mail.none;news.none                 -/var/log/messages
:msg, contains, "HDB_SYSTEMDB"          /var/log/hanna.log

如何将包含“HDB_SYSTEMD”的特定行发送到远程系统日志服务器

答案1

使其发挥作用,并写下解决方案以供将来有人需要;

首先编辑rsyslog.conf然后 nano /etc/rsyslog.conf添加以下行;

#### save hana logs to another file ####
$template hanalog, "/var/log/hanalog"
if $programname contains 'HDB_SYSTEMD' then ?hanalog
& ~

添加行后,您的配置文件应如下所示; 配置文件预览

然后编辑 rsyslog.d 文件nano /etc/rsyslog.d/hana-log.conf并添加以下模板;

$ModLoad imfile    #Load the imfile input module

$InputFilePollInterval 10

$InputFileName  /var/log/hanalog

$InputFileTag hana-dberisim:

$InputFileStateFile stat-hana-dberisim

$InputFileSeverity Info

$InputRunFileMonitor


$template hana_dberisim, "  %msg% "


if $programname == 'hana-dberisim' then @remote_server_ip:port;hana_dberisim

if $programname == 'hana-dberisim' then stop

重新启动 rsyslog 服务;

service rsyslog restart

就这样。

答案2

“HDB_SYSTEMDB”不是消息的一部分——它是程序名称。(整个字段是“syslog 标签”——rsyslog 会自动删除 [pid] 后缀以确定程序名称。)请参阅RSyslog 消息属性

:programname, isequal, "HDB_SYSTEMDB"

您还可以匹配整个标签(使用“name[pid]”):

:syslogtag, startswith, "HDB_SYSTEMDB"

相关内容