30.Endpoints的各个指标

度量指标(Metrics)

  • Spring Boot执行器包括一个支持'gauge'和'counter'级别的度量指标服务。'gauge'记录一个单一值;'counter'记录一个增量(增加或减少)。同时,Spring Boot提供一个PublicMetrics接口,你可以实现它,从而暴露以上两种机制不能记录的指标。

  • 所有HTTP请求的指标都被自动记录,所以如果点击 metrics 端点,你可能会看到类似以下的响应:

{
"counter.status.200.root": 20,
"counter.status.200.metrics": 3,
"counter.status.200.star-star": 5,
"counter.status.401.root": 4,
"gauge.response.star-star": 6,
"gauge.response.root": 2,
"gauge.response.metrics": 3,
"classes": 5808,
"classes.loaded": 5808,
"classes.unloaded": 0,
"heap": 3728384,
"heap.committed": 986624,
"heap.init": 262144,
"heap.used": 52765,
"mem": 986624,
"mem.free": 933858,
"processors": 8,
"threads": 15,
"threads.daemon": 11,
"threads.peak": 15,
"uptime": 494836,
"instance.uptime": 489782,
"datasource.primary.active": 5,
"datasource.primary.usage": 0.25
}
  • 此处我们可以看到基本的 memory , heap , class loading , processor 和 thread pool 信息,连同一些HTTP指标。在该实例中, root ('/'), /metrics URLs分别返回20次,3次 HTTP 200 响应。同时可以看到 root URL返回了4次 HTTP 401 (unauthorized)响应。双asterix(star-star)来自于被Spring MVC /** 匹配到的一个请求(通常为一个静态资源)。

  • gauge 级别展示了一个请求的最后响应时间。所以, root 的最后请求被响应耗时2毫秒, /metrics 耗时3毫秒。

系统指标

  • Spring Boot暴露以下系统指标:
    系统内存总量(mem),单位:Kb
    空闲内存数量(mem.free),单位:Kb
    处理器数量(processors)
    系统正常运行时间(uptime),单位:毫秒
    应用上下文(就是一个应用实例)正常运行时间(instance.uptime),单位:毫秒
    系统平均负载(systemload.average)
    堆信息(heap,heap.committed,heap.init,heap.used),单位:Kb
    线程信息(threads,thread.peak,thead.daemon)
    类加载信息(classes,classes.loaded,classes.unloaded)
    垃圾收集信息(gc.xxx.count, gc.xxx.time)

数据源指标

  • Spring Boot会为你应用中定义的支持的DataSource暴露以下指标:
    最大连接数(datasource.xxx.max)
    最小连接数(datasource.xxx.min)
    活动连接数(datasource.xxx.active)
    连接池的使用情况(datasource.xxx.usage)

  • 所有的数据源指标共用 datasoure. 前缀。该前缀对每个数据源都非常合适:
    如果是主数据源(唯一可用的数据源或存在的数据源中被@Primary标记的)前缀为datasource.primary
    如果数据源bean名称以dataSource结尾,那前缀就是bean的名称去掉dataSource的部分(例如,batchDataSource的前缀是datasource.batch)
    其他情况使用bean的名称作为前缀

  • 通过注册一个自定义版本的DataSourcePublicMetrics bean,你可以覆盖部分或全部的默认行为。默认情况下,Spring Boot提供支持所有数据源的元数据;如果你喜欢的数据源恰好不被支持,你可以添加另外的DataSourcePoolMetadataProvider beans。具体参考DataSourcePoolMetadataProvidersConfiguration。

Tomcat session指标

  • 如果你使用Tomcat作为内嵌的servlet容器,session指标将被自动暴露出去。 httpsessions.active 和 httpsessions.max 提供了活动的和最大的session数量。

记录自己的指标

  • 想要记录你自己的指标,只需将CounterService或GaugeService注入到你的bean中。CounterService暴露increment,decrement和reset方法;GaugeService提供一个submit方法。

  • 下面是一个简单的示例,它记录了方法调用的次数:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.metrics.CounterService;
import org.springframework.stereotype.Service;
@Service
public class MyService {
    private final CounterService counterService;
    @Autowired
    public MyService(CounterService counterService) {
        this.counterService = counterService;
    }
    public void exampleMethod() {
        this.counterService.increment("services.system.myservice.invoked");
    }
}

注:你可以将任何的字符串用作指标的名称,但最好遵循所选存储或图技术的指南。Matt Aimonetti’s Blog中有一些好的关于图(Graphite)的指南。

添加你自己的公共指标

  • 想要添加额外的,每次指标端点被调用时都会重新计算的度量指标,只需简单的注册其他的PublicMetrics实现bean(s)。默认情况下,端点会聚合所有这样的beans,通过定义自己的MetricsEndpoint可以轻易改变这种情况。

指标仓库

  • 通过绑定一个MetricRepository来实现指标服务。 MetricRepository 负责存储和追溯指标信息。Spring Boot提供一个 InMemoryMetricRepository 和一个 RedisMetricRepository (默认使用in-memory仓库),不过你可以编写自己的 MetricRepository 。 MetricRepository 接口实际是 MetricReader 接口和 MetricWriter 接口的上层组合。具体参考Javadoc

  • 没有什么能阻止你直接将 MetricRepository 的数据导入应用中的后端存储,但我们建议你使用默认的 InMemoryMetricRepository (如果担心堆使用情况,你可以使用自定义的Map实例),然后通过一个scheduled export job填充后端仓库(意思是先将数据保存到内存中,然后通过异步job将数据持久化到数据库,可以提高系统性能)。通过这种方
    式,你可以将指标数据缓存到内存中,然后通过低频率或批量导出来减少网络拥堵。Spring Boot提供一个 Exporter 接口及一些帮你开始的基本实现。

Dropwizard指标

  • Dropwizard ‘Metrics’库的用户会发现Spring Boot指标被发布到了 com.codahale.metrics.MetricRegistry 。当你声明对 io.dropwizard.metrics:metrics-core 库的依赖时会创建一个默认的 com.codahale.metrics.MetricRegistry Spring bean;如
    果需要自定义,你可以注册自己的@Bean实例。来自于 MetricRegistry 的指标也是自动通过 /metrics 端点暴露的。

  • 用户可以通过使用合适类型的指标名称作为前缀来创建Dropwizard指标(比如, histogram.* , meter.* )。

消息渠道集成

  • 如果你的classpath下存在'Spring Messaging' jar,一个名为 metricsChannel 的 MessageChannel 将被自动创建(除非已经存在一个)。此外,所有的指标更新事件作为'messages'发布到该渠道上。订阅该渠道的客户端可以进行额外的分析或行动。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容