背景
我们有一个用 Java 编写的 Web 服务器,可通过 HTTPS REST API 与数千个移动应用程序进行通信。
出于调查目的,我们必须记录所有 API 调用 - 目前,这是作为编程 @Aspect
实现的,对于每个 API 调用,我们将一个 api_call_log
对象保存到MySQL 表具有以下属性:
tenant_id
用户名
device_uuid
api_method
api_version
api_start_time
api_processing_duration
request_parameters
full_request
(JSON)full_response
(JSON)response_code
问题
正如您可以想象的那样,在达到一定的吞吐量后,该解决方案无法很好地扩展,而且即使使用正确的 MySQL 索引,查询该表也非常慢。
方法
这就是为什么我们想要使用Elastic Stack来重新实现这个解决方案,但是我现在有点卡住了。
问题
我还找不到任何适合我需求的 Logstash 插件 - 我是否应该将此 api_call_log
对象输出到日志文件中并使用 Logstash 解析、过滤和转换该文件?
最佳答案
这正是我在这种情况下要做的。使用 logback 等框架将日志写入文件,然后旋转它。如果您想轻松解析,请使用 json 作为日志记录格式(也可在 logback 中使用)。然后使用 Filebeat 来提取写入的日志文件。如果您需要使用管道转换/解析elasticsearch摄取节点中的消息。
考虑使用机器或环境特定信息标记/丰富 filebeat 读取的日志文件,以便在可视化或报告等中请求它们。
filebeat-to-elastic 方法是最简单的一种。先试试这个。如果您无法在 Elasticsearch 管道中完成解析,请在中间放置一个 Logstash。
使用 filebeat,您将免费获得许多东西,例如反压处理和每日索引,这在我们在这里讨论的日志记录场景中非常方便。
当您需要可视化或搜索 ui 时,请查看 kibana 或 grafana。
如果您有更多问题,请在此处提出新问题。
玩得开心!
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html
关于java - Elastic Stack - 具有完整 JSON 请求和响应的 REST API 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56549299/