我正在使用 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"