<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>客家文化,客家人在浙江 &#187; syslog</title>
	<atom:link href="http://cnhup.net/tag/syslog/feed" rel="self" type="application/rss+xml" />
	<link>http://cnhup.net</link>
	<description>客家记录,IT技术随笔</description>
	<lastBuildDate>Sun, 13 Jun 2010 07:56:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>syslog协议的格式</title>
		<link>http://cnhup.net/116</link>
		<comments>http://cnhup.net/116#comments</comments>
		<pubDate>Tue, 05 Jan 2010 02:22:11 +0000</pubDate>
		<dc:creator>hakka</dc:creator>
				<category><![CDATA[涂鸦]]></category>
		<category><![CDATA[syslog]]></category>

		<guid isPermaLink="false">http://cnhup.net/116</guid>
		<description><![CDATA[1、介绍
在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消息：
Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.
其中“”是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&#8230; = Facility: DAEMON &#8211; system daemons (3)
&#8230;. .110 = Severity: INFO &#8211; informational (6)
Facility的定义如下，可以看出来syslog的Facility是早期为Unix操作系统定义的，不过它预留了User（1），Local0～7 （16～23）给其他程序使用：
      Numerical    [...]]]></description>
			<content:encoded><![CDATA[<p>1、介绍</p>
<p>在Unix类操作系统上，syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中，也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储，或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。<span id="more-116"></span></p>
<p>完整的syslog日志中包含产生日志的程序模块（Facility）、严重性（Severity或 Level）、时间、主机名或IP、进程名、进程ID和正文。在Unix类操作系统上，能够按Facility和Severity的组合来决定什么样的日志消息是否需要记录，记录到什么地方，是否需要发送到一个接收syslog的服务器等。由于syslog简单而灵活的特性，syslog不再仅限于 Unix类主机的日志记录，任何需要记录和发送日志的场景，都可能会使用syslog。</p>
<p>长期以来，没有一个标准来规范syslog的格式，导致syslog的格式是非常随意的。最坏的情况下，根本就没有任何格式，导致程序不能对syslog 消息进行解析，只能将它看作是一个字符串。</p>
<p>在2001年定义的RFC3164中，描述了BSD syslog协议：</p>
<p>http://www.ietf.org/rfc/rfc3164.txt</p>
<p>不过这个规范的很多内容都不是强制性的，常常是“建议”或者“约定”，也由于这个规范出的比较晚，很多设备并不遵守或不完全遵守这个规范。接下来就介绍一 下这个规范。</p>
<p>约定发送syslog的设备为Device，转发syslog的设备为Relay，接收syslog的设备为Collector。Relay本身也可以发送自身的syslog给Collector，这个时候它表现为一个Device。Relay也可以只转发部分接收到的syslog消息，这个时候它同时表现为Relay和Collector。</p>
<p>syslog消息发送到Collector的UDP 514端口，不需要接收方应答，RFC3164建议 Device 也使用514作为源端口。规定syslog消息的UDP报文不能超过1024字节，并且全部由可打印的字符组成。完整的syslog消息由3部分组成，分别是PRI、HEADER和MSG。大部分syslog都包含PRI和MSG部分，而HEADER可能没有。</p>
<p>2、syslog的格式</p>
<p>下面是一个syslog消息：<br />
<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.<br />
其中“<30>”是PRI部分，“Oct 9 22:33:20 hlfedora”是HEADER部分，“auditd[1787]: The audit daemon is exiting.”是MSG部分。</p>
<p>2.1、PRI部分<br />
PRI部分由尖括号包含的一个数字构成，这个数字包含了程序模块（Facility）、严重性（Severity），这个数字是由Facility乘以 8，然后加上Severity得来。不知道他们为什么发明了这么一种不直观的表示方式。<br />
也就是说这个数字如果换成2进制的话，低位的3个bit表示Severity，剩下的高位的部分右移3位，就是表示Facility的值。<br />
十进制30 = 二进制0001 1110<br />
0001 1&#8230; = Facility: DAEMON &#8211; system daemons (3)<br />
&#8230;. .110 = Severity: INFO &#8211; informational (6)</p>
<p>Facility的定义如下，可以看出来syslog的Facility是早期为Unix操作系统定义的，不过它预留了User（1），Local0～7 （16～23）给其他程序使用：</p>
<p>      Numerical             Facility<br />
         Code</p>
<p>          0             kernel messages<br />
          1             user-level messages<br />
          2             mail system<br />
          3             system daemons<br />
          4             security/authorization messages (note 1)<br />
          5             messages generated internally by syslogd<br />
          6             line printer subsystem<br />
          7             network news subsystem<br />
          8             UUCP subsystem<br />
          9             clock daemon (note 2)<br />
         10             security/authorization messages (note 1)<br />
         11             FTP daemon<br />
         12             NTP subsystem<br />
         13             log audit (note 1)<br />
         14             log alert (note 1)<br />
         15             clock daemon (note 2)<br />
         16             local use 0  (local0)<br />
         17             local use 1  (local1)<br />
         18             local use 2  (local2)<br />
         19             local use 3  (local3)<br />
         20             local use 4  (local4)<br />
         21             local use 5  (local5)<br />
         22             local use 6  (local6)<br />
         23             local use 7  (local7)</p>
<p>       Note 1 &#8211; Various operating systems have been found to utilize<br />
          Facilities 4, 10, 13 and 14 for security/authorization,<br />
          audit, and alert messages which seem to be similar.<br />
       Note 2 &#8211; Various operating systems have been found to utilize<br />
          both Facilities 9 and 15 for clock (cron/at) messages.</p>
<p>Severity的定义如下：</p>
<p>       Numerical         Severity<br />
        Code</p>
<p>         0       Emergency: system is unusable<br />
         1       Alert: action must be taken immediately<br />
         2       Critical: critical conditions<br />
         3       Error: error conditions<br />
         4       Warning: warning conditions<br />
         5       Notice: normal but significant condition<br />
         6       Informational: informational messages<br />
         7       Debug: debug-level messages</p>
<p>也就是说，尖括号中有1～3个数字字符，只有当数字是0的时候，数字才以0开头，也就是说00和01这样在前面补0是不允许的。</p>
<p>2.2、HEADER部分<br />
HEADER部分包括两个字段，时间和主机名（或IP）。<br />
时间紧跟在PRI后面，中间没有空格，格式必须是“Mmm dd hh:mm:ss”，不包括年份。“日”的数字如果是1～9，前面会补一个空格（也就是月份后面有两个空格），而“小时”、“分”、“秒”则在前面补“0”。月份取值包括：<br />
Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec</p>
<p>时间后边跟一个空格，然后是主机名或者IP地址，主机名不得包括域名部分。</p>
<p>因为有些系统需要将日志长期归档，而时间字段又不包括年份，所以一些不标准的syslog格式中包含了年份，例如：<br />
<165>Aug 24 05:34:00 CST 1987 mymachine myproc[10]: %% It&#8217;s<br />
time to make the do-nuts. %% Ingredients: Mix=OK, Jelly=OK #<br />
Devices: Mixer=OK, Jelly_Injector=OK, Frier=OK # Transport:<br />
Conveyer1=OK, Conveyer2=OK # %%<br />
这样会导致解析程序将“CST”当作主机名，而“1987”开始的部分作为MSG部分。解析程序面对这种问题，可能要做很多容错处理，或者定制能解析多种syslog格式，而不仅仅是只能解析标准格式。</p>
<p>HEADER部分后面跟一个空格，然后是MSG部分。<br />
有些syslog中没有HEADER部分。这个时候MSG部分紧跟在PRI后面，中间没有空格。</p>
<p>2.3、MSG部分<br />
MSG部分又分为两个部分，TAG和Content。其中TAG部分是可选的。<br />
在前面的例子中（“<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.”），“auditd[1787]”是TAG部分，包含了进程名称和进程PID。PID可以没有，这个时候中括号也是没有的。<br />
进程PID有时甚至不是一个数字，例如“root-1787”，解析程序要做好容错准备。</p>
<p>TAG后面用一个冒号隔开Content部分，这部分的内容是应用程序自定义的。</p>
<p>3、RFC3195<br />
BSD syslog协议使用UDP协议在网络中传递，然而UDP是一个不可靠的协议，并且syslog也没有要求接收方有所反馈。为了解决这个问题，RFC又定义了一个新的规范来可靠的传递syslog消息，它使用TCP协议：</p>
<p>http://www.ietf.org/rfc/rfc3195.txt</p>
<p>不过大多数情况下，使用UDP发送不需要确认的syslog消息，已经能够满足要求了，并且这样做非常简单。因此到目前为止，RFC3195的应用还是很少见的。</p>
]]></content:encoded>
			<wfw:commentRss>http://cnhup.net/116/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
