Java 有什么能够统计或者观察接口请求情况的工具或者方案么?

2023-12-12 14:17:40 +08:00
 stonerAAA

如题,java 后端一枚,请教诸位大佬,公司的项目,数据库都部署在阿里云服务上,偶尔会发现某个数据库请求超时,但是找不到在这个时间段是哪些请求过多导致的。想问问有什么方案或者工具或者其他能够统计指定时间范围内的接口访问频次,时间么?还是说这种情况要查询数据库的 SQL 耗时?请教。

2726 次点击
所在节点    Java
17 条回复
beneo
2023-12-12 14:18:49 +08:00
购买 阿里云 ARMS 服务
salmon5
2023-12-12 14:30:49 +08:00
正常公司
购买 ARMS √

2B 公司
自己开 ECS 搭建 SkyWalking ×
irisShaw
2023-12-12 14:32:13 +08:00
如果配置了 access.log 的话,配合 awk 和 sed 可以统计。不过最简便的还是买阿里云的服务。
irisShaw
2023-12-12 14:33:15 +08:00
@salmon5 哈哈哈,我老东家就是自己搭的 SkyWalking
fengpan567
2023-12-12 14:34:02 +08:00
去统计 nginx 的日志
sunsun
2023-12-12 14:44:47 +08:00
目前负责的小项目数据库用的是 aws RDS ,一般排查都是直接去 performance insight 里面看哪些 sql 调用的多,具体的耗时也都有,这个功能也是后来同事小伙伴发现的(需要手动开启),不知道阿里云有没有这样的功能可以开启
chocotan
2023-12-12 15:16:49 +08:00
自己玩儿可以用 micrometer 然后输出到 promethues 用 grafana 展示
qoo2019
2023-12-12 15:28:54 +08:00
@salmon5 我司就属于 2B 公司,主要原因还是穷
arms 一个 agent 一天 4 快多,扛不住
seanxx
2023-12-12 15:59:31 +08:00
micrometer 自己埋点
stonerAAA
2023-12-12 16:33:00 +08:00
感谢楼上的诸位大佬,关于上 ARMS ,花钱的事我司是不会同意的,刚刚在生产环境 kibana 翻了翻,发现有个 APM 有类似的的功能,我再看看。
salmon5
2023-12-12 16:43:21 +08:00
@stonerAAA ARMS 可以按量使用,服务端不用的时候再关掉。
ikas
2023-12-12 20:10:44 +08:00
1.指标采集:
spring boot actuator 采集数据> promethues > grafana.
1.监控系统使用:promethues
2.可视化使用:grafana,可以导入市场上的监控仪表配置
3.系统,如果是 spring,直接上 spring boot actuator 模块

2.调用链采集:
opentelemetry > zipkin > grafana
1.使用 opentelemetry 的 javaagent 采集链路数据
2.zipkin 存储链路数据 ,存盘可以用 elasticsearch

3.日志采集
promtail > loki > grafana
1.配置日志格式,使用 promtail 采集
2.使用 loki 作为日志检索与存储

以上三个目前在用,通过 traceId,统一使用 grafana 作为展示,链路展示关联日志,基本每个方法调用耗时,详细都很清楚了

----
当然,使用 opentelemetry 即可很方便的采集指标,链路,日志,如果是 springboot3.2,spring boot actuator +opentelemetry 很方便
arloor
2023-12-12 22:15:31 +08:00
为什么推荐 arms 不推荐 sls
SilenceLL
2023-12-13 10:01:10 +08:00
apm ,skywalking
Aresxue
2023-12-13 11:55:44 +08:00
典型的 apm 场景,这块做的最好是 arms ,支持接口统计、聚合和下钻,不想花钱就自己整 pinpoint 或 skywalking ,parms 就是基于 pinpoint 改的,你甚至还能在 arms 的 agent 看见 pinpoint 的包名。。pinpoint 的问题就是吃资源,性能开销大但是相对好用,可以临时上上去跑一段时间查查问题,查完了再下掉。skywalking 可以作为长久方案,性能开销确实小一些,但自带的 ui 太难用,对于你这个问题各种聚合信息你可能还需要自己去 es 里面查,而且由于其实极其复杂维护是个老大难的问题。
易用性:arms > pinpoint > skywalking
性能开销:arms = pinpoint > skywalking
可维护性: arms > pinpoint > skywalking

只针对问题本身也可以通过别的方式解决,首先保证数据库请求超时会输出异常日志,核心信息是时间,然后就是统计 http 接口的信息,nginx 、tomcat 、spring-boot-starter-actuator 、jmx 都可以做这件事情,最好用的是 spring-boot-starter-actuator 结合 promethues ,可以清楚的看到每个接口在指定时间段的频次、rt ,从 grafana 上直接就能看出流量的峰谷。
wanniwa
2023-12-13 14:27:41 +08:00
skywalking
halk
260 天前
@irisShaw #4 skywalking 这东西对 DB 的压力比较大,换成 ES 存储又涉及成本,不论是自建还是购买云服务
刚开始试用 arms

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/999688

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX