java - Elastic Stack - 具有完整 JSON 请求和响应的 REST API 日志记录

标签 java rest elasticsearch logstash elastic-stack

背景

我们有一个用 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/

相关文章:

groovy - 使用数组类型更新Elasticsearch Doc字段

java - JTable 输入键

java - 访问 REST Web 服务的摘要式身份验证

elasticsearch - Nutch以外的其他与Elasticsearch合作的抓取工具

python - Django:将来自管理员的新行存储在数据库中并通过 REST API 返回它们

java - 当规范说 "REST API implementation"时,这是什么意思?

elasticsearch - 如何用Spring Boot设置ElasticSearch的数据目录

java - http从jsp获取并解析状态码

java - C++ 到 java,语言等效问题

java - 插入数据库时​​ netbeans 项目中的参数类型不匹配