Syslog协议-RFC5424 + RFC3164

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Syslog协议-RFC5424 + RFC3164相关的知识,希望对你有一定的参考价值。

参考技术A RFC5424协议手册地址: https://tools.ietf.org/html/rfc5424
RFC3164协议手册地址: https://tools.ietf.org/html/rfc3164

Syslog常被用来日志等数据的传输协议,数据格式遵循规范主要有RFC3164,RFC5424;
RFC5424 相比 RFC3164 主要是数据格式的不同,RFC3164相对来说格式较为简单,能适应大部分使用场景,但是已废弃,RFC5424已作为Syslog的业界规范;下面就来分别讲讲两个协议;

RFC 5424 规定消息最大长度为2048个字节,如果收到Syslog报文,超过这个长度,需要注意截断或者丢弃;

PRI为消息优先级,用"<"和">"括起来。PRI由两部分组成:

计算方式为:PRI = Facility * 8 + severity;(例如 165表示一条级别为Notice的local4消息)

Facility取值范围及含义如下:

Severity取值范围含义:

上述一般对应于日志的8种级别;

版本用来表示Syslog协议的版本,RFC5424的版本号为“1”;

时间戳格式为:yyyy-mm-ddTHH:MM:SS.xxxxxx+/-HH:MM

有以下几个要求:

举例如下:

hostname标识发送syslog消息的源主机;优先选用如下几种写法:

用于识别产生消息的设备或应用,找不到用"-"代替;

进程名称或进程ID,得不到用"-"代替;ProcId常用于分析日志生成进程的连续性,但不做可靠性保证,比如进程重启还是可能会分到一样的进程ID;

标识消息类型。例如TCPIN、TCPOUT分别代表TCP数据的流入或流出;如果无法获取数据类型,用"-"代替。 MSGID可根据数据类型用于数据过滤;

结构化数据;提供了一种记录被良好定义易于被解析的数据的数据格式;可用于记录系统的元信息或应用相关的信息;

可以包含多条结构化数据——"SD-ELEMENT",如果没有则用"-"代替;

一条结构化数据SD-ELEMENT包含名字(SD-ID)以及多条键值对(SD-PARAM);

一条消息种必须唯一,用于识别SD-ELEMENT的类型和目的;
有两种格式:

值得一提的是,32473 在IANA上已被注册作为文档中的举例数字,无法被使用;

键值对;除了自定义的SD-ID外,所有的SD-PARAM也是受限的,在IANA上定义了所有的PARAM-NAME;PARAM-NAME有效范围为一个指定的SD-ID;

举例如下:

消息体,无格式要求;如果Syslog应用用UTF-8编码,必须以BOM开头;

所有规范的SD-ID都在IANA上有定义。

用来阐述系统时间的概念;

时间信息是否确定,如果确定tzKnown="1";否则tzKnown="0";

标识时间是否是NTP同步的;如果是,则值为1;否则为0;

描述消息源;

....

RFC3164推荐参照(翻译的很全):
https://www.jianshu.com/p/8656fc85e497

以上是关于Syslog协议-RFC5424 + RFC3164的主要内容,如果未能解决你的问题,请参考以下文章

log4j2 和 syslog,使用 RFC5424 格式不显示日志消息的可变参数部分

符合 RFC 5424 的 Logback TCP 系统日志

IETF syslog 输入到 fluentd

如何使用 java 在 linux 上编写 Syslog

Docker 标记与 RFC 5424 中的哪些字段相关

高效编辑大文件