如何替换 rsyslog 中的控制字符

如何替换 rsyslog 中的控制字符

我们有几个(通常是 Java)应用程序,它们记录到集中式 rsyslog 服务器(版本 7.6)。我们遇到了 Java 异常问题,因为 rsyslog 将堆栈跟踪的每一行作为单独的消息处理,所以我们的开发人员开始使用 #012 作为换行符,使用 #011 作为制表符。所以现在,当我收到带有异常的消息时,它看起来像:

2015-02-09T12:52:43.769Z hostname warning app Exception when invoking method something.search: reason=Error while executing method something.search, Params=#012{"maxResults":10,"query":"somesearch"}#012com.company.server.json.ApiException: Error while executing method something.search#012#011at com.company.app.api.BaseExecutor.executeWithDatabase(BaseExecutor.java:112) ~[app-server.jar:?]#012#011at com.company.app.api.BaseExecutor.execute(BaseExecutor.java:87) ~[app-server.jar:?]#012#011at com....and so on

我想要做的第一件事是自动将这些 #xxx 字符串替换为它们的原始值,以便生成的日志文件可读。

第二件事是,我们使用graylog2,临时存储日志几周,以便轻松搜索。Rsyslog 设置为将日志保存到某个位置并将日志重新发送到graylog,我当然希望在那里使用空格和制表符而不是控制字符。

我正在做一些研究并试图替换这些控制字符,因为它们应该(我认为)与 rsyslog 兼容:

http://www.rsyslog.com/doc/property_replacer.html http://www.rsyslog.com/doc/rsconf1_escapecontrolcharactersonreceive.html

但迄今为止还没有运气。

提前感谢您的时间和帮助!

PS 第一个问题可以用 cron 和 sed 来解决,但是它不能解决第二个问题。

答案1

虽然不完全是一个解决方案,但却是足够好的解决方法。

对于 rsyslog,是的,每晚的 cron 作业都带有一个小的“sed”命令对于 graylog:您可以使用 drools 规则在消息到达 graylog 引擎之前重写它。(来源:https://www.graylog.org/documentation/general/rewriting/

相关内容