`
阅读更多

在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介绍 Syslog是一种广泛使用的日志记录协议,它允许分布在不同网络设备上的系统将日志信息集中发送到一个或多个 syslog服务器进行统一管理和分析。这种机制在IT环境中尤其重要,因为它帮助管理员监控和诊断...

    SYSLOG日志数据采集实现

    本文将详细介绍SYSLOG日志数据采集的实现过程,包括SYSLOG的基本原理、日志数据采集的重要性、采集技术对比以及SYSLOG的优势等方面。 #### 二、SYSLOG概述 **1. 基本概念** SYSLOG(System Logging Protocol)是...

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

    syslog是一种广泛使用的标准协议,用于在各种网络设备和应用程序之间交换日志信息。本文将深入探讨使用Go语言开发快速syslog解析器的相关知识点。 一、syslog协议基础 syslog协议允许系统和服务发送结构化的文本...

    syslog-watcher

    syslog协议定义了一种标准格式,用于在网络中的设备间传输日志消息。这些消息通常包含时间戳、优先级信息以及事件描述。根据RFC 5424,syslog消息分为结构化数据、优先级、时间戳、发送者主机名和消息正文五个部分。...

    logstash-output-syslog

    Syslog是一种标准的日志记录协议,用于在不同网络设备和操作系统之间交换系统日志信息。它支持多种级别(如 emerg, alert, crit, err, warning, notice, info, debug)和不同设施,使得日志信息的分类和过滤变得容易...

    华为交换机手册配置(包括syslog日志)

    syslog是一种标准化的日志系统,广泛应用于各种网络设备,包括华为交换机。它能够收集并记录设备的运行状态、错误信息、告警等数据,便于管理员分析设备健康状况。在华为交换机上,syslog功能可以通过命令行界面...

    syslog_搭建日志服务器

    syslog 是一种标准的日志记录协议,用于收集和存储来自不同设备和系统的日志信息。搭建日志服务器可以帮助管理员更好地监控和管理网络设备和系统的日志信息。本文将详细介绍 syslog 搭建日志服务器的过程,包括安装 ...

    前端开源库-winston-syslog

    **二、Syslog介绍** Syslog是一种网络协议,用于在计算机系统之间传递结构化日志信息。它广泛应用于网络设备、操作系统、应用程序和服务,提供统一的日志格式和标准接口。Syslog允许系统管理员集中收集、存储和分析...

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

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

    syslog4j-0.946.jar

    本文将详细介绍Syslog4j的核心功能和使用方法。 首先,理解Syslog协议至关重要。Syslog协议定义了一种标准化的方式,使得不同设备能够发送和接收日志信息,这些信息包括时间戳、优先级、源地址以及具体的日志消息。...

    python 实现简单的SYSLOG服务器,并写入MYSQL数据库.docx

    SYSLOG是一种广泛应用于网络设备和服务器系统中进行日志记录的标准协议。通过SYSLOG,设备可以将系统日志发送到专门的日志服务器上进行集中管理和分析,这对于故障排查和安全审计至关重要。SYSLOG消息通常包含以下几...

    SANGFOR_AD_V5.1_第三方Syslog日志服务器测试指导书.pdf

    本文档主要介绍了SANGFOR AD V5.1版本的第三方Syslog日志服务器测试指导书的配置指导文档,旨在帮助网络管理员、现场技术支持与维护人员和网络配置和维护的网络管理员更好地了解和使用SANGFOR AD设备的Syslog日志...

    syslog配置[参照].pdf

    本文将详细介绍syslog配置的相关知识,包括在类UNIX系统、Windows平台以及网络设备上的配置方法。 **一、syslog配置基础** 1. **syslog.conf文件配置** `/etc/syslog.conf`是类UNIX系统中的syslog配置文件,其...

    Python库 | cbc_syslog-1.0.1.tar.gz

    **Python库CBC Syslog介绍** `cbc_syslog`是一个基于Python的库,专门设计用于处理syslog协议。Syslog是一种广泛使用的网络日志记录协议,它允许系统和应用程序将日志消息发送到中央日志服务器,便于管理和分析。在...

    Syslog命令手册.pdf

    Syslog命令手册主要介绍了在IT领域中用于管理和监控系统日志的工具——Syslog协议及其相关配置命令。Syslog是一种广泛应用于各种设备,如路由器、交换机和其他网络设备的标准协议,用于收集和记录设备的日志信息。...

    3COM公司的FTP TFTP Syslog工具

    Syslog(系统日志)是一种网络标准,用于收集和记录来自不同网络设备的日志信息。3COM设备产生的Syslog消息包含了关于设备状态、错误、警告和其他操作事件的信息。Syslog服务器可以接收并集中管理这些日志,帮助管理...

    路由 SYSLOG设置

    通过以上介绍,我们可以看到Syslog在路由器中的重要作用及其基本配置方法。Cisco路由器提供了丰富的Syslog配置选项,使得网络管理员可以根据实际需求灵活地管理设备日志。合理利用这些配置,不仅可以提高网络维护...

    Linux-Syslog

    【Linux-Syslog.docx】文档可能详细介绍了如何配置和使用Syslog,包括安装步骤、配置示例、常用命令以及与其它工具(如Logrotate用于定期清理和备份日志,或者Nagios、Zabbix等监控系统集成Syslog)的配合使用。...

    D1-H_Tina_Linux_syslog_使用指南1

    Linux 系统日志服务(syslog)是一个用于收集、处理和存储系统及应用程序日志信息的标准服务。在Linux环境中,syslog对于监控系统状态、诊断问题和审计系统活动至关重要。本文档“D1-H Tina Linux syslog 使用指南1...

Global site tag (gtag.js) - Google Analytics