我有一个关于未在日志消息中显示的必需 rsyslog 字段的查询。
环境细节 – 有多个微服务将日志发送到另一个名为 Log Transformer 的应用程序。日志转换器应用程序正在丰富这些日志消息中存在的字段,然后将所有日志发送到 rsyslog 服务器。供参考,rsyslog 的版本是 8.2004.0
要求 – 日志,在配置文件中转储到 rsyslog 服务器中,应包含以下字段:
Priority
Hostname
Program
TAG
Message
facility_code
facility
Severity
severity_code
Timestamp
rsyslog配置如下:
$MaxMessageSize 32768
# Remote
module(load="imtcp")
input(type="imtcp" port="514")
module(load="imudp")
input(type="imudp" port="514")
$template logstreamingfmt,"<%PRI%>%TIMESTAMP% %HOSTNAME% %app-name% %procid% %syslogfacility% %syslogfacility-text% %syslogpriority% %syslogpriority-text% %syslogseverity% %syslogseverity-text% %syslogtag%%msg%\n"
*.* -/var/log/log-transformer.log
以下是日志文件中打印的一些示例消息,其中并非所有字段都出现在日志中:
2023-03-02T12:27:19.308+00:00 - microservice1-7dcd9b4c77-s6xwh INFO [com.test.microserviceTest] (Thread-89 (ActiveMQ-client-global-threads)) Processing command get all fields
有人可以建议这里可能出什么问题吗。
rsyslog 配置文件中给定的模板是否不正确。
$template logstreamingfmt,"<%PRI%>%TIMESTAMP% %HOSTNAME% %app-name% %procid% %syslogfacility% %syslogfacility-text% %syslogpriority% %syslogpriority-text% %syslogseverity% %syslogseverity-text% %syslogtag%%msg%"
如何在 rsyslog 服务器中检查上游系统正在使用哪些原始消息,因为那样的话,我将能够确定原始消息中是否存在日志中的预期字段。
登录
/var/log/log-transformer.log
时,您似乎没有应用模板。
要应用模板,修改配置如下:
*.* -/var/log/log-transformer.log;logstreamingfmt
或者,您可以使用 RainerScript 语法进行 rsyslog 配置,(在大多数情况下) 可以使配置更易于读写。这是您在 RainerScript 中的等效配置:
template(
name="logstreamingfmt"
type="string"
string="<%PRI%>%TIMESTAMP% %HOSTNAME% %app-name% %procid% %syslogfacility% %syslogfacility-text% %syslogpriority% %syslogpriority-text% %syslogseverity% %syslogseverity-text% %syslogtag%%msg%\n"
)
action(type="omfile" file="/var/log/log-transformer.log" template="logstreamingfmt")