为什么 syslog-ng 会截断输出?
Why is syslog-ng truncating output?
我正在将 syslog 从防火墙发送到 syslog-ng 3.5.6,它在 CentOS 7 服务器上 运行。我可以查看通过 tcpdump 传入的日志,一切看起来都很好。但是,一旦 syslog-ng 处理日志并将它们发送到输出文件,它们就会被截断。我有其他未被截断的系统日志源。
这是 tcpdump 的示例:
192.168.1.1.10002 > 192.168.2.1.514: SYSLOG, length: 694
Facility authpriv (10), Severity notice (5)
Msg: 1 2019-11-08T19:30:08 192.168.1.1 CP-GW - Log [Fields@1.3.6.1.4.1.2620 Action="accept" UUid="{0x5dc5c542}" rule="117" rule_uid="{C94E97R1}" rule_name="Test" src="192.168.1.38" dst="192.168.160.1" proto="17" user="test administrator (test_administrator)(+)Jtest.Administrator (FI) @ TEST - TEST - TEST (Jtest_administrator)(+)Testl.Administ..." src_user_name="test administrator (test_administrator)(+)Jtest.Administrator (FN) @ TEST - TEST - TEST (Jtest_administrator)(+)Testl.Administ..." src_machine_name="TEST@TEST.TEST.com" snid="76d73747" product="VPN-1 & FireWall-1" service="53" s_port="64642" product_family="Network"]
19:30:09.083410 IP (tos 0x0, ttl 55, id 0, offset 0, flags [DF], proto UDP (17), length 722)
输出文件如下所示:
Nov 8 19:30:08 192.168.1.1 CP-GW:
这是 syslog-ng conf.d 文件:
destination d_c2 {
file ("/var/log/fw-test/${SOURCEIP}/${C_YEAR}-${C_MONTH}-${C_DAY}T${C_HOUR}.log"
owner(root) group(splunk)
perm(0755) dir_perm(0755)
create_dirs(yes)
);
};
filter f_c2 {
netmask(192.168.1.1);
};
log {
source(s_udp514);
filter(f_c2);
destination(d_c2);
};
以及系统日志的选项部分-ng.conf:
options {
flush_lines (100);
time_reopen (10);
log_fifo_size (1000);
chain_hostnames (yes);
use_dns (no);
use_fqdn (no);
create_dirs (no);
keep_hostname (yes);
log-msg-size(1048576);
};
知道输出被截断的原因吗?
提前致谢
这是正确的行为,因为除了 header 和 structured-data.
,您的消息不包含任何内容
输入采用 IETF 系统日志格式 (RFC 5424):
SYSLOG-MSG = HEADER SP STRUCTURED-DATA [SP MSG]
HEADER = PRI VERSION SP ISOTIMESTAMP SP HOSTNAME SP APP-NAME SP PROCID SP MSGID
MSG
这里是可选的,你的情况是空的:
1 2019-11-08T19:30:08 192.168.1.1 CP-GW - Log [Fields@1.3.6.1.4.1.2620 Action="accept" UUid="{0x5dc5c542}" rule="117" rule_uid="{C94E97R1}" rule_name="Test" src="192.168.1.38" dst="192.168.160.1" proto="17" user="test administrator (test_administrator)(+)Jtest.Administrator (FI) @ TEST - TEST - TEST (Jtest_administrator)(+)Testl.Administ..." src_user_name="test administrator (test_administrator)(+)Jtest.Administrator (FN) @ TEST - TEST - TEST (Jtest_administrator)(+)Testl.Administ..." src_machine_name="TEST@TEST.TEST.com" snid="76d73747" product="VPN-1 & FireWall-1" service="53" s_port="64642" product_family="Network"] here would come the message body
输出是旧的 BSD 系统日志格式 (RFC 3164),它不包含任何 structured-data:
Nov 8 19:30:08 192.168.1.1 CP-GW:
您可以通过创建包含所有重要字段的模板或使用不同的输出格式(例如原始 IETF 系统日志格式)来避免丢失 sdata 信息:
file ("/var/log/fw-test/${SOURCEIP}/${C_YEAR}-${C_MONTH}-${C_DAY}T${C_HOUR}.log"
owner(root) group(splunk) perm(0755) dir_perm(0755) create_dirs(yes)
flags(syslog-protocol)
);
我正在将 syslog 从防火墙发送到 syslog-ng 3.5.6,它在 CentOS 7 服务器上 运行。我可以查看通过 tcpdump 传入的日志,一切看起来都很好。但是,一旦 syslog-ng 处理日志并将它们发送到输出文件,它们就会被截断。我有其他未被截断的系统日志源。
这是 tcpdump 的示例:
192.168.1.1.10002 > 192.168.2.1.514: SYSLOG, length: 694
Facility authpriv (10), Severity notice (5)
Msg: 1 2019-11-08T19:30:08 192.168.1.1 CP-GW - Log [Fields@1.3.6.1.4.1.2620 Action="accept" UUid="{0x5dc5c542}" rule="117" rule_uid="{C94E97R1}" rule_name="Test" src="192.168.1.38" dst="192.168.160.1" proto="17" user="test administrator (test_administrator)(+)Jtest.Administrator (FI) @ TEST - TEST - TEST (Jtest_administrator)(+)Testl.Administ..." src_user_name="test administrator (test_administrator)(+)Jtest.Administrator (FN) @ TEST - TEST - TEST (Jtest_administrator)(+)Testl.Administ..." src_machine_name="TEST@TEST.TEST.com" snid="76d73747" product="VPN-1 & FireWall-1" service="53" s_port="64642" product_family="Network"]
19:30:09.083410 IP (tos 0x0, ttl 55, id 0, offset 0, flags [DF], proto UDP (17), length 722)
输出文件如下所示:
Nov 8 19:30:08 192.168.1.1 CP-GW:
这是 syslog-ng conf.d 文件:
destination d_c2 {
file ("/var/log/fw-test/${SOURCEIP}/${C_YEAR}-${C_MONTH}-${C_DAY}T${C_HOUR}.log"
owner(root) group(splunk)
perm(0755) dir_perm(0755)
create_dirs(yes)
);
};
filter f_c2 {
netmask(192.168.1.1);
};
log {
source(s_udp514);
filter(f_c2);
destination(d_c2);
};
以及系统日志的选项部分-ng.conf:
options {
flush_lines (100);
time_reopen (10);
log_fifo_size (1000);
chain_hostnames (yes);
use_dns (no);
use_fqdn (no);
create_dirs (no);
keep_hostname (yes);
log-msg-size(1048576);
};
知道输出被截断的原因吗?
提前致谢
这是正确的行为,因为除了 header 和 structured-data.
,您的消息不包含任何内容输入采用 IETF 系统日志格式 (RFC 5424):
SYSLOG-MSG = HEADER SP STRUCTURED-DATA [SP MSG]
HEADER = PRI VERSION SP ISOTIMESTAMP SP HOSTNAME SP APP-NAME SP PROCID SP MSGID
MSG
这里是可选的,你的情况是空的:
1 2019-11-08T19:30:08 192.168.1.1 CP-GW - Log [Fields@1.3.6.1.4.1.2620 Action="accept" UUid="{0x5dc5c542}" rule="117" rule_uid="{C94E97R1}" rule_name="Test" src="192.168.1.38" dst="192.168.160.1" proto="17" user="test administrator (test_administrator)(+)Jtest.Administrator (FI) @ TEST - TEST - TEST (Jtest_administrator)(+)Testl.Administ..." src_user_name="test administrator (test_administrator)(+)Jtest.Administrator (FN) @ TEST - TEST - TEST (Jtest_administrator)(+)Testl.Administ..." src_machine_name="TEST@TEST.TEST.com" snid="76d73747" product="VPN-1 & FireWall-1" service="53" s_port="64642" product_family="Network"] here would come the message body
输出是旧的 BSD 系统日志格式 (RFC 3164),它不包含任何 structured-data:
Nov 8 19:30:08 192.168.1.1 CP-GW:
您可以通过创建包含所有重要字段的模板或使用不同的输出格式(例如原始 IETF 系统日志格式)来避免丢失 sdata 信息:
file ("/var/log/fw-test/${SOURCEIP}/${C_YEAR}-${C_MONTH}-${C_DAY}T${C_HOUR}.log"
owner(root) group(splunk) perm(0755) dir_perm(0755) create_dirs(yes)
flags(syslog-protocol)
);