使用 syslog-ng `as is` 传输日志,不带时间戳和主机名等

Transferring logs using syslog-ng `as is` without timestamp and hostname etc

背景

  1. 机器上的 Apache 服务器 运行 并生成日志到 /var/log/httpd/error_log
  2. 使用 syslog-ng 将日志发送到端口 5140
  3. 最终它将被 kafka producer 消耗并发送到主题

设置

options {                                                                                                                             
    flush_lines (0);                                                                                                                
    time_reopen (10);                                                                                                               
    log_fifo_size (1000);                                                                                                          
    long_hostnames (off);                                                                                                           
    use_dns (no);                                                                                                                   
    use_fqdn (no);                                                                                                                  
    create_dirs (no);                                                                                                               
    keep_hostname (no);                                                                                                             
};

source s_apache2 {
    file("/var/log/httpd/error_log" flags(no-parse));
}


destination loghost {
    tcp("*.*.*.*" port(5140)); 
}

问题

  1. syslog-ngtimestamphostname 添加到不需要的日志数据中

    <13>Jan 10 11:01:03 hostname [Tue Jan 10 11:01:02 2017] [notice] Digest: generating secret for digest authentication ...
    <13>Jan 10 11:01:03 hostname [Tue Jan 10 11:01:02 2017] [notice] Digest: done
    <13>Jan 10 11:01:03 hostname [Tue Jan 10 11:01:02 2017] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.4.30 mod_ssl/2.2.15 OpenSSL/1.0.0-fips configured -- resuming normal operations
    
  2. 期望的输出(每个日志行 as is 来自 error_log 文件)

    [Tue Jan 10 11:01:02 2017] [notice] Digest: generating secret for digest authentication ...
    [Tue Jan 10 11:01:02 2017] [notice] Digest: done
    [Tue Jan 10 11:01:02 2017] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.4.30 mod_ssl/2.2.15 OpenSSL/1.0.0-fips configured -- resuming normal operations
    

平台

PS Syslog-ng to Kafka Integration :请​​让我知道是否有人尝试过这会使我的 java Kafka 生产者变得多余

当你在syslog-ng中使用flags(no-parse)选项时,那么syslog-ng不会尝试解析消息的不同字段,而是将所有内容放入MESSAGE字段传入的日志消息,并在系统日志前添加 header。要删除此 header,请在您的 syslog-ng 目标中使用模板:

template t_msg_only { template("${MSG}\n"); };
destination loghost {
tcp("*.*.*.*" port(5140) template(t_msg_only) ); 
}

要使用 syslog-ng 的 Kafka 目的地,您需要更新版本的 syslog-ng(我推荐 3.8 或 3.9)。 Peter Czanik has written a detailed post about installing new syslog-ng rpm for CentOS.