在网上搜的文章,写的很全乎。摘抄如下,供大家参考学习
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消息:
<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的应用还是很少见的。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xcj0535/archive/2009/05/07/4158624.aspx
分享到:
相关推荐
### Syslog协议详解 #### 一、Syslog协议概述 Syslog(系统日志)是一种在计算机网络中发送系统消息的标准协议。它主要用于在各种设备(如服务器、路由器、交换机和其他网络设备)之间发送系统日志信息。通过...
syslog协议是网络设备、操作系统和应用程序之间广泛使用的标准日志记录协议,它允许系统将日志消息发送到中央日志服务器,便于管理和分析。在Java环境中实现syslog协议发送日志,我们可以利用相关的库或者自定义编程...
syslog协议,全称为系统日志协议,是网络设备和操作系统用于记录和传输事件日志信息的标准协议。RFC 3164是关于BSD syslog协议的一份信息性文档,由C. Lonvick在2001年为互联网工程任务组(IETF)编写,但并未指定为...
Syslog4j是一款遵循RFC3164标准的Syslog协议的Java实现。它支持多种通信协议,包括UDP/IP、TCP/IP、TCP/IP over SSL/TLS、Unix Syslog和Unix Socket等。Syslog4j提供了一个强大的日志记录功能,适用于需要跨平台的...
**syslog协议介绍** syslog协议定义了一种标准格式,用于在网络中的设备间传输日志消息。这些消息通常包含时间戳、优先级信息以及事件描述。根据RFC 5424,syslog消息分为结构化数据、优先级、时间戳、发送者主机名...
【Syslog协议详解】 Syslog协议是一种广泛应用于网络设备、操作系统和应用程序的日志记录协议,尤其在UNIX系统和网络管理中扮演着重要角色。它允许设备将日志信息发送到中央日志服务器,便于集中管理和分析。以下是...
Syslog协议介绍** Syslog协议起源于BSD系统,用于收集和记录系统中的事件信息。它支持跨设备的日志共享,使得管理员可以在一个集中的位置查看和管理来自多台设备的日志。通过UDP协议在端口514(或其他预设端口)...
本文将详细介绍 syslog 配置的方法,涵盖服务器、交换机、路由器等多种网络设备。 一、服务器 syslog 配置 服务器是网络中的核心设备,syslog 配置对服务器的稳定运行至关重要。不同的操作系统下,syslog 配置方法...
在Windows服务器环境中,syslog是一种广泛使用的日志记录协议,主要用在Unix和Linux系统中。然而,随着跨平台需求的增长,Windows服务器也开始支持syslog服务,以便与不同操作系统之间的日志集成。以下是对如何在...
Syslog协议是网络设备、服务器及各种系统组件之间用于传输日志数据的一种标准方法。它最初被设计为一种简单的日志消息传送机制,但随着时间的发展和技术的进步,其功能与安全性也得到了显著提升。RFC5424作为最新的...
Syslog协议是一个标准的日志消息传递协议,广泛应用于网络设备、操作系统和其他软件应用。下面将详细阐述如何在Java中实现Syslog日志发送以及相关知识点。 首先,我们要理解Java中的Syslog实现主要依赖于`java.net....
它遵循标准的SYSLOG协议,该协议定义了一种通用的日志格式和传输机制,使得多个系统和应用可以共享日志信息。在本文中,我们将深入探讨SYSLOG的功能、配置以及相关的API接口。 一、SYSLOG术语 SYSLOG是一种系统日志...
Syslog 协议是一个基于 UDP 协议的应用层协议,用于传输日志信息。syslog 协议的体系结构由三个部分组成:发送方、接收方和中继。发送方是指将日志信息发送到中央日志服务器的设备,例如路由器、交换机、防火墙等。...
syslog协议是一种广泛应用于网络设备、操作系统和应用程序的日志记录标准,它允许系统管理员集中收集和分析来自不同源的日志信息。syslog4j-0.9.46.zip这个压缩包包含了syslog4j的特定版本,即0.9.46,这是一个针对...
syslog协议基于UDP,但也支持TCP和TLS/SSL以提高安全性。日志消息包含时间戳、优先级、发送者信息和消息内容。 2. **syslog4j**:syslog4j是一个开源Java库,它为Java应用程序提供了实现syslog协议的能力。开发者...
syslog协议是各种网络设备、服务器支持的网络日志记录标准。Syslog消息提供有关网络事件和错误的信息。系统管理员使用Syslog进行网络管理和安全审核。 通过专用的syslog服务器和syslog协议将来自整个网络的事件记录...
syslog协议允许系统和服务发送结构化的文本日志消息。这些消息包含时间戳、优先级、主机名、程序名以及实际的日志内容。syslog协议有多种版本,包括原始的RFC 3164和更新的RFC 5424。理解这些标准对于编写解析器至关...
该开源项目名为"syslog-java-client",版本为1.0.1,它提供了Java开发者一个简单易用的接口,用于将应用程序的日志事件以syslog协议格式发送到syslog服务器。项目内容包含在压缩包中的"syslog-java-client-master...