syslog RFC5424协议详解

article/2025/8/23 19:53:39

官方说明

一个很不错的rfc文档下载网址。

Document Retrieval » RFC Editor

在这里插入图片描述

RFC 5424: The Syslog Protocol

6.  Syslog Message FormatThe syslog message has the following ABNF [RFC5234] definition:SYSLOG-MSG      = HEADER SP STRUCTURED-DATA [SP MSG]HEADER          = PRI VERSION SP TIMESTAMP SP HOSTNAMESP APP-NAME SP PROCID SP MSGIDPRI             = "<" PRIVAL ">"PRIVAL          = 1*3DIGIT ; range 0 .. 191VERSION         = NONZERO-DIGIT 0*2DIGITHOSTNAME        = NILVALUE / 1*255PRINTUSASCIIAPP-NAME        = NILVALUE / 1*48PRINTUSASCIIPROCID          = NILVALUE / 1*128PRINTUSASCIIMSGID           = NILVALUE / 1*32PRINTUSASCIITIMESTAMP       = NILVALUE / FULL-DATE "T" FULL-TIMEFULL-DATE       = DATE-FULLYEAR "-" DATE-MONTH "-" DATE-MDAYDATE-FULLYEAR   = 4DIGITDATE-MONTH      = 2DIGIT  ; 01-12DATE-MDAY       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on; month/yearFULL-TIME       = PARTIAL-TIME TIME-OFFSETPARTIAL-TIME    = TIME-HOUR ":" TIME-MINUTE ":" TIME-SECOND[TIME-SECFRAC]TIME-HOUR       = 2DIGIT  ; 00-23TIME-MINUTE     = 2DIGIT  ; 00-59TIME-SECOND     = 2DIGIT  ; 00-59TIME-SECFRAC    = "." 1*6DIGITTIME-OFFSET     = "Z" / TIME-NUMOFFSETTIME-NUMOFFSET  = ("+" / "-") TIME-HOUR ":" TIME-MINUTESTRUCTURED-DATA = NILVALUE / 1*SD-ELEMENTSD-ELEMENT      = "[" SD-ID *(SP SD-PARAM) "]"SD-PARAM        = PARAM-NAME "=" %d34 PARAM-VALUE %d34SD-ID           = SD-NAMEPARAM-NAME      = SD-NAMEPARAM-VALUE     = UTF-8-STRING ; characters '"', '\' and; ']' MUST be escaped.SD-NAME         = 1*32PRINTUSASCII; except '=', SP, ']', %d34 (")MSG             = MSG-ANY / MSG-UTF8MSG-ANY         = *OCTET ; not starting with BOMMSG-UTF8        = BOM UTF-8-STRINGBOM             = %xEF.BB.BF

中文翻译

SP表示空格(space),字段为空均用 - 进行填充。

# 一条信息的构成
SYSLOG-MSG = HEADER SP STRUCTURED-DATA [SP MSG]  # 最后的MSG是可省略的
# HEADER = 优先级 版本 空格 时间戳 空格 主机名 空格 应用名 空格 进程id 空格 信息id
HEADER = PRI VERSION SP TIMESTAMP SP HOSTNAME
SP APP-NAME SP PROCID SP MSGID
# PRI优先级
PRI = "<" PRIVAL ">" # 优先级 <0>
# PRI优先级的值
PRIVAL = 1*3DIGIT ; range 0 .. 191 # 3位数字, 0到191
# syslog版本号
VERSION = NONZERO-DIGIT 0*2DIGIT # 默认为 RFC5424默认为1
# 主机名
HOSTNAME = NILVALUE / 1*255PRINTUSASCII # - 或 255位可打印ASCII值
# 应用名
APP-NAME = NILVALUE / 1*48PRINTUSASCII # - 或 48位可打印ASCII值
# 进程ID
PROCID = NILVALUE / 1*128PRINTUSASCII # - 或 128位可打印ASCII值
# 信息ID
MSGID = NILVALUE / 1*32PRINTUSASCII # - 或 32位可打印ASCII值
# 时间戳
TIMESTAMP = NILVALUE / FULL-DATE "T" FULL-TIME # - 或 "0000-00-00"
# 完整日期格式
FULL-DATE = DATE-FULLYEAR "-" DATE-MONTH "-" DATE-MDAY # "0000-00-00"
# 年
DATE-FULLYEAR = 4DIGIT # 四位数字
# 月
DATE-MONTH = 2DIGIT ; 01-12 # 两位数字
# 日
DATE-MDAY = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on month/year
# 完整时间(带时区)
FULL-TIME = PARTIAL-TIME TIME-OFFSET
# 时间(不带时区)
PARTIAL-TIME = TIME-HOUR ":" TIME-MINUTE ":" TIME-SECOND # 23:59:59
[TIME-SECFRAC]
# 小时
TIME-HOUR = 2DIGIT ; 00-23 # 两位数字
# 分
TIME-MINUTE = 2DIGIT ; 00-59 # 两位数字
# 秒
TIME-SECOND = 2DIGIT ; 00-59 # 两位数字
# 时间的小数部分
TIME-SECFRAC = "." 1*6DIGIT # 6位数字
TIME-OFFSET = "Z" / TIME-NUMOFFSET # 相对于标准时区的偏移, "Z" 或 +/- 23:59
# 相对于便准时区的偏移
TIME-NUMOFFSET = ("+" / "-") TIME-HOUR ":" TIME-MINUTE # +/- 23:59
# 结构化数据
STRUCTURED-DATA = NILVALUE / 1*SD-ELEMENT # - 或 SD-ELEMENT
SD-ELEMENT = "[" SD-ID *(SP SD-PARAM) "]" # [SD-ID*( PARAM-NAME="PARAM-VALUE")]
SD-PARAM = PARAM-NAME "=" %d34 PARAM-VALUE %d34 # PARAM-NAME="PARAM-VALUE"
SD-ID = SD-NAME # SD-ID
PARAM-NAME = SD-NAME # 参数名
PARAM-VALUE = UTF-8-STRING # utf-8字符, '"', '\' 和 ']'必须被转义
SD-NAME = 1*32PRINTUSASCII # 1到32位可打印ascii值,除了'=',空格, ']', 双引号(")
MSG = MSG-ANY / MSG-UTF8 # 信息
MSG-ANY = *OCTET ; not starting with BOM # 八进制字符串 不以BOM开头
MSG-UTF8 = BOM UTF-8-STRING # utf-8格式字符串
BOM = %xEF.BB.BF # 表明编码方式,以 EF BB BF开头表明utf-8编码
UTF-8-STRING = *OCTET # RFC 3629规定的字符
OCTET = %d00-255 # ascii
SP = %d32 # 空格
PRINTUSASCII = %d33-126 # ascii值的33-126,即数字、大小写字母、标点符号
NONZERO-DIGIT = %d49-57 # ascii的49-57
DIGIT = %d48 / NONZERO-DIGIT # ascii的48-57
NILVALUE = "-" # 无对应值

名称解释

PRI(优先级)

优先级使用"<“和”>"括起来,中间是1到3位数字,优先PRIVAL是具体的数值,由设备编号和日志等级两部份通过计算获得,计算公式为:
PRIVAL = Facility * 8 + severity
例如"local use 4"信息(Facility=20) 的日志级别是Notice (Severity=5),那么优先级是20 * 8 + 5 = 165

# 设备编号Numerical             FacilityCode0             kernel messages1             user-level messages2             mail system3             system daemons4             security/authorization messages5             messages generated internally by syslogd6             line printer subsystem7             network news subsystem8             UUCP subsystem9             clock daemon10             security/authorization messages11             FTP daemon12             NTP subsystem13             log audit14             log alert15             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)
# 日志等级Numerical         SeverityCode0       Emergency: system is unusable1       Alert: action must be taken immediately2       Critical: critical conditions3       Error: error conditions4       Warning: warning conditions5       Notice: normal but significant condition6       Informational: informational messages7       Debug: debug-level messages

VERSION(版本号)

VERSION指的是Syslog协议的版本,RFC5424用的是版本号是"1"。

TIMESTAMP(时间戳)

  • “T”、"Z"字母必须大写
  • "T"是必需的
  • 不能使用闰秒
  • 如果无法找到时间戳,要使用"-"代替
# 例1
1985-04-12T23:20:50.52Z
# 例2
1985-04-12T19:20:50.52-04:00
# 例3
2003-10-11T22:14:15.003Z
# 例4
2003-08-24T05:14:15.000003-07:00
# 无效的时间戳,小数点后只能保留6位
2003-08-24T05:14:15.000000003-07:00

HOSTNAME(主机名)

主机名的写法应当优先选用下面的写法:

  1. FQDN 完全合格域名/全称域名
  2. Static IP address 静态IP
  3. hostname 主机名
  4. Dynamic IP address 动态ip
  5. the NILVALUE “-”

APP-NAME(应用名)

APP-NAME用于识别产生信息的设备或应用,如果无法得知生成设备或应用,则使用"-"代替。

PROID(进程ID)

PROID的值一般为进程名称或进程ID,如果无法得知,则使用"-"代替。PROID常用于分析尽日志生成进程的连续性,但并不是十分可靠,因为重启了进程之后可能还会分配到与原来相同的ID。

MSGID(消息ID)

MSGID用于识别信息的类型,例如"TCPIN"和"TCPOUT"分别代表TCP数据的流入和流出。如果无法得知类型则使用"-"代替。

STRUCTURED-DATA(结构化数据)

STRUCTURED-DATA提供了一种记录被良好定义易于被解析的数据的数据格式。例如它可以用于记录系统的元信息或应用相关的信息。
STRUCTURED-DATA可以包含零到多条结构化数据,每条结构化数据也被称作"SD-ELEMENT",如果包含0条信息,则必须使用"-"作为占位符。

  1. SD-ELEMENT由名字和键值对参数组成,名字被称作"SD-ID",键值对被称作"SD-PARAM"。
  2. SD-ID在一条信息中必须唯一,用于识别SD-ELEMENT的类型和目的
  3. SD-PARAM由PARAM-NAME和PARAM-VALUE组成,IANA定义了所有可用的SD-ID和PARAM
# 有效例子1
[exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"]
# 有效例子2:两个SD-ELEMENT
[exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"]    [examplePriority@32473 class="high"]
# 无效例子:两个SD-ELEMENT之间不能用空格
[exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"][examplePriority@32473 class="high"]
# 无效例子:左括号之后不能有空格
[ exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"][examplePriority@32473 class="high"]
# 有效例子
[sigSig ver="1" rsID="1234" ... signature="..."]

MSG(消息)

MSG没有固定的格式,应当使用unicode字符集,utf-8的编码方式。

实例

"""
Example1:
<34>1 2019-07-11T22:14:15.003Z aliyun.example.com ali - ID47 - BOM'su root' failed for lonvick on /dev/pts/8
"""
PRI -- 34
VERSION -- 1
TIMESTAMP -- 2019-07-11T22:14:15.003Z
HOSTNAME -- aliyun.example.com
APP-NAME -- ali
PROCID -- 无
MSGID -- ID47
MESSAGE -- 'su root' failed for lonvick on /dev/pts/8
"""
Example2:
<165>1 2019-07-11T22:14:15.000003-07:00 192.0.2.1 myproc 8710 - - %% It's time to make the do-nuts.
"""
PRI -- 165
VERSION -- 1
TIMESTAMP -- 2019-07-11T05:14:15.000003-07:00
HOSTNAME -- 192.0.2.1
APP-NAME -- myproc
PROCID -- 8710
STRUCTURED-DATA -- “-”
MSGID -- “-”
MESSAGE -- "%% It's time to make the do-nuts."
"""
Example3: - with STRUCTURED-DATA
<165>1 2019-07-11T22:14:15.003Z aliyun.example.comevntslog - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] BOMAn applicationevent log entry...
"""
PRI -- 165
VERSION -- 1
TIMESTAMP -- 2019-07-11T22:14:15.003Z
HOSTNAME -- aliyun.example.com
APP-NAME -- evntslog
PROCID -- "-"
MSGID -- ID47
STRUCTURED-DATA -- [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"]
MESSAGE -- An application event log entry...

报文分析

测试命令

logger -t hello -p "local7.info" "cwr test"
参数说明:
-t TAG  Log using the specified tag (defaults to user name)
-p PRIO Priority (numeric or facility.level pair)

在这里插入图片描述
在这里插入图片描述

红色 PRI

黄色 版本号

绿色 时间戳(注意必须是rfc3339时间标准,rsyslog可以使用%TIMESTAMP:::date-rfc3339%)

蓝色 主机名

紫色 应用名(简单通过logger来模拟一个应用名进行测试)

棕色 进程ID,消息ID和结构化数据(没有在实际进程中调用syslog接口发送,因此进程号字段缺省为空,用-填充,其他几个字段也一样。logger默认调用syslog接口发送,因为syslog使用的是旧的协议3164,因此只填充MSG字段。)

灰色 MSG

参考资料

RFC 5424: The Syslog Protocol

Syslog协议日志格式翻译 - zhangjpn - 博客园

解析Syslog标准格式数据

syslog协议解析源码实现及Wireshark抓包分析_chen1415886044的博客-CSDN博客_syslog报文解析


http://chatgpt.dhexx.cn/article/6udR4wkn.shtml

相关文章

kiwi syslog mysql_KIWI Syslog配置

默认地,kiwi使用UDP 514端口接收日志数据,安装成功后即可接收日志 使用命令netstat –ano查看服务器监听状态,如果服务没起来,则重新启动服务Kiwi Syslog Daemon 任务:把当天的日志保存在G:\event,历史日志保存在G:\eventold,自动删除1一个月前的日志记录 第一步:新建规…

oracle 发syslog,Syslog转发管理

Syslog转发管理 网络设备会生成各种事件,这些事件在本地记录,管理员可以在其中查看和分析事件。但是,如果您的网络托管大量设备,则从这些设备中的每一个收集事件日志将既耗时又不切实际。 Syslog或系统日志记录协议是一种标准协议,可通过将系统日志或事件消息发送到中央sy…

syslog watcher syslog4j

1.下载syslog watcher SyslogWatcherSetup-5.2.3.msihttps://www.aliyundrive.com/s/8C6Cw7RuyUV2.设置编码 3.java&#xff1a; <dependency><groupId>org.syslog4j</groupId><artifactId>syslog4j</artifactId><version>0.9.46</ve…

python syslog

最近在写一些命令行守护程序&#xff0c;类似于 Linux 下的一些常运行的程序&#xff0c;除了用到一些常见的IO 以及进程间通信的内容之外&#xff0c;还尝试了一下 Unix 系列的 syslog&#xff0c;在尝试过程中&#xff0c;发现 Python 已经在 logging 模块中很方便得集成了 s…

linux syslog

linux syslog 1. syslog 定义1.1 RFC3195 2. syslog 组成3. syslog配置3.1 3CD 配置syslog 日志服务器 4. syslog api4.1. c api 代码示例&#xff1a;4.2 syslog 例子2&#xff1a; 1. syslog 定义 在Unix类操作系统上&#xff0c;syslog广泛应用于系统日志。syslog日志消息既…

Syslog 教程:工作原理、示例、最佳实践等

Syslog 是用于从各种网络设备以特定格式发送和接收通知消息的标准。这些消息包括时间戳、事件消息、严重性、主机 IP 地址、诊断等。就其内置的严重性级别而言&#xff0c;它可以传达 0 级、紧急、5 级、警告、系统不稳定、严重和 6 级和 7 级&#xff08;信息和调试&#xff0…

关于fidder

fidder教程 https://www.cnblogs.com/R-bear/p/7508133.html fidder抓包工具总结 https://www.cnblogs.com/yyhh/p/5140852.html 从别人那里截了几张图。觉得写的挺好的&#xff0c;保存下来&#xff0c;日后复看。

Python fidder的简单实用

Fidder 对中间数据进行拷贝 然后再发送给服务器 Winconfig->勾选IE->浏览IE->一点一拖看数据(选项卡定位到composer)

Fidder下载安装

一、登录Fidder官网&#xff1a;https://www.telerik.com/fiddler 二、在Fidder官网页点击下载 三、输入信息&#xff0c;点击下载windows版 四、对于弹出的Fidder可执行文件&#xff0c;点击“保存文件”进行下载 五、执行下载好的Fidder可执行程序&#xff0c;在弹出的条款…

Fidder显示抓取IP地址

1.打开fiddler, 快捷键CtrlR 或者 菜单->Rules->Customize Rules…&#xff0c;然后在CustomRules.js文件里CtrlF查找字符串&#xff1a;static function Main()&#xff0c;然后添加一行代码即可显示IP&#xff0c;代码如下&#xff1a; FiddlerObject.UI.lvSessions.…

学习Fidder和willow

自学fidder和willow Fidder是什么 一种Web调试工具可以记录所有客户端和服务器的http和https请求允许监视、设置断点、修改输入输出数据其包含了一个强大的基于事件脚本的子系统&#xff0c;并且能使用.net语言进行扩展 Fidder的工作原理 Fiddler是以代理web服务器的形式工…

fidder classic 界面介绍

界面划分 开始抓包 &#xff08;1&#xff09;默认情况下都是开启的&#xff0c;点击下图可以关闭或开启抓包。 &#xff08;2&#xff09;点击“file”----“capture traffic”也可以开始抓包 菜单栏 重要的菜单栏 reset script 重置你修改的脚本&#xff1b;在rules里&…

Fidder下抓取https

1、首先需要手机连接上Fiddler代理&#xff0c;而Fiddler默认是不允许其他设备进行连接的&#xff0c;点击 Tools > Options...&#xff0c;在 Connections 面板选中 Allow remote computers to connect 允许其他设备连接 点击 Tools > Options...&#xff0c;在 HTTPS 面…

fidder使用

前言 本文会对Fidder这款工具的一些重要功能&#xff0c;进行详细讲解&#xff0c;带大家进入Fidder的世界&#xff0c;本文会让你明白&#xff0c;Fidder不仅是一个抓包分析工具&#xff0c;也是一个请求发送工具&#xff0c;更加可以当作为Mock Server使用&#xff0c;而且可…

Fidder应用(一)

Fiddler调式使用(一)深入研究 阅读目录 Fiddler的基本概念如何安装Fiddler了解下Fiddler用户界面理解不同图标和颜色的含义web session的常用的快捷键了解web Session上下文菜单Fiddler如何捕获firefox中的会话Fiddler如何捕获Https会话Fiddler的HTTP统计视图移动开发如何使用…

Fidder教程

一.Fiddler的基本介绍 Fiddler的官方网站:http://www.telerik.com/fiddler Fiddler官方网站提供了大量的帮助文档和视频教程,学习Fiddler的最好资料 Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出…

fidder使用教程(一)

目录 一、抓包原理 二、Fiddler截获HTTP包用处 三、页面介绍 四、实际操作讲解 五、Fidder设置过滤&#xff08;抓取指定服务器地址的数据&#xff09; 六、web测试--弱网环境 七、Fiddler模拟接口测试&#xff08;自定义请求&#xff09; Fiddler打断点修改接口请求数…

【fidder】fidder工具的简单使用

文章目录 1、初识fidder1.1、fidder简介1.2、工作原理 2、理解http协议2.1、http协议2.2、http请求报文2.3.1、请求方法2.3.2、URL2.3.3、请求头部 2.3、http响应报文2.3.1、状态码2.3.2、响应头 3、fidder工具详解3.1、工具栏基本使用3.2、会话列表&#xff08;session list&a…

Fiddler的安装和使用教程(详细)

一、安装 1、fiddler工具下载网址&#xff1a;http://www.telerik.com/download/fiddler。 2、运行 FiddlerSetup.exe一键完成安装。 3、安装成功后点击关闭按钮&#xff0c;所选路径下多出一个Fiddler文件夹 4、运行fiddler.exe。 二、Fiddler的配置 1、Fiddler的抓包原理 Fi…

网络层(1.网络层提供的两种服务)

网络层应该提供怎样的服务&#xff0c;是面向“连接”还是“无连接”&#xff0c;本质上是在互联网通信中&#xff0c;可靠交付应该由谁来负责&#xff0c;是网络还是端系统。 1. 面向连接&#xff0c;让网络负责可靠交付 这种观点是借助电信网的成功经验&#xff0c;让网络负…