syslog-ng

来自 ArchWiki

syslog-ng 是一个 syslog 实现,它可以从来源获取日志消息,并根据强大的过滤器指令将它们转发到目的地。尽管它的起源是 syslog,但它是一个相当通用的日志管理工具,能够消费结构化和非结构化日志消息,并在必要时解析和转换它们。

注意: 如果您只需要本地日志,使用 systemd 的 journal,则不需要 syslog-ng。

概览

syslog-ng 从定义的“来源”接收传入的日志消息,并根据强大的 过滤器 指令将它们转发到相应的 目的地。在一个典型的简单设置中,syslog-ng 将从三个来源读取消息

  1. 默认的 /dev/log 设备,大多数日志都发送到这里
  2. syslog-ng “内部”日志消息
  3. /proc/kmsg 内核消息

来源使用“source”指令定义。这些传入的消息然后根据定义的过滤器(“filter”关键字)进行过滤,即根据始发程序或日志级别,并发送到相应的“destination”。

目的地包括日志文件(例如 /var/log/messages.log)、在控制台上打印消息和远程服务器。

关键功能是 log。此功能定义哪些过滤器应应用于特定来源,以及结果消息应发送到哪里。

除了上面解释的本地来源外,syslog-ng 还能够通过网络处理各种来源。要使用这些来源,您将必须创建一个 network()udp()tcp() 来源,如下所述。

安装

安装 syslog-ng 软件包。

要使用 syslog-ng,启动/启用 syslog-ng@default.service

systemd/journald 集成

默认情况下,syslog-ng 从 systemd journal 中提取消息。建议在 /etc/systemd/journald.conf 中保留 ForwardToSyslog=no,以避免与套接字相关的开销,并避免 日志中出现不必要的错误消息。另一方面,如果您不想两次存储日志并关闭 journaldStorage=none,您需要 ForwardToSyslog=yes,因为 syslog-ng 尝试跟踪 'journald' 日志文件。

有关更多详细信息,请参阅 #syslog-ng 和 systemd journal

来源

syslog-ng 从来源接收日志消息。要定义来源,您应该遵循以下语法

source <identifier> { source-driver(params); source-driver(params); ... };

在最简单的情况下,您只需要一个 system() 驱动程序。

source src { system(); };

这将自动检测收集本地日志的最佳方法,并确保收集来自 syslog-ng 的内核、应用程序和内部日志。

您可以在 备用 syslog-ng 手册(因为 syslog-ng.com 上的手册无法访问)中查看标识符和 source-driver。

system() 驱动程序实际上是一个更高级别的构造,它根据本地系统的需要扩展到各种来源。但是,您可以通过删除 system() 来源并直接使用较低级别的驱动程序来获得更多控制权。

unix-stream() source-driver 打开给定的 AF_UNIX 套接字,并开始监听它上面的消息。

internal() source-driver “接收”由 syslog-ng 本身在内部生成的消息。

因此,以下意味着:src/dev/log 套接字和 syslog-ng 获取消息。

source src { unix-stream("/dev/log"); internal(); };

内核将日志消息发送到 /proc/kmsg,而 file() 驱动程序从文件中读取日志消息。因此,以下意味着 kernsrc 从文件 /proc/kmsg 获取消息

source kernsrc { file("/proc/kmsg"); };

要打开端口以从远程服务器读取数据,必须使用以下语法定义来源

source s_net { network(transport(tcp)); };

对于 UDP 或

source s_net { network(transport(udp)); };

通过 TCP 接收日志消息。两者都在端口 514 上监听,除非使用 port() 参数覆盖。

syslog-ng 和 systemd journal

从 syslog-ng 3.6.1 版本开始,在使用 systemd 的 Linux 系统上,默认的 system() 来源使用 journald 作为其标准 system() 来源。

如果您希望同时使用 journald 和 syslog-ng,请确保以下设置生效。对于 systemd-journald,在 /etc/systemd/journald.conf 文件中,Storage= 设置为 auto 或未设置(默认为 auto),并且 ForwardToSyslog= 设置为 yes。对于 /etc/syslog-ng/syslog-ng.conf,您需要以下 source

/etc/syslog-ng/syslog-ng.conf
source src {
  system();
};

另一方面,如果您希望保留 journald 日志,而只保留 syslog-ng 的文本日志,请在 /etc/systemd/journald.conf 中设置 Storage=volatile。这会将 journald 存储在 ram 中。从 syslog-ng 3.6.3 开始,syslog-ng 使用 journald 作为 system(); 来源,因此如果您设置 Storage=none,systemd journal 将丢弃所有消息,并且不会将它们转发到 syslog-ng。

更改后,重启 systemd-journald.servicesyslog-ng@default.service 守护进程。

目的地

在 syslog-ng 中,日志消息被发送到文件。语法与来源非常相似

destination <identifier> {destination-driver(params); destination-driver(params); ... };

您通常会记录到文件,但您可以记录到不同的 destination-driver:管道、Unix 套接字、TCP-UDP 端口、终端或特定程序。仅声明目的地不会导致消息传递到该目的地:只有当您使用 log 语句连接来源和目的地时才会发生这种情况。Log 语句还可以包括过滤器,从而实现灵活的日志路由功能。

此声明指示 syslog-ng 将消息发送到 /var/log/auth.log

destination authlog { file("/var/log/auth.log"); };

如果用户已登录,usertty() 会将消息发送到指定用户的终端。如果您想在 root 的终端登录时将控制台消息发送到该终端

destination console { usertty("root"); };

消息可以使用 pipe() 发送到管道。以下命令将 xconsole 消息发送到管道 /dev/xconsole。这需要更多配置,因此您可以查看下面的子章节 xconsole。

destination xconsole { pipe("/dev/xconsole"); };

要在网络上发送消息,请使用 udp()。以下命令会将您的日志数据发送到另一台服务器。

destination remote_server { udp("10.0.0.2" port(514)); };

您也可以使用较新的 network() 驱动程序语法来达到相同的目的

destination remote_server { network("10.0.0.2" port(514) transport(udp)); };

创建消息过滤器

过滤器语句的语法是

filter <identifier> { expression; };

可以在表达式中使用函数,例如函数 facility(),它根据 syslog facility 代码(kern、mail、auth 等)选择消息。除了 facility 代码外,每个日志消息都与一个严重性值相关联;其中 debug 是最详细的,而 panic 只显示严重错误。您可以在 /usr/include/sys/syslog.hRFC 3164 中找到 facility、日志级别和优先级名称。要过滤那些来自授权的消息,例如 su(pam_unix)[18569]: session opened for user root by (uid=1000),请使用以下命令

filter f_auth { facility(auth); };

facility 表达式可以使用布尔运算符 andornot,因此以下过滤器选择那些不是来自授权、网络新闻或邮件的消息

filter f_debug { not facility(auth, authpriv, news, mail); };

函数 severity() 根据消息的严重性级别选择消息,因此如果您想选择信息级别

filter f_info { severity(info); };

函数和布尔运算符可以组合在更复杂的表达式中。以下行过滤优先级级别从信息到警告的消息,这些消息不是来自 auth、authpriv、mail 和 news facility

filter f_messages { severity(info..warn) and not facility(auth, authpriv, mail, news); };

也可以通过使用函数 match("regex" value("<macro>")) 在消息中匹配正则表达式来选择消息。例如,这将针对正则表达式 "failed" 匹配消息的主要部分

filter f_failed { match("failed" value("MESSAGE")); };

在过滤器表达式中,您可以使用预定义和用户定义的宏。这些也分别被称为 “硬”宏和“软”宏

所有宏的列表和文档可以在 syslog-ng 文档中找到

 "AMPM", "BSDTAG", "DATE, C_DATE, R_DATE, S_DATE", "DAY, C_DAY, R_DAY, S_DAY", "FACILITY", "FACILITY_NUM", "FULLDATE, C_FULLDATE, R_FULLDATE, S_FULLDATE", "FULLHOST", "FULLHOST_FROM", "HOUR, C_HOUR, R_HOUR, S_HOUR", "HOUR12, C_HOUR12, R_HOUR12, S_HOUR12", "HOST", "HOST_FROM", "ISODATE, C_ISODATE, R_ISODATE, S_ISODATE", "LEVEL_NUM", "LOGHOST", "MIN, C_MIN, R_MIN, S_MIN", "MONTH, C_MONTH, R_MONTH, S_MONTH", "MONTH_ABBREV, C_MONTH_ABBREV, R_MONTH_ABBREV, S_MONTH_ABBREV", "MONTH_NAME, C_MONTH_NAME, R_MONTH_NAME, S_MONTH_NAME", "MONTH_WEEK, C_MONTH_WEEK, R_MONTH_WEEK, S_MONTH_WEEK", "MSEC, C_MSEC, R_MSEC, S_MSEC", "MSG or MESSAGE", "MSGHDR", "MSGID", "MSGONLY", "PID", "PRI", "PRIORITY or LEVEL", "PROGRAM", "SDATA, .SDATA.SDID.SDNAME", "SEC, C_SEC, R_SEC, S_SEC", "SOURCEIP", "SEQNUM", "STAMP, R_STAMP, S_STAMP", "SYSUPTIME", "TAG", "TAGS", "TZ, C_TZ, R_TZ, S_TZ", "TZOFFSET, C_TZOFFSET, R_TZOFFSET, S_TZOFFSET", "UNIXTIME, C_UNIXTIME, R_UNIXTIME, S_UNIXTIME", "USEC, C_USEC, R_USEC, S_USEC", "YEAR, C_YEAR, R_YEAR, S_YEAR", "WEEK, C_WEEK, R_WEEK, S_WEEK", "WEEK_ABBREV, C_WEEK_ABBREV, R_WEEK_ABBREV, S_WEEK_ABBREV", "WEEK_DAY, C_WEEK_DAY, R_WEEK_DAY, S_WEEK_DAY", "WEEKDAY, C_WEEKDAY, R_WEEKDAY, S_WEEKDAY", "WEEK_DAY_NAME, C_WEEK_DAY_NAME, R_WEEK_DAY_NAME, S_WEEK_DAY_NAME".

要过滤从特定远程主机接收的消息(在传入消息本身中声明,而不是通过其 IP 地址),必须使用 host() 函数

filter f_host { host( "192.168.1.1" ); };

如果您更愿意按发送 IP 地址过滤,则可以使用 netmask() 过滤器

filter f_ipaddr { netmask( "192.168.1.1/32" ); };

日志路径

syslog-ng 使用 log 语句连接来源、过滤器和目的地。语法是

log {source(s1); source(s2); ...
filter(f1); filter(f2); ...
destination(d1); destination(d2); ...
flags(flag1[, flag2...]); };

例如,以下命令将来自 src 来源的消息通过 f_info 过滤器过滤后发送到 mailinfo 目的地

log { source(src); filter(f_mail); filter(f_info); destination(mailinfo); };

log 语句描述了一个管道:它告诉 syslog-ng 从一个来源(或多个来源)获取消息,并将它们传递到一个目的地(或多个目的地),前提是关联的过滤器匹配。

如果您有多个 log 语句从同一来源获取消息,则消息将沿着所有这些管道复制。当然,您可以应用不同的过滤器集,从而有选择地将消息路由到多个目的地。

除了过滤之外,syslog-ng 还可以应用消息的解析或重写。解析意味着从消息文本中提取信息,而重写消息意味着 syslog-ng 可以根据需要更改/重新格式化消息。

log 语句提供了更多功能

  1. 您可以使用 flags(final) 在当前 log 路径匹配后停止处理后续 log 路径。
  2. 您可以告诉 log 语句使用 flags(fallback) 抓取其他 log 语句未捕获的消息
  3. 您可以使用嵌入式 log 语句和连接点从 log 管道创建任意图,这有助于您构建复杂的处理管道。

您可以在 syslog-ng 文档的章节中阅读有关 log 语句的更多信息。

技巧与诀窍

在理解 syslog-ng 背后的逻辑之后,许多可能的和复杂的配置都是可能的。这里有一些例子。

让 syslog-ng 重新加载配置文件

您可以使 syslog-ng 重新评估配置文件。您可以通过向进程发送 SIGHUP 手动执行此操作,或者 重新加载 syslog-ng@default.service

故障转移日志到远程主机

此设置显示如何通过 TCP 和 UDP 协议,使用标准端口 (514) 和备用端口发送默认的未加密 syslog 数据包。这是将相同的输出以 4 种不同的方式发送到同一台计算机,以尝试确保数据包到达。如果您正在调试无法重新启动的远程服务器,这尤其有用。不同的端口和协议是为了通过任何防火墙过滤器或其他网络问题。也适用于端口转发和使用隧道。类似于此设置的设置非常适合通过易于故障转移的主机通过反向连接启动的 ssh 连接进行隧道传输。

#sending to a remote syslog server on TCP and UDP ports (not encrypted)
destination askapache_failover_loghost {
    tcp("208.86.158.195" port(25214));
    udp("208.86.158.195" port(25214));
    udp("mysyslog1.dyndns.org" port(514));
};
log { 
    source(src); 
    destination(askapache_failover_loghost);
};

然后在接收这些日志的日志主机上

#a USB redirected console for flexible viewing
destination debugging_console {
    file("/dev/ttyU1");
};

# listens on IP addresses and ports, sets the incoming settings
source prone_to_failover_host {
    tcp(ip(208.86.158.195),port(25214));
    udp(ip(208.86.158.195) port(25214));

    udp(default-facility(syslog) default-priority(emerg));
    tcp(default-facility(syslog) default-priority(emerg));
}

# log it
log {
    source(prone_to_failover_host); 
    destination(debugging_console);
};

将日志移动到另一个文件

为了将一些日志从 /var/log/messages 移动到另一个文件。

#sshd configuration
destination ssh { file("/var/log/ssh.log"); };
filter f_ssh { program("sshd"); };
log { source(src); filter(f_ssh); destination(ssh); flags(final); };

确保将此块添加到您的常用 log 语句之上。由于 log 语句中的 flags(final),任何与“sshd”过滤器匹配的内容都只会发送到 ssh.log,并且消息的处理将在此时停止。

配置为日志主机

将您的系统配置为日志主机非常简单。将以下内容放入您的配置中,并创建所需的目录。使用此简单配置,日志文件名将基于远程主机的 FQDN,并位于 /var/log/remote/ 中。创建远程目录后,重新加载您的 syslog-ng 配置。

source net { udp(); };
destination remote { file("/var/log/remote/${FULLHOST}-log"); };
log { source(net); destination(remote); };

您也可以考虑 default-network-drivers() 来源,它将打开多个端口,接受通常在现场部署的多种不同 syslog 协议的消息。

提高性能

可以通过不同的方式提高 syslog-ng 的性能

定期写入

似乎旧的 sync(X) 选项现在称为 flush_lines(X),其中写入文件的操作会缓冲 X 行。默认值为 100。

增加来源批处理限制

syslog-ng 正在并行执行消息处理,因为消息流是使用许多不同的来源机制接收的。为了避免使一个来源连接饿死另一个来源连接,syslog-ng 既使用了线程,又对一次从单个来源连接处理的消息量施加了限制。

这意味着即使来源应用程序可能在一个紧密的循环中发送了 1000 条消息,syslog-ng 也会一次处理 100 条消息(确切的限制由 log-fetch-limit() 指定),并且每处理 100 条消息后,它都会重新检查是否还有其他连接也需要处理。这会产生一些开销,并且通过增加 log-fetch-limit() 可以显着提高 syslog-ng 性能

另一个可以根据特定用例进行调整的机制是用于反压传播的窗口大小设置。这是 log-iw-size() 参数,它控制在目的地确认消息之前可以有多少消息处于飞行状态。通过增加 log-iw-size(),您可以让它处理更多消息,然后再停止以允许目的地消费消息。

通过增加 log-iw-size(),您的内存/磁盘缓冲区使用量将会增加,因为 syslog-ng 将不得不将消息放在某个地方。

避免冗余处理和磁盘空间

单个日志消息可以多次发送到不同的日志文件。例如,在初始配置文件中,我们有以下定义

destination cron { file("/var/log/cron.log"); };
destination messages { file("/var/log/messages"); };
filter f_cron { facility(cron); };
filter f_messages { level(info..warn) 
       and not facility(auth, authpriv, mail, news); };
log { source(src); filter(f_cron); destination(cron); };
log { source(src); filter(f_messages); destination(messages); };

来自 cron facility 的同一消息将最终出现在 cron.logmessages 文件中。要更改此行为,我们可以使用 final 标志,结束对消息的进一步处理。因此,在本例中,如果我们希望来自 cron facility 的消息不出现在 messages 文件中,我们应该通过以下方式更改 cron 的 log 语句

log { source(src); filter(f_cron); destination(cron); flags(final); };

另一种方法是从 f_messages 过滤器中排除 cron facility

filter f_messages { level(info..warn) and not facility(cron, auth, authpriv, mail, news); };

PostgreSQL 目的地

本节将使用两个角色:sysloglogwritersyslog 将是数据库 syslog 的管理员,而 logwriter 将只能向 logs 表添加记录。

不再需要为日志创建表。syslog-ng 将自动创建。

psql -U postgres
postgres=# CREATE ROLE syslog WITH LOGIN;
postgres=# \password syslog    # Using the \password function is secure because
postgres=# CREATE ROLE logwriter WITH LOGIN;
postgres=# \password logwriter # the password is not saved in history.
postgres=# CREATE DATABASE syslog OWNER syslog;
postgres=# \q # You are done here for the moment

编辑 pg_hba.conf 以允许 sysloglogwriter 建立与 PostgreSQL 的连接。

/var/lib/postgres/data/pg_hba.conf
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

host    syslog      logwriter   192.168.0.1/24        md5
host    syslog      syslog      192.168.0.10/32       md5

然后 重新加载 postgresql.service

编辑 /etc/syslog-ng/syslog-ng.conf,以便它知道在哪里以及如何写入 PostgreSQL。syslog-ng 将使用 logwriter 角色。

...
#
# SQL logging support
#

destination d_pgsql {
  sql(type(pgsql)
  host("127.0.0.1") username("logwriter") password("password")
  database("syslog")
  table("logs_${HOST}_${R_YEAR}${R_MONTH}${R_DAY}") #or whatever you want, example ${HOST}" for hosts, ${LEVEL}" for levels.. etc
  columns("datetime timestamp with time zone", "host varchar(32)", "program varchar(16)", "pid varchar(16)", "message varchar(200)")
  values("$R_ISODATE", "$HOST", "$PROGRAM", "$PID", "$MSG")
  indexes("datetime", "host", "program", "pid", "message"));
};

log { source(src); destination(d_pgsql); };

最后,重启 syslog-ng.service

并检查是否正在记录内容。

psql -U logwriter -d syslog
syslog=> SELECT * FROM <your table name> ORDER BY datetime DESC LIMIT 10;

ISO 8601 时间戳

之前 

#logger These timestamps are not optimal.
#tail -n 1 /var/log/messages.log
Feb 18 14:25:01 hostname logger: These timestamps are not optimal.
#

在 options 部分的 /etc/syslog-ng/syslog-ng.conf 中添加 ts_format(iso);。示例

options {
  stats_freq (0);
  flush_lines (0);
  time_reopen (10);
  log_fifo_size (1000);
  long_hostnames(off); 
  use_dns (no);
  use_fqdn (no);
  create_dirs (no);
  keep_hostname (yes);
  perm(0640);
  group("log");
  ts_format(iso);      #make ISO-8601 timestamps
  #frac-digits(3);     #optional time to nearest millisecond 
};

然后 重新加载 syslog-ng.service

之后 

#logger Now THAT is a timestamp!
#tail -n 2 /var/log/messages.log
Feb 18 14:25:01 hostname logger: These timestamps are not optimal.
2010-02-18T20:23:58-05:00 electron logger: Now THAT is a timestamp!
#

RFC 3339 时间戳

与上面相同,除了对 ts_format 使用 rfc3339 而不是 iso

日志级别

日志级别在 syslog-ng 配置中为每个记录的 facility 单独定义。可用的日志级别在 /usr/include/sys/syslog.h 中列出

/usr/include/sys/syslog.h
define LOG_EMERG       0       /* system is unusable */
define LOG_ALERT       1       /* action must be taken immediately */
define LOG_CRIT        2       /* critical conditions */
define LOG_ERR         3       /* error conditions */
define LOG_WARNING     4       /* warning conditions */
define LOG_NOTICE      5       /* normal but significant condition */
define LOG_INFO        6       /* informational */
define LOG_DEBUG       7       /* debug-level messages */

宏和变量

宏可以在模板和目的地文件名中使用。syslog-ng OSE 的宏

以下代码会将日志行以 macroname=value@ 的格式写入 /var/log/test.log

template t_test { template("PROGRAM=$PROGRAM@PID=$PID@BSDTAG=$BSDTAG@TAG=$TAG@TAGS=$TAGS@FACILITY=$FACILITY@FACILITY_NUM=$FACILITY_NUM@LEVEL=$LEVEL@LEVEL_NUM=$LEVEL_NUM@PRI=$PRI@PRIORITY=$PRIORITY@FULLHOST=$FULLHOST@FULLHOST_FROM=$FULLHOST_FROM@HOST=$HOST@HOST_FROM=$HOST_FROM@LOGHOST=$LOGHOST@MSGHDR=$MSGHDR@MSGID=$MSGID@MSGONLY=$MSGONLY@MSG=$MSG@MESSAGE=$MESSAGE@SOURCE=$SOURCE@SOURCEIP=$SOURCEIP@SOURCE_IP=$SOURCE_IP@SEQNUM=$SEQNUM@UNIXTIME=$UNIXTIME@FULLDATE=$FULLDATE@ISODATE=$ISODATE@DATE=$DATE@STAMP=$STAMP@TZ=$TZ@TZOFFSET=$TZOFFSET@SEC=$SEC@MIN=$MIN@HOUR=$HOUR@HOUR12=$HOUR12@DAY=$DAY@WEEK=$WEEK@WEEK_DAY=$WEEK_DAY@WEEK_DAY_ABBREV=$WEEK_DAY_ABBREV@WEEK_DAY_NAME=$WEEK_DAY_NAME@MONTH=$MONTH@MONTH_ABBREV=$MONTH_ABBREV@MONTH_NAME=$MONTH_NAME@MONTH_WEEK=$MONTH_WEEK@YEAR=$YEAR@YEAR_DAY=$YEAR_DAY
\n"); template_escape(no); };

destination d_test { file("/var/log/test.log" template(t_test)); };

log { source(s_local); destination(d_test); flags(final); };

一旦 syslog-ng 使用以下命令重新启动,您就可以创建自己的值列表:tail /var/log/test.log|tr "@" "\n"

PROGRAM=kernel
PID=
BSDTAG=4A
TAG=04
TAGS=.source.s_local
FACILITY=kern
FACILITY_NUM=0
LEVEL=warning
LEVEL_NUM=4
PRI=4
PRIORITY=warning
FULLHOST=www.askapache.com
FULLHOST_FROM=www.askapache.com
HOST=www.askapache.com
HOST_FROM=www.askapache.com
LOGHOST=
MSGHDR=kernel: 
MSGID=
MSGONLY=Firewall: *INVALID* IN=eth0 OUT= MAC=00:00 SRC=x.x.x.x DST=198.101.159.98 LEN=40 TOS=0x00 PREC=0x00 TTL=113 ID=7730 DF PROTO=TCP SPT=52369 DPT=80 WINDOW=0 RES=0x00 ACK RST URGP=0 
MSG=Firewall: *INVALID* IN=eth0 OUT= MAC=00:00 SRC=x.x.x.x DST=198.101.159.98 LEN=40 TOS=0x00 PREC=0x00 TTL=113 ID=7730 DF PROTO=TCP SPT=52369 DPT=80 WINDOW=0 RES=0x00 ACK RST URGP=0 
MESSAGE=Firewall: *INVALID* IN=eth0 OUT= MAC=00:00 SRC=x.x.x.x DST=198.101.159.98 LEN=40 TOS=0x00 PREC=0x00 TTL=113 ID=7730 DF PROTO=TCP SPT=52369 DPT=80 WINDOW=0 RES=0x00 ACK RST URGP=0 
SOURCE=s_local
SOURCEIP=127.0.0.1
SOURCE_IP=
UNIXTIME=1369742458
FULLDATE=2013 May 28 08:00:58
ISODATE=2013-05-28T08:00:58-04:00
DATE=May 28 08:00:58
STAMP=2013-05-28T08:00:58-04:00
TZ=-04:00
TZOFFSET=-04:00
SEC=58
MIN=00
HOUR=08
HOUR12=
DAY=28
WEEK=21
WEEK_DAY=3
WEEK_DAY_ABBREV=Tue
WEEK_DAY_NAME=Tuesday
MONTH=05
MONTH_ABBREV=May
MONTH_NAME=May
MONTH_WEEK=4
YEAR=2013
YEAR_DAY=148

接收和解析常见 syslog 消息

从 3.16 版本开始,syslog-ng 能够使用 default-network-drivers() 来源驱动程序在最常见的端口上使用最常见的解析器接收和解析消息。

  • 默认监听端口
    • 514,TCP 和 UDP,用于 RFC3164 (BSD-syslog) 格式的流量
    • 601 TCP,用于 RFC5424 (IETF-syslog) 格式的流量
    • 6514 TCP,用于 TLS 加密的流量
  • 自动解析器
    • RFC3164 消息解析器
    • RFC5424 消息解析器
    • Cisco 解析器
    • 结构化 EWMM 解析器
    • 其他应用程序适配器(Splunk Common Information Model (CIM)、iptables 或 sudo)

参见

  • Netconsole 一个内核模块,它将所有内核日志消息(即 dmesg)通过网络发送到另一台计算机,而无需涉及用户空间(例如 syslogd)。

外部链接