我有几种类型的json日志写入文件。我希望能够将json日志的每个“类型”重定向到各自的文件中。
我在syslog-ng conf文件中尝试了以下操作:
source s_net {
tcp(ip(0.0.0.0)
port(443)
tls(key-file("/etc/syslog-ng/key.d/key.pem")
cert-file("/etc/syslog-ng/cert.d/cert.pem")
peer-verify(optional-untrusted))
flags(syslog-protocol)
max-connections(100)
);
};
destination d_local_user_perserver { file("/var/log/syslog-ng/json/${HOST}_${YEAR}_${MONTH}_${DAY}_`cluster_guid`_userjson.log" create-dirs(yes) template("${MESSAGE}\n")); };
filter f_userjson { message("user_info"); };
log { source(s_net);
filter(f_userjson);
destination(d_local_user_perserver);
};
我的示例json日志是:
{"host_type": "gateway", "hostname": "gw1-cluster", "time_now": 1576662464, "type": "user_info"}
我在d_local_user_perserver中得到的是:
"gateway", "hostname": "gw1-cluster", "time_now": 1576662464, "type": "user_info"}
缺少前几个字符。
我可能会缺少什么?
编辑:
当我考虑整个消息时,即
destination d_local_user_perserver { file("/var/log/syslog-ng/json/${HOST}_${YEAR}_${MONTH}_${DAY}_`cluster_guid`_userjson.log" create-dirs(yes) ); };
我正确获得以下输出:
Dec 18 10:21:11 gw1-blrcluster {"host_type": "gateway", "hostname": "gw1-cluster", "time_now": 1576662464, "type": "user_info"}
但是关键是,我需要一个有效的json,因此只需要$ {MESSAGE}。
编辑:
我现在正在解决它:
在我的应用程序日志中添加了标签以这种方式打印-
USER-INFO- {"host_type": "gateway", "hostname": "gw1-cluster", "time_now": 1576662464, "type": "user_info"}
我修改了过滤器以使用匹配。
filter f_userjson { match("USER-INFO-*" value(MSGHDR)); };
注意:将应用程序用作过滤器也可以,但是由于同一应用程序正在编写不同类型的json日志,因此我无法使用它。