json字段上的syslog-ng过滤

时间:2019-12-18 10:09:38

标签: syslog syslog-ng

我有几种类型的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日志,因此我无法使用它。

0 个答案:

没有答案