一、为什么监控,监控什么内容?
- 对系统的运行状态了如指掌,有问题及时发现,而不让用户先发现我们系统不能使用。
- 在应用程序中,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析。在很多时候,我们可能需要知道我们服务的运行情况,例如:
- 每秒钟的请求数是多少(TPS)?
- 平均每个请求处理的时间?
- 请求处理的最长耗时?
- 请求处理正确响应率?
- 等待处理的请求队列长度?
- 查看整个系统的的CPU使用率、内存占用、jvm运行情况;以及系统运行出错率等
二、监控的目的
- 长期趋势分析:比如资源用量预测
- 对照分析:比如两个版本系统运行资源使用情况差异
- 告警:当系统出现或者即将出现故障时,监控系统需要迅速反应并通知管理员
- 故障分析与定位:通过对不同监控以及历史数据分析,能快速找到并解决根源问题
- 数据可视化:通过可视化仪表盘能直接获取系统运行情况、资源使用情况、以及服务运行状态等直观信息。
实时数据采集时,最简单的方法就是在系统的入口、出口和关键位置设置埋点,然后将采集到的信息发送到实时监控平台或者存入到缓存和DB中做进一步的分析和展示。
Metrics作为一款监控指标的度量类库,提供了许多工具帮助开发者来完成各项数据的监控。
详见官方文档:https://metrics.dropwizard.io/3.1.0/manual/core/
一、Metrics 工具类库的介绍
Metrics提供5种基本的度量类型:Meters、Gauges、Counters、Histograms 和 Timers
1.设置maven依赖
<dependencies>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-healthchecks</artifactId>
<version>3.2.6</version>
</dependency>
</dependencies>
2.Meters 的介绍与使用
//Meter(测量)是一种只能自增的计数器,通常用来度量一系列事件发生的概率。它提供了平均速率,以及指数平滑平均速率,以及采样后的1分钟,5分钟,15分钟的样例。
public class MetricsExample {
//创建注册表
private final static MetricRegistry registry = new MetricRegistry();
//创建tps测量表
private final static Meter requestMeter = registry.meter("tps");
//创建异常测量表
private final static Meter errorMeter = registry.meter("err_request");
public static void main(String[] args) {
//数据生成报告(按每分钟来统计)
ConsoleReporter report = ConsoleReporter.forRegistry(registry)
.convertRatesTo(TimeUnit.MINUTES)
.convertDurationsTo(TimeUnit.MINUTES)
.build();
report.start(10, TimeUnit.SECONDS); //每10秒将数据打印到控制台上
for(;;){ //模拟一直调用请求
getAsk(); //发送请求
randomSleep(); //间隔的发送请求
}
}
//处理请求方法
public static void getAsk(){
try {
requestMeter.mark();
randomSleep();
int x = 10/ThreadLocalRandom.current().nextInt(6);
} catch (Exception e) {
System.out.println("Error");
errorMeter.mark();
}
}
//模拟处理请求耗时
public static void randomSleep(){
try {
TimeUnit.SECONDS.sleep(ThreadLocalRandom.current().nextInt(10)); //随机休眠时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//打印结果如下
-- Meters ----------------------------------------------------------------------
err_request
count = 1
mean rate = 1.50 events/minute
1-minute rate = 0.75 events/minute
5-minute rate = 0.19 events/minute
15-minute rate = 0.07 events/minute
tps
count = 4
mean rate = 5.99 events/minute
1-minute rate = 8.85 events/minute
5-minute rate = 11.24 events/minute
15-minute rate = 11.74 events/minute
网友评论