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

java syslog解析_syslog日志格式解析相关推荐

  1. Elasticsearch:ingest pipeline 使用示例 - 解析常用日志格式

    在本示例教程中,你将在索引之前使用 ingest pipeline 以通用日志格式解析服务器日志. 在开始之前,请检查摄取管道的先决条件. 你要解析的日志类似于以下内容: 127.0.0.1 user ...

  2. mysql 日志mixed模式_[MySQL binlog]彻底解析Mixed日志格式的binlog

    MySQL binlog3种格式,row,mixed,statement. 解析工作 mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.0001 ...

  3. java的Duration的时间格式解析,ISO-8601持续时间格式

    一.前言 在配置springboot的配置的时候突然看到时间是Duration来配置的,上源码看到这样一个方法 /*** Obtains a {@code Duration} from a text ...

  4. Python 解析log日志

    Python 解析log日志 软件环境 环境搭建 待解析log日志格式 log解析脚本 解析后文本格式 软件环境 软件 版本 作用 Ubuntu 20.04 操作系统 python 3.8.10 py ...

  5. CASIA手写体数据集HWDB1.0 gnt和dgrl格式解析

    目录 引言 Gnt格式解析代码 dgrl格式解析代码 相关资料 引言 最近用到了CASIA这个手写体数据集,但是HWDB1.0~1.2系列其存储格式为gnt 虽说官网也给了读取方式,但是仍然具有一定门 ...

  6. 快速了解日志概貌,详细解读13种日志模式解析算法

    云智慧 AIOps 社区是由云智慧发起,针对运维业务场景,提供算法.算力.数据集整体的服务体系及智能运维业务场景的解决方案交流社区.该社区致力于传播 AIOps 技术,旨在与各行业客户.用户.研究者和 ...

  7. python解析log文件_python解析基于xml格式的日志文件

    大家中午好,由于过年一直还没回到状态,好久没分享一波小知识了,今天,继续给大家分享一波Python解析日志的小脚本. 首先,同样的先看看日志是个啥样. 都是xml格式的,是不是看着就头晕了??没事,我 ...

  8. java 解析日期格式_日期/时间格式/解析,Java 8样式

    java 解析日期格式 自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期 ...

  9. 日期/时间格式/解析,Java 8样式

    自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期和时间. 在这段时间内, ...

最新文章

  1. linux 终端什么意思,请问我的终端显示的是什么意思
  2. python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档...
  3. 关于大型网站技术演进的思考(一)--存储的瓶颈(上)
  4. 【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )
  5. 项目的包结构 mybatis三剑客
  6. Python——生成一个大文件ips.txt,要求1200行 ,每行随机为172.25.254.0/24段的ip(京东二面笔试题)
  7. 【C#每日一帖】【转】提高编码效率的一些经验
  8. ps制作公章教程,沿着圆圈打字,斑驳效果
  9. 添加五笔输入法(默认的)windows sever 2012 r2
  10. [单片机框架][bsp层][N32G4FR][bsp_flash] flash配置和使用
  11. 个性化PageRank算法
  12. waf指纹识别工具WAFW00F的使用
  13. IDE——jupyter的安装与卸载
  14. oracle12c 兼容,12c(oracle12c兼容11g吗)
  15. 小程序云服务器机型选择,小程序云服务器机型选择
  16. Google log 日志文件
  17. 深入浅出理解reedsolomon库数据冗余算法原理和具体实现源码分析
  18. jmeter-while控制器使用总结
  19. 打破界限,获得新生——观电影《云图》有感
  20. python分析红楼梦出现的虚词词频统计_用Python分析红楼梦,见证贾府的兴衰

热门文章

  1. python:冒泡排序(Bubble Sort)超详细教程!
  2. c语言htons函数用法,在內核中C語言實現htons()函數
  3. 李彦宏谈未来搜索是怎么回事?带你近距离了解大佬眼中的世界
  4. 软件编程_Python_cxfreeze
  5. ​一套吊到不行的开源自动化测试平台!
  6. TIA博途中将硬件目录更改为中文的具体方法演示
  7. JDBC 望舒客栈项目 万字详解
  8. php jcrop,我应该如何使用jcrop在客户端裁剪图像并上传?
  9. 物联网行业数字化转型CRM解决方案
  10. Android录音AudioRecord,AudioTrack学习