插件窝 干货文章 Linux syslog支持哪些输出格式

Linux syslog支持哪些输出格式

示例 Timestamp 结构化 配置 688    来源:    2025-05-08

Linux syslog(如rsyslogsyslog-ng等)支持多种日志输出格式,以下是主要格式及配置方法:


1. 传统格式 (RFC3164)

  • 特点:旧版标准,格式简单但不够结构化。
  • 示例

    <PRI>Timestamp Hostname Tag: Message
    
    • PRI:优先级(Facility + Severity计算得出)
    • Timestamp:本地时间(可能不带时区)
    • Tag:进程名(如sshd
  • 配置示例(rsyslog):

    $template TraditionalFormat,"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%\n"
    

2. 结构化格式 (RFC5424)

  • 特点:新版标准,支持结构化数据(SD),包含时区、更精确的时间戳等。
  • 示例

    <PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROCID MSGID [SD] MSG
    
    • VERSION:固定为1
    • SD:结构化数据(如[exampleSDID@32473 key="value"]
  • 配置示例(rsyslog):

    $template RFC5424Format,"<%PRI%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n"
    

3. JSON格式

  • 特点:机器可读性强,便于日志分析工具(如ELK)处理。
  • 示例

    {
    "timestamp": "2023-10-01T12:00:00Z",
    "host": "server1",
    "severity": "error",
    "message": "Connection refused"
    }
    
  • 配置方法

    • rsyslog(需安装mmjsonparse模块):
    module(load="mmjsonparse")
    $template JSONFormat,"%msg:1:2:$!json%\\n"
    
    • syslog-ng
    destination d_json {
      file("/var/log/json.log" template("$(format-json --key ISODATE)\n"));
    }
    

4. CSV格式

  • 特点:适合导入数据库或表格工具。
  • 示例

    "2023-10-01T12:00:00Z","server1","error","Connection refused"
    
  • 配置示例(rsyslog):

    $template CSVFormat,"%TIMESTAMP:::date-rfc3339%,%HOSTNAME%,%syslogseverity-text%,%msg%\n"
    

5. 自定义模板

  • 支持用户根据需求自由组合字段: bash $template MyFormat,"%TIMESTAMP% %HOSTNAME% %programname% %msg% [Priority:%PRI%]\n"

6. 输出到数据库

  • 支持直接写入MySQL、PostgreSQL等,通常通过插件实现:
    • rsyslog配置示例(MySQL): bash module(load="ommysql") action(type="ommysql" server="localhost" db="logs" uid="user" pwd="pass" template="MyFormat")

配置验证与生效

  1. 编辑配置文件(如/etc/rsyslog.conf/etc/syslog-ng/syslog-ng.conf)。
  2. 重载服务: bash systemctl restart rsyslog

注意事项

  • 时区问题:建议使用date-rfc3339(RFC5424)确保带时区的时间戳。
  • 性能影响:JSON/数据库输出可能增加CPU负载,需权衡需求。
  • 日志轮转:配合logrotate管理日志文件大小。

根据实际需求选择合适的格式,结构化日志(RFC5424/JSON)推荐用于现代分布式系统。