`
AreYouOK?
  • 浏览: 57152 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

syslog介绍(一) :BSD syslog协议的格式

阅读更多

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的应用还是很少见的。

分享到:
评论

相关推荐

    syslog协议

    Syslog协议最早出现在20世纪80年代初,由BSD Unix操作系统引入。随着时间的发展,该协议经历了多次更新和完善。其中最著名的一个版本是定义在RFC 3164中的Syslog协议,它于2001年发布,是早期广泛采用的标准之一。...

    syslog协议RFC文档

    RFC 3164是关于BSD syslog协议的一份信息性文档,由C. Lonvick在2001年为互联网工程任务组(IETF)编写,但并未指定为互联网标准。尽管如此,syslog协议由于其广泛的应用性和灵活性,在网络管理与监控领域具有重要...

    syslog在UNIX和Windows服务器端及客户端配置

    Syslog(系统日志协议)是一种标准的、广泛应用于网络设备和计算机系统中的日志记录协议。它能够帮助系统管理员集中管理来自不同来源的日志信息,便于进行故障诊断、安全审计和性能监控等工作。本篇文章将详细介绍...

    Arduino-Syslog.zip

    Arduino-Syslog.zip,用于以ietf格式(rfc 5424)和bsd格式(rfc 3164)syslog记录到syslog服务器的arduino库,Arduino是一家开源软硬件公司和制造商社区。Arduino始于21世纪初,深受电子制造商的欢迎,Arduino通过...

    OpenWrt Syslog-ng日志功能.docx

    1. **可靠的日志传输**:支持TCP协议进行日志传输,相比于传统syslog使用的UDP协议,TCP提供了更好的数据完整性保障,确保了日志数据不会丢失。 2. **加密传输**:通过SSL/TLS加密技术保护日志数据在传输过程中的...

    nsyslog-parser:Syslog解析器。 接受RFC 3164(BSD)和RFC 5424格式

    尽管被认为是标准syslog消息的解析器,但那里有太多系统/设备发送错误,专有或简单格式错误的消息。 nsyslog-parser足够灵活,可以尝试分析每条消息以提取尽可能多的信息,而不会引发任何错误。特征和格式提取非...

    基于AJAX技术的syslog信息实时呈现.docx

    Syslog协议起源于BSD系统,用于收集和记录系统中的事件信息。它支持跨设备的日志共享,使得管理员可以在一个集中的位置查看和管理来自多台设备的日志。通过UDP协议在端口514(或其他预设端口)传输,syslog接收并...

    syslogger:健全的syslog API

    一个理智,简单的API,可在syslog处进行爆破。 var SysLogger = require ( 'syslogger' ) ; var logger = new SysLogger ( { name : 'myApp' , facility : 'user' , address : '127.0.0.1' , port : 514 , ...

    NLog.Targets.Syslog:NLog的Syslog服务器目标

    执照NLog Syslog是开源软件,根据BSD许可条款获得许可。 请参阅以获取更多信息。组态要使用NLog Syslog,只需下载,然后像使用任何NLog目标一样使用。 由于此目标利用以异步和并发的方式工作,因此无需使用NLog ...

    go-syslog:快速的系统日志解析器

    -即BSD-syslog消息 使用成帧技术在syslog流上工作的解析器,请参阅 使用框架技术在系统日志流上工作的解析器,请参阅 该库提供了用于分析遵循各种RFC传输的Syslog消息的片段。 例如: 具有八位字节计数的TLS( )...

    RFC3164.txt

    Syslog(系统日志)是一种广泛用于系统日志记录的标准协议,其历史可以追溯到早期的BSD(Berkeley Software Distribution)版本的Unix操作系统。随着时间的发展,Syslog协议已经成为网络管理和监控的重要组成部分,...

    RFC3164中文文档.txt

    Syslog协议最初由伯克利软件发行版(BSD)实现,并随着时间的推移不断演化和完善。本文主要基于RFC3164文档,详细介绍Syslog协议的相关知识点。 #### 二、Syslog的应用场景 1. **网络管理工具**:在网络环境中,...

    syslog:符合RFC 3164和RFC 5424的Erlang日志记录框架

    系统日志 ... 另外, syslog提供了可选的RFC 3164(BSD Syslog)兼容的协议后端,这是syslog-ng和rsyslog旧版本唯一支持的标准。 与lager相比, syslog的后端集非常有限。 顾名思义, syslog专用于仅使

    syslog4j-graylog2:Graylog2的syslog4j分支。 从0.10.0开始使用。 原始代码非常“特殊”,没有采取任何措施对其进行改进。 计划在将来的版本中完全替换它

    Syslog4j提供了BSD Syslog协议(RFC 3164)和“结构化syslog”协议草案(RFC Draft)的客户端和服务器实现。 警告 这是使用的重新打包的fork,因为原始软件包没有发布到Maven Central的最新版本。 已应用一些修改...

    RFC3164中文版

    **RFC3164**中文版详细介绍了The BSD Syslog Protocol(即BSD日志协议),这是一种广泛应用于计算机网络系统中的日志消息传输协议。该文档强调了Syslog在不同系统间的通信作用,并对其基本概念进行了阐述。 ##### ...

    Modular Syslog-开源

    Syslog是一种广泛用于网络设备、操作系统和其他系统组件的日志记录协议,用于收集和处理各种设备的日志信息。传统的syslog守护程序在处理大量日志数据时可能存在性能瓶颈,且安全性有限。针对这些问题,"Modular ...

    Secure BSD syslog (RFC compliant)-开源

    Syslog-sec提供了基于(RFC)标准的开放式安全syslogd实现,包括rfc3164(“ syslog”)和即将推出的“ syslog-sign”。 其他扩展名,将/可以添加。 也将添加更多工具

    Linux管理员手册

    - **BSD Socket 库**: 提供了一个统一的接口来处理不同的网络协议。 #### 八、编译器和库 - **GCC 和 C 库**: 在Linux系统中,GCC 是一个常用的编译器,而C库则提供了一系列基本的函数。 #### 九、总结 通过上述...

    clog-classic:循环日志的经典版本的syslog补丁

    对循环日志文件的支持需要一个小的syslogd补丁和一个称为clog的支持程序。 阻塞程序创建循环日志文件,可用于查看其内容。 出于历史考虑,此处提供此软件。 它没有积极维护。资料下载该软件的源代码可在BSD公共许可...

    FreeBSD 2.X, 3.X and 4.X 常见问题大全

    FreeBSD是一种基于UNIX的开源操作系统,以其稳定性和强大的网络性能而受到赞誉。本资料集主要涵盖了FreeBSD 2.X, 3.X及4.X版本中用户可能会遇到的各种常见问题及其解决方法。以下是针对这些版本中的一些关键知识点的...

Global site tag (gtag.js) - Google Analytics