与syslog消息格式混淆

qwi*_*wix 17 syslog rsyslog syslog-ng

我对syslog消息格式有点困惑.我必须编写一个解析syslog消息的程序.当我读到我在syslog-ng实例中得到的内容时,我得到这样的消息:

Jan 12 06:30:00 1.2.3.4 apache_server: 1.2.3.4 - - [12/Jan/2011:06:29:59 +0100] "GET /foo/bar.html HTTP/1.1" 301 96 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)" PID 18904 Time Taken 0
Run Code Online (Sandbox Code Playgroud)

我可以清楚地确定真实的消息(在这种情况下是Apache访问日志消息)其余的是关于系统日志消息本身的元数据.

但是,当我阅读RFC 5424时,消息示例如下所示:

没有结构化数据

 <34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - BOM'su root' failed for lonvick on /dev/pts/8
Run Code Online (Sandbox Code Playgroud)

或结构化数据

<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] BOMAn application event log entry...
Run Code Online (Sandbox Code Playgroud)

所以现在我有点困惑.什么是正确的系统日志消息格式?这是RFC 5424废弃RFC 3164的规范版本问题?

b0t*_*0ti 17

在这种情况下的问题是apache通过标准syslog(3)或通过记录器进行日志记录.这仅支持旧的(RFC3164)syslog格式,即此处没有结构化数据.为了让apache日志中的字段显示为RFC5424结构化数据,apache需要以这种方式格式化日志.

第一个示例不是正确的RFC3164 syslog,因为优先级值是从标头中剥离的.适当的RFC3164格式如下所示:

<34>Jan 12 06:30:00 1.2.3.4 apache_server: 1.2.3.4 - - [12/Jan/2011:06:29:59 +0100] "GET /foo/bar.html HTTP/1.1" 301 96 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)" PID 18904 Time Taken 0
Run Code Online (Sandbox Code Playgroud)

传统上,rfc3164系统日志消息将保存到已删除优先级值的文件中.

另外两个是RFC5424格式.