• 系统监控


    一、为什么监控,监控什么内容?

    • 对系统的运行状态了如指掌,有问题及时发现,而不让用户先发现我们系统不能使用。
    • 在应用程序中,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析。在很多时候,我们可能需要知道我们服务的运行情况,例如:
      • 每秒钟的请求数是多少(TPS)?
      • 平均每个请求处理的时间?
      • 请求处理的最长耗时?
      • 请求处理正确响应率?
      • 等待处理的请求队列长度?
      • 查看整个系统的的CPU使用率、内存占用、jvm运行情况;以及系统运行出错率等

    二、监控的目的

    • 长期趋势分析:比如资源用量预测
    • 对照分析:比如两个版本系统运行资源使用情况差异
    • 告警:当系统出现或者即将出现故障时,监控系统需要迅速反应并通知管理员
    • 故障分析与定位:通过对不同监控以及历史数据分析,能快速找到并解决根源问题
    • 数据可视化:通过可视化仪表盘能直接获取系统运行情况、资源使用情况、以及服务运行状态等直观信息。

    实时数据采集时,最简单的方法就是在系统的入口、出口和关键位置设置埋点,然后将采集到的信息发送到实时监控平台或者存入到缓存和DB中做进一步的分析和展示。

    Metrics作为一款监控指标的度量类库,提供了许多工具帮助开发者来完成各项数据的监控。

    详见官方文档:https://metrics.dropwizard.io/3.1.0/manual/core/

    一、Metrics 工具类库的介绍

    Metrics提供5种基本的度量类型:Meters、Gauges、Counters、Histograms 和 Timers

    1.设置maven依赖

    1. <dependencies>
    2. <dependency>
    3. <groupId>io.dropwizard.metrics</groupId>
    4. <artifactId>metrics-core</artifactId>
    5. <version>3.2.6</version>
    6. </dependency>
    7. <dependency>
    8. <groupId>io.dropwizard.metrics</groupId>
    9. <artifactId>metrics-healthchecks</artifactId>
    10. <version>3.2.6</version>
    11. </dependency>
    12. </dependencies>

    2.Meters 的介绍与使用

    1. //Meter(测量)是一种只能自增的计数器,通常用来度量一系列事件发生的概率。它提供了平均速率,以及指数平滑平均速率,以及采样后的1分钟,5分钟,15分钟的样例。
    2. public class MetricsExample {
    3. //创建注册表
    4. private final static MetricRegistry registry = new MetricRegistry();
    5. //创建tps测量表
    6. private final static Meter requestMeter = registry.meter("tps");
    7. //创建异常测量表
    8. private final static Meter errorMeter = registry.meter("err_request");
    9. public static void main(String[] args) {
    10. //数据生成报告(按每分钟来统计)
    11. ConsoleReporter report = ConsoleReporter.forRegistry(registry)
    12. .convertRatesTo(TimeUnit.MINUTES)
    13. .convertDurationsTo(TimeUnit.MINUTES)
    14. .build();
    15. report.start(10, TimeUnit.SECONDS); //每10秒将数据打印到控制台上
    16. for(;;){   //模拟一直调用请求
    17. getAsk();  //发送请求
    18. randomSleep(); //间隔的发送请求
    19. }
    20. }
    21. //处理请求方法
    22. public static void getAsk(){
    23. try {
    24. requestMeter.mark();
    25. randomSleep();
    26. int x = 10/ThreadLocalRandom.current().nextInt(6);
    27. } catch (Exception e) {
    28. System.out.println("Error");
    29. errorMeter.mark();
    30. }
    31. }
    32. //模拟处理请求耗时
    33. public static void randomSleep(){
    34. try {
    35. TimeUnit.SECONDS.sleep(ThreadLocalRandom.current().nextInt(10)); //随机休眠时间
    36. } catch (InterruptedException e) {
    37. e.printStackTrace();
    38. }
    39. }
    40. }
    1. //打印结果如下
    2. -- Meters ----------------------------------------------------------------------
    3. err_request
    4. count = 1
    5. mean rate = 1.50 events/minute
    6. 1-minute rate = 0.75 events/minute
    7. 5-minute rate = 0.19 events/minute
    8. 15-minute rate = 0.07 events/minute
    9. tps
    10. count = 4
    11. mean rate = 5.99 events/minute
    12. 1-minute rate = 8.85 events/minute
    13. 5-minute rate = 11.24 events/minute
    14. 15-minute rate = 11.74 events/minute
  • 相关阅读:
    RequestContextHolder详解
    Laravel快速接入JWT用户认证(多用户认证)tymon/jwt-auth
    关于<dependencyManagement>和<dependencies>
    mysql约束
    Tomcat设置IP黑名单和白名单server.xml
    数字图像处理——实验四 数字图像的边缘检测实验
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    蛋白质致病突变的计算方法(二)
    c语言分层理解(c语言结构体(下))
    Java版B/S架构云his医院信息管理系统源码(springboot框架)
  • 原文地址:https://blog.csdn.net/pyycsd/article/details/125536399