V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stonerAAA
V2EX  ›  Java

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

  •  
  •   stonerAAA · 2023-12-12 14:17:40 +08:00 · 2725 次点击
    这是一个创建于 371 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    17 条回复    2024-04-02 14:56:10 +08:00
    beneo
        1
    beneo  
       2023-12-12 14:18:49 +08:00   ❤️ 2
    购买 阿里云 ARMS 服务
    salmon5
        2
    salmon5  
       2023-12-12 14:30:49 +08:00   ❤️ 1
    正常公司
    购买 ARMS √

    2B 公司
    自己开 ECS 搭建 SkyWalking ×
    irisShaw
        3
    irisShaw  
       2023-12-12 14:32:13 +08:00   ❤️ 1
    如果配置了 access.log 的话,配合 awk 和 sed 可以统计。不过最简便的还是买阿里云的服务。
    irisShaw
        4
    irisShaw  
       2023-12-12 14:33:15 +08:00
    @salmon5 哈哈哈,我老东家就是自己搭的 SkyWalking
    fengpan567
        5
    fengpan567  
       2023-12-12 14:34:02 +08:00   ❤️ 1
    去统计 nginx 的日志
    sunsun
        6
    sunsun  
       2023-12-12 14:44:47 +08:00   ❤️ 1
    目前负责的小项目数据库用的是 aws RDS ,一般排查都是直接去 performance insight 里面看哪些 sql 调用的多,具体的耗时也都有,这个功能也是后来同事小伙伴发现的(需要手动开启),不知道阿里云有没有这样的功能可以开启
    chocotan
        7
    chocotan  
       2023-12-12 15:16:49 +08:00   ❤️ 1
    自己玩儿可以用 micrometer 然后输出到 promethues 用 grafana 展示
    qoo2019
        8
    qoo2019  
       2023-12-12 15:28:54 +08:00   ❤️ 1
    @salmon5 我司就属于 2B 公司,主要原因还是穷
    arms 一个 agent 一天 4 快多,扛不住
    seanxx
        9
    seanxx  
       2023-12-12 15:59:31 +08:00   ❤️ 1
    micrometer 自己埋点
    stonerAAA
        10
    stonerAAA  
    OP
       2023-12-12 16:33:00 +08:00
    感谢楼上的诸位大佬,关于上 ARMS ,花钱的事我司是不会同意的,刚刚在生产环境 kibana 翻了翻,发现有个 APM 有类似的的功能,我再看看。
    salmon5
        11
    salmon5  
       2023-12-12 16:43:21 +08:00
    @stonerAAA ARMS 可以按量使用,服务端不用的时候再关掉。
    ikas
        12
    ikas  
       2023-12-12 20:10:44 +08:00   ❤️ 4
    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
        13
    arloor  
       2023-12-12 22:15:31 +08:00 via Android
    为什么推荐 arms 不推荐 sls
    SilenceLL
        14
    SilenceLL  
       2023-12-13 10:01:10 +08:00
    apm ,skywalking
    Aresxue
        15
    Aresxue  
       2023-12-13 11:55:44 +08:00   ❤️ 2
    典型的 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
        16
    wanniwa  
       2023-12-13 14:27:41 +08:00
    skywalking
    halk
        17
    halk  
       259 天前
    @irisShaw #4 skywalking 这东西对 DB 的压力比较大,换成 ES 存储又涉及成本,不论是自建还是购买云服务
    刚开始试用 arms
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3552 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:27 · PVG 12:27 · LAX 20:27 · JFK 23:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.