Skip to content

syslog

syslog服务

syslog是linux上的日志服务,目前很多 linux 发行版本已经使用 rsyslog 服务替换了 syslog 服务。系统各种日志通过syslog写入到指定的日志文件中。

syslog协议

syslog是syslog服务通过TCP或者UDP传送日志的协议,通常通过514端口通信。

最常见的是BSD格式的日志,还有IETF等协议

BSD格式的日期缺少时区与年份,虽然接收方通常可以根据其他信息完善。

IETF格式的结束标志不明确,在群晖日志中心处理时,如果使用TCP传送,需要以ASCII数字开头(代表长度)以空格结尾,后面再接标准IETF格式文本传输,以规避TCP粘包的问题。

以下是BSD协议的示例

<30>Oct 10 20:30:10 fedora auditd [1780]: The audit daemon is exiting

<30>是PRI部分,代表Priority(优先级),取值范围0~191

Oct 10 20:30:10 fedora 是HEADER(报头部分),代表时间与主机名

PRI部分是由Facility与Level组成的,六位二进制,上三位表示Facility,下三位表示Level。

Priority=(Facility <<3) | Level

<< 左移

| 或

Facility主要用于表示日志的来源

LOG_AUTHPRIV          security/authorization messages (private)
LOG_CRON              clock daemon (cron and at)
LOG_DAEMON            system daemons without separate facility value
LOG_FTP               ftp daemon
LOG_KERN              kernel messages (these can’t be generated from user processes)
LOG_LOCAL0 through LOG_LOCAL7      reserved for local use
LOG_LPR               line printer subsystem
LOG_MAIL              mail subsystem
LOG_NEWS              USENET news subsystem
LOG_SYSLOG            messages generated internally by syslogd(8)
LOG_USER (default)    generic user-level messages
LOG_UUCP              UUCP subsystem

Level通常表达日志的紧急程度

LOG_EMERG      system is unusable
LOG_ALERT      action must be taken immediately
LOG_CRIT       critical conditions
LOG_ERR        error conditions
LOG_WARNING    warning conditions
LOG_NOTICE     normal, but significant, condition
LOG_INFO       informational message
LOG_DEBUG      debug-level message

群晖保存数据格式

群晖支持三种模式接收日志

  1. BSD格式

    这个格式的日期缺少时区与年份,虽然接收方通常可以根据其他信息完善。

  2. IETF格式

    似乎因为结束标志不明确,在群晖日志中心处理时,如果使用TCP传送,需要以ASCII数字开头(代表长度)以空格结尾,后面再接标准IETF格式文本传输,以规避TCP粘包的问题。

  3. 自定义格式,在下面的规则参数填写@可以接收到收到的全部字符串,具体@匹配规则文档里面说需要根据syslog-ng的网页填写。可惜我没能读懂4

配置正确输入格式

template(name="ForwardFormat" type="list") {
constant(value="<")
property(name="pri")
constant(value=">")
property(name="timestamp" dateFormat="rfc3339")
constant(value=" ")
# property(name="hostname")
constant(value="101.33.239.181")
constant(value=" ")
property(name="syslogtag" position.from="1" position.to="32")
property(name="msg" spifno1stsp="on" )
property(name="msg")
}

配置加密(避免监听泄密)

 # certificate files - just CA for a client
 $DefaultNetstreamDriverCAFile /etc/rsyslog.d/ca.crt
 
 # set up the action
 $DefaultNetstreamDriver gtls 
 # use gtls netstream driver
 $ActionSendStreamDriverMode 1 
 # require TLS for the connection
 $ActionSendStreamDriverAuthMode anon