Syslog RFC5424与RFC6587的差异及RFC6587日志样例咨询
RFC5424与RFC6587的核心区别(Syslog发送场景)
两者不属于同一维度的标准,核心差异如下:
- 定位不同:RFC5424是Syslog消息内容格式标准,定义单条日志的字段结构;RFC6587是Syslog over TCP的传输帧标准,解决TCP流无消息边界导致的粘包问题
- 适用范围不同:RFC5424可用于UDP、TCP、TLS所有Syslog传输场景;RFC6587仅适用于TCP/TLS传输场景,不可用于UDP
- 功能边界不同:RFC5424不涉及传输层的消息拆分、拼接逻辑;RFC6587不关心封装的日志内容是RFC5424格式还是旧的RFC3164格式,仅负责定义消息的边界标识规则
- 边界实现方式不同:RFC5424本身无边界处理能力,UDP传输依赖数据报天然边界,TCP传输无封装时会出现粘包;RFC6587提供两种边界实现:长度前缀法(推荐生产使用)、非转义换行分隔法(兼容性优先场景使用)
RFC6587格式标准样例
生产环境最常用长度前缀法封装,格式为[十进制消息长度] + [单个空格] + [完整Syslog消息],样例如下:
185 <34>1 2024-05-20T14:30:00.123Z web-server01 nginx 12345 request-001 [example@32473 method="GET" status="200" path="/index.html"] Client 192.168.1.100 requested resource successfully, response time 12ms
样例说明:
- 开头的
185为十进制数字,代表空格后的整条Syslog消息总字节数为185 - 长度前缀后必须跟1个半角空格作为分隔符
- 空格后的内容为符合RFC5424标准的Syslog消息,也可替换为RFC3164等其他Syslog格式内容,RFC6587无强制要求
如果使用换行分隔法,无需加长度前缀,直接在每条完整Syslog消息末尾添加1个\n(ASCII 0x0A)作为分隔即可,仅要求消息内容本身不包含未转义的换行符。
内容的提问来源于stack exchange,提问作者Tom Neeman
相关产品推荐
相关产品推荐

