转自:http://wly719.iteye.com/blog/1827394

1、syslog格式介绍

在Unix类操作系统上,syslog广泛 应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备 的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。 

完整 的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或 Level)、时间、主机名或IP、进程名、进程ID和正文。在Unix类操作系统上,能够按Facility和Severity的组合来决定什么样的日 志消息是否需要记录,记录到什么地方,是否需要发送到一个接收syslog的服务器等。由于syslog简单而灵活的特性,syslog不再仅限于
Unix类主机的日志记录,任何需要记录和发送日志的场景,都可能会使用syslog。 



长期以来,没有一个标准来规范syslog的格式,导致syslog的格式是非常随意的。最坏的情况下,根本就没有任何格式,导致程序不能对syslog 消息进行解析,只能将它看作是一个字符串。 



在2001年定义的RFC3164中,描述了BSD syslog协议: 



http://www.ietf.org/rfc/rfc3164.txt 



不过这个规范的很多内容都不是强制性的,常常是“建议”或者“约定”,也由于这个规范出的比较晚,很多设备并不遵守或不完全遵守这个规范。接下来就介绍一 下这个规范。 



约 定发送syslog的设备为Device,转发syslog的设备为Relay,接收syslog的设备为Collector。Relay本身也可以发送 自身的syslog给Collector,这个时候它表现为一个Device。Relay也可以只转发部分接收到的syslog消息,这个时候它同时表现 为Relay和Collector。 



syslog消息发送到Collector的UDP 514端口,不需要接收方应答,RFC3164建议 Device 也使用514作为源端口。规定syslog消息的UDP报文不能超过1024字节,并且全部由可打印的字符组成。完整的syslog消息由3部分组成,分 别是PRI、HEADER和MSG。大部分syslog都包含PRI和MSG部分,而HEADER可能没有。 



2、syslog的格式 

下面是一个syslog消息: 

<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting. 

其中“<30>”是PRI部分,“Oct 9 22:33:20 hlfedora”是HEADER部分,“auditd[1787]: The audit daemon is exiting.”是MSG部分。 



2.1、PRI部分 

PRI部分由尖括号包含的一个数字构成,这个数字包含了程序模块(Facility)、严重性(Severity),这个数字是由Facility乘以 8,然后加上Severity得来。不知道他们为什么发明了这么一种不直观的表示方式。 

也就是说这个数字如果换成2进制的话,低位的3个bit表示Severity,剩下的高位的部分右移3位,就是表示Facility的值。 

十进制30 = 二进制0001 1110 

0001 1… = Facility: DAEMON – system daemons (3) 

…. .110 = Severity: INFO – informational (6) 



Facility的定义如下,可以看出来syslog的Facility是早期为Unix操作系统定义的,不过它预留了User(1),Local0~7 (16~23)给其他程序使用: 



Numerical             Facility 

Code 



0             kernel messages 

1             user-level messages 

2             mail system 

3             system daemons 

4             security/authorization messages (note 1) 

5             messages generated internally by syslogd 

6             line printer subsystem 

7             network news subsystem 

8             UUCP subsystem 

9             clock daemon (note 2) 

10             security/authorization messages (note 1) 

11             FTP daemon 

12             NTP subsystem 

13             log audit (note 1) 

14             log alert (note 1) 

15             clock daemon (note 2) 

16             local use 0  (local0) 

17             local use 1  (local1) 

18             local use 2  (local2) 

19             local use 3  (local3) 

20             local use 4  (local4) 

21             local use 5  (local5) 

22             local use 6  (local6) 

23             local use 7  (local7) 



Note 1 - Various operating systems have been found to utilize 

Facilities 4, 10, 13 and 14 for security/authorization, 

audit, and alert messages which seem to be similar. 

Note 2 - Various operating systems have been found to utilize 

both Facilities 9 and 15 for clock (cron/at) messages. 



Severity的定义如下: 



Numerical         Severity 

Code 



0       Emergency: system is unusable 

1       Alert: action must be taken immediately 

2       Critical: critical conditions 

3       Error: error conditions 

4       Warning: warning conditions 

5       Notice: normal but significant condition 

6       Informational: informational messages 

7       Debug: debug-level messages 

也就是说,尖括号中有1~3个数字字符,只有当数字是0的时候,数字才以0开头,也就是说00和01这样在前面补0是不允许的。 



2.2、HEADER部分 

HEADER部分包括两个字段,时间和主机名(或IP)。 

时间紧跟在PRI后面,中间没有空格,格式必须是“Mmm dd hh:mm:ss”,不包括年份。“日”的数字如果是1~9,前面会补一个空格(也就是月份后面有两个空格),而“小时”、“分”、“秒”则在前面补 “0”。月份取值包括: 

Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec 



时间后边跟一个空格,然后是主机名或者IP地址,主机名不得包括域名部分。 



因为有些系统需要将日志长期归档,而时间字段又不包括年份,所以一些不标准的syslog格式中包含了年份,例如: 

<165>Aug 24 05:34:00 CST 1987 mymachine myproc[10]: %% It’s 

time to make the do-nuts. %% Ingredients: Mix=OK, Jelly=OK # 

Devices: Mixer=OK, Jelly_Injector=OK, Frier=OK # Transport: 

Conveyer1=OK, Conveyer2=OK # %% 

这样会导致解析程序将“CST”当作主机名,而“1987”开始的部分作为MSG部分。解析程序面对这种问题,可能要做很多容错处理,或者定制能解析多种 syslog格式,而不仅仅是只能解析标准格式。 



HEADER部分后面跟一个空格,然后是MSG部分。 

有些syslog中没有HEADER部分。这个时候MSG部分紧跟在PRI后面,中间没有空格。 



2.3、MSG部分 

MSG部分又分为两个部分,TAG和Content。其中TAG部分是可选的。 

在 前面的例子中(“<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.”),“auditd[1787]”是TAG部分,包含了进程名称和进程PID。PID可以没有,这个时候中括号也是没有的。 

进程PID有时甚至不是一个数字,例如“root-1787”,解析程序要做好容错准备。 



TAG后面用一个冒号隔开Content部分,这部分的内容是应用程序自定义的。 



3、RFC3195 

BSD syslog协议使用UDP协议在网络中传递,然而UDP是一个不可靠的协议,并且syslog也没有要求接收方有所反馈。为了解决这个问题,RFC又定 义了一个新的规范来可靠的传递syslog消息,它使用TCP协议: 



http://www.ietf.org/rfc/rfc3195.txt 



不过大多数情况下,使用UDP发送不需要确认的syslog消息,已经能够满足要求了,并且这样做非常简单。因此到目前为止,RFC3195的应用还是很 少见的。 



参考文章 

http://blog.gdsyzx.edu.cn/wordpress/?p=299

syslog格式的更多相关文章

  1. 最近在研究syslog日志,就说一下syslog格式吧

    syslog格式:<PRI>HEADER MESSAGE syslog的消息长度:不超过1024.syslog格式举例:<15>Jul 10 12:00:00 192.168. ...

  2. 如何将windows日志转成syslog格式并发到远程sysylog服务器

      安装Snare, 随便找了个版本下载下来,安装一路next,除了中间让你输入一次http的管理登录口令.   2,配置 之后打开URL:http://192.168.37.23:6161/,输入默 ...

  3. syslog日志格式解析

    在网上搜的文章,写的很全乎.摘抄如下,供大家参考学习 1.介绍 在Unix类操作系统上,syslog广泛应用于系统日志.syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog ...

  4. linux syslog详解

    linux syslog详解 分三部分 一.syslog协议介绍 二.syslog函数 三.linux syslog配置   一.syslog协议介绍 1.介绍 在Unix类操作系统上,syslog广 ...

  5. linux syslog详解 转

    分三部分 一.syslog协议介绍 二.syslog函数 三.linux syslog配置   一.syslog协议介绍 1.介绍 在Unix类操作系统上,syslog广泛应用于系统日志.syslog ...

  6. 转: Syslog协议介绍

    转: http://liu-hliang.iteye.com/blog/827392 在网上搜的文章,写的很全乎.摘抄如下,供大家参考学习 1.介绍 在Unix类操作系统上,syslog广泛应用于系统 ...

  7. Log Parser 2.2

    Log Parser 2.2 是一个功能强大的通用工具,它可对基于文本的数据(如日志文件.XML 文件和 CSV 文件)以及 Windows 操作系统上的重要数据源(如事件日志.注册表.文件系统和 A ...

  8. Linux 日志基础

    首先,我们将描述有关 Linux 日志是什么,到哪儿去找它们,以及它们是如何创建的基础知识.如果你已经知道这些,请随意跳至下一节. Linux 系统日志 许多有价值的日志文件都是由 Linux 自动地 ...

  9. systemd的日志管理进程journald

    使用Journalctl查看并操作Systemd日志 systemd拥有强大的处理与系统日志记录功能.在使用其它工具时,日志往往被分散在多套系统当中,由不同的守护进程负责处理. Journal的实现归 ...

随机推荐

  1. Oracle 实例名/服务名 请问SID和Service_Name有什么区别

    可以简单的这样理解:一个公司比喻成一台服务器,数据库是这个公司中的一个部门. 1.SID:一个数据库可以有多个实例(如RAC),SID是用来标识这个数据库内部每个实例的名字, 就好像一个部门里,每个人 ...

  2. iOS -- SKTransition类

      SKTransition类 继承自 NSObject 符合 NSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framewor ...

  3. ant的安装和配置

    1.从官网下载bin源码 http://ant.apache.org/bindownload.cgi#Verify%20Releases 校验源码的完整性 2.直接把解压,然后把文件放入/usr/lo ...

  4. AngularJS的form状态变色

    代码下载:https://files.cnblogs.com/files/xiandedanteng/angularjsChangeFormClass.rar 代码: <!DOCTYPE HTM ...

  5. MySQL中文显示乱码

    http://blog.csdn.net/acmain_chm/article/details/4174186 

  6. POJ 3580(SuperMemo-Splay区间加)[template:Splay V2]

    SuperMemo Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 11384   Accepted: 3572 Case T ...

  7. ETL Automation完整安装方法_(元数据存放在mysql数据库)

    安装前介质准备: DBI-1.636.tar.gz DBD-mysql-4.037.tar.gz ETL.tar mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz P ...

  8. MapReduce 1工作原理图文详解

    MapReduce工作原理图文详解 一 MapReduce程序执行流程 程序执行流程图如下: 流程分析:1.在客户端启动一个作业.2.向JobTracker请求一个Job ID.3.将运行作业所需要的 ...

  9. FeatureLayer.MODE_SNAPSHOT限制数量问题

    我在加载FeatureLayer的时候,采用MODE_SNAPSHOT模式,发现有的图层少了一些数据,改回MODE_ONDEMAND又正常. 究其原因,MODE_SNAPSHOT 是一次性将数据从服务 ...

  10. 10个必需的iOS开发工具和资源

    本文转载至 http://mobile.51cto.com/iphone-418166.htm 界面总不是一件很容易事,尤其是iPhone/iPad的界面,做过iOS开发的程序员,一定会感到开发iPh ...