大多数Unix程序员都习惯于定义的接口syslog.h,并且许多实现(例如glibc)对发送给它的syslog消息的大小没有实际限制,但是应用程序监听通常有限制/dev/log.
我想知道是否有人知道如何找到syslog的最大消息大小?或者一些关于实际(或通常)限制的好文档?
编辑:
到目前为止,我已经在这个主题上找到了这些RFC:
Tim*_*ost 10
请记住,syslog是一种协议,这意味着它设置了最小值并提出了建议.我找不到这个来源,但我认为应该支持的最小长度是1k,建议使用64k.
每个实现都可以自由地执行他们想要的操作,即如果您想要最大16MB并且正在编写系统日志服务器,那么您可以自由地执行此操作.我不确定你为什么会,但你可以.
据我所知,没有标准的programatic方法来确定这一点,因此将信息保持在1k以下对于可移植性来说是理想的.
更新
用户MuMind在评论中指出rsyslog截断为2097个字符,包括日志类型/时间戳.由于它是一种广泛使用的协议实现,这加强了长度应保持在1k - 1.5k之间,以实现最大的便携性.
老实说,超过这个的唯一原因是记录额外的调试/崩溃输出; 这是很多更好地把在某个地方/var/log,而不是,只是表明你做了这么说话的syslog时(当然,也有情景时,你可以没有,但很多图书馆都有"尽力而为"伐木建在处理这个) .
对于“旧”(RFC 3164)系统日志,系统日志数据报的有效负载(包括编码的优先级和时间戳)的最大长度为 1024 个八位字节,根据第 4.1 节,并且没有最小长度,但应丢弃空的系统日志数据包。此外,不应按照第 6.1 节转发更长的数据报。(如果中继添加会增加长度的时间戳信息,则它们必须截断数据包;第 4.3.2 节。)
这真的很旧,没有人真正遵循这一点,但如果您使用非常旧的系统,请记住这一点。
现代系统遵循(或多或少)RFC 5424,其中第 6.1 节将每个人必须能够处理的最小大小设置为 480 个八位字节,建议每个人至少可以处理 2048 个八位字节,并且没有最大值。
一个非常常用的传输是 UDP,在 RFC 5426 中定义,其中第 3.2 节详细介绍了消息大小。允许的最大值与您可以通过网络获得的数据报一样大(这将略低于 64k,具体取决于)。但是,IPv4 所需的最小值是 480 个八位字节,系统最好至少接受 2048 个八位字节。不过,还有一些关于 MTU 等的进一步内容,所以一般来说,如果您不确定要处理的系统,您可能希望将大小限制在路径的最低 MTU 以下,当包括所有标题等;如果您不确定,大约 1300 个八位字节将是一个很好的猜测。
不过,这仅适用于 UDP;通过 TLS 链接接收器必须能够处理至少 2048 个八位字节消息,最好是 8192 个八位字节(RFC 5425 第 4.3.1 节。但当然你需要小心这一点,因为如果消息碰巧稍后通过 UDP 传输转发, UDP 长度适用。
Rsyslog(抱歉,Ranier,但“正确的”全大写形式令人分心)可能是当今最流行的 syslog 守护程序。(即使使用 systemd/journald 的系统仍然使用 rsyslogd 进行网络接收和传输 syslog 格式的日志消息。)
RsyslogmaxMessageSize在 2011 年的 6.3.4 版本中添加了设置程序许多区域使用的最大消息大小(配置参数)的功能,此时默认值设置为 8096 个八位字节,此后一直保持不变。
| 归档时间: |
|
| 查看次数: |
21556 次 |
| 最近记录: |