json - 以 JSON 格式登录到 cloudfoundry logstash
问题描述
我们正在使用 Swisscom 应用程序云(基于 Cloudfoundry)和提供的 Kibana/Logstash/Elasticsearch 服务。现在我们想以 JSON 格式从我们的应用程序登录到 logstash。
这就是为什么我们将 Logstash 格式化程序集成到我们的 wildfly swarm 应用程序中,从那时起它们以 JSON 格式登录,例如:
{"@version":1,"@timestamp":"2018-07-24T18:28:51.291+0200","sequence":15299,"loggerClassName":"org.jboss.as.server.logging.ServerLogger_$logger","loggerName":"org.jboss.as.server.deployment","level":"INFO","threadName":"MSC service thread 1-2","message":"WFLYSRV0027: Starting deployment of \"hospush.war\" (runtime-name: \"hospush.war\")","threadId":31,"mdc":{},"ndc":""}
我还在 swisscom appcloud 上的 logstash 应用程序中添加了一个 filter.conf,内容如下:
filter {
json {
source => "message"
}
}
当我现在检查 logstash 的日志时,我可以看到它抛出了一个错误并且没有日志传输到 Kibana。
2018-07-24 20:33:15 [APP/PROC/WEB/0] OUT [2018-07-24T18:33:15,202][WARN ][logstash.filters.json ] Error parsing json {:source=>"message", :raw=>"<14>1 2018-07-24T18:33:15.018187+00:00 HosPush.demo-test.demo-test 3694b57f-bc05-459a-880a-17c174fc6d7c [APP/PROC/WEB/0] - - {\"@version\":1,\"@timestamp\":\"2018-07-24T20:33:15.017+0200\",\"sequence\":3796,\"loggerClassName\":\"org.slf4j.impl.Slf4jLogger\",\"loggerName\":\"com.hospush.business.escalation.EscalationService\",\"level\":\"INFO\",\"threadName\":\"EJB default - 3\",\"message\":\"Found 0 patientNeeds with no open notification.\",\"threadId\":154,\"mdc\":{},\"ndc\":\"\"}\n", :exception=>#<LogStash::Json::ParserError: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
2018-07-24 20:33:15 [APP/PROC/WEB/0] OUT at [Source: (byte[])"<14>1 2018-07-24T18:33:15.018187+00:00 HosPush.demo-test.demo-test 3694b57f-bc05-459a-880a-17c174fc6d7c [APP/PROC/WEB/0] - - {"@version":1,"@timestamp":"2018-07-24T20:33:15.017+0200","sequence":3796,"loggerClassName":"org.slf4j.impl.Slf4jLogger","loggerName":"com.hospush.business.escalation.EscalationService","level":"INFO","threadName":"EJB default - 3","message":"Found 0 patientNeeds with no open notification.","threadId":154,"mdc":{},"ndc":""}
2018-07-24 20:33:30 [APP/PROC/WEB/0] OUT [2018-07-24T18:33:30,117][WARN ][logstash.filters.json ] Error parsing json {:source=>"message", :raw=>"<14>1 2018-07-24T18:33:30.002777+00:00 HosPush.demo-test.demo-test 3694b57f-bc05-459a-880a-17c174fc6d7c [APP/PROC/WEB/0] - - {\"@version\":1,\"@timestamp\":\"2018-07-24T20:33:30.001+0200\",\"sequence\":3797,\"loggerClassName\":\"org.slf4j.impl.Slf4jLogger\",\"loggerName\":\"com.hospush.business.escalation.OrphanEscalationScheduler\",\"level\":\"INFO\",\"threadName\":\"EJB default - 4\",\"message\":\"orphan escalation scheduler called...\",\"threadId\":155,\"mdc\":{},\"ndc\":\"\"}\n", :exception=>#<LogStash::Json::ParserError: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
2018-07-24 20:33:30 [APP/PROC/WEB/0] OUT at [Source: (byte[])"<14>1 2018-07-24T18:33:30.002777+00:00 HosPush.demo-test.demo-test 3694b57f-bc05-459a-880a-17c174fc6d7c [APP/PROC/WEB/0] - - {"@version":1,"@timestamp":"2018-07-24T20:33:30.001+0200","sequence":3797,"loggerClassName":"org.slf4j.impl.Slf4jLogger","loggerName":"com.hospush.business.escalation.OrphanEscalationScheduler","level":"INFO","threadName":"EJB default - 4","message":"orphan escalation scheduler called...","threadId":155,"mdc":{},"ndc":""}
我的猜测是,由于 source => "message" logstash 将消息属性解析为 JSON 失败。它应该做的是将整个“根对象”解析为 json 而不仅仅是消息属性。
可能是这样,如果是的话,我需要如何调整 filter.conf 以使其工作?
非常感谢您的帮助。
解决方案
推荐阅读
- raku - List repetition (xx) without evaluation?
- python - 如何使用 Python 中的 smtplib 发送文本或 word 文件?
- opencv - Can I move my camera after intrinsic calibration?
- c# - 如何使用 lambda 表达式从 LINQ 中的左连接中提取 max(property)
- python - python-docx 检测枚举列表
- liferay - liferay Dxp:当单击超链接时,如何从一个页面中的 portel 重定向到包含不同 portlet 的另一个页面
- node.js - 将文件从一个节点 js 服务器发送到另一个
- django - Django 表单未保存,终端显示数据并添加了保存方法
- ios - 集合视图更改间距
- ios - 启用 UiNavigationController 的边缘滑动手势但隐藏导航栏