prometheus+springboot自定义监控指标

自己为了记录最近查到的资料 先记录下来 没去验证 不对文章负责

为了能自定义监控业务指标我们需要对springboot进行自定义监控。所以在这里我们用的是Micrometer,SpringBoot 2.0开始全面更改为Micrometer,Micrometer与Spring属于同门,都是Pivotal旗下的产品。

Micrometer工具

Micrometer为最流行的监控系统提供了一个简单的仪表客户端外观,允许仪表化JVM应用,而无需关心是哪个供应商提供的指标。Micrometer提供一组核心抽象API。核心内容包含在micrometer-core包中,每种开箱提供都有对应的Jar包,直接引入即可使用。

介绍

Meter

Meter是收集关于你的应用的一系列指标的接口。Meter是由MeterRegistry创建的。每个支持的监控系统都必须实现MeterRegistry。Meter也是所有度量的抽象,Micrometer提供了一组原生Meter类型,包括timer(计时器), gauge(量规), counter(计数器), distribution summaries(分布式摘要), long task timers(长任务定时器)。Meter由name和dimension来唯一标识,在Micrometer中dimension又等价于tag。name是监控项的名称,tag可以作为监控的指标内容,比如name:接口请求量;tag:接口url。这样便于分组利于统计分类。

Registry

Registry是Meter的注册中心,由Registry创建Meter并统一管理Meter,每个监控系统都有对应的MeterRegistry实现。Micrometer默认提供了基于内存、便于测试的SimpleRegistry以及一个静态全局注册表(Metrics.globalRegistry)。全局注册表是一个组合注册表(CompositeMeterRegistry ),当需要对接多个监控系统时,可以使用组合注册表并向其中添加多个Registry。
Micrometer中包含一个SimpleMeterRegistry,它在内存中维护每个meter的最新值,并且不将数据导出到任何地方。如果你还没有一个首选的监测系统,你可以先用SimpleMeterRegistry:
MeterRegistry registry = new SimpleMeterRegistry();
SimpleMeterRegistry在Spring中是自动注入的

Meter Filter

每个注册表都可以配置Meter过滤器,在工作项目中引入不同的依赖或者配合不同的工具往往需要传递MeterRegistry或者直接使用全局静态Registry,为了方便开发者收集指定的数据,或者对注册的Meter进行转换修改,Micrometer提供了Meter过滤器用于编写规则拒绝、转换或配置注册的Meter。

简单使用

Counter

计数器,它允许你增加固定的数量,且数量必须为正数,也就是说它描述一个递增的值。

// 第一种方式
MeterRegistry registry = new SimpleMeterRegistry();
// meterRegistry.counter("监控项名称", "tag的key", "tag的value");
Counter counter = meterRegistry.counter("urlCounter", "url", "http://localhost:9999/test");
counter.increment();

第二种方式
Counter metricsCounter = Metrics.counter("urlCounter", "url", "http://localhost:9999/test");
metricsCounter.increment();

Gauge

gauge是获取当前值的句柄,可以理解为直接的数值指标,典型的例子是线程池的活跃线程数量、集合的大小等,当指标不是递增的而是一个上下浮动的值时,你应该采用Gauge,同时Gauge也翻译为仪表盘,典型如汽车的速度仪表,这样就非常好理解了。


// 直接创建
Set<Tag> tagList = new HashSet<>();
tagList.add(Tag.of("tag1", "tag1value"));
tagList.add(Tag.of("tag2", "tag2value"));
Metrics.gauge("keyname", tagList, num);

// 构造器创建
Gauge gauge = Gauge
    .builder("orderNum", myObj, myObj::gaugeValue)
    .tag("region", "test")
    .register(registry);

// 直接创建
MeterRegistry registry = new SimpleMeterRegistry();
List<String> list = registry.gauge("listGauge", Collections.emptyList(), new ArrayList<>(), List::size); //监视非数值对象
List<String> list2 = registry.gaugeCollectionSize("listSize2", Tags.empty(), new ArrayList<>()); //监视集合大小
Map<String, Integer> map = registry.gaugeMapSize("mapGauge", Tags.empty(), new HashMap<>()); 

Timer

Timer稍微有点绕,Timer记录的是单个事件执行消耗的时间,用于测量事件发生的频率和效率,例如统计一个小时内某个接口有多少次请求以及每次请求响应时间的平均值时,就可以用到Timer。注意Timer在事件结束时记录数据,每条记录代表一个时间段,在统计时需要注意区间的取值。

// 构造器创建
Timer timer = Timer
    .builder("my.timer")
    .description("a description of what this timer does") // optional
    .tags("region", "test") // optional
    .register(registry);

// 直接从Registry创建
registry.timer("my.timer", "region", "test");

// record directly
timer.record(Duration.of(60L, ChronoUnit.SECONDS)); 
// record function
timer.record(() -> {
     // some operation ...
}); 
// wrap function
timer.wrap(() -> yourFunction());
// use sample
Timer.Sample sample = Timer.start();
    // do something
sample.stop(timer);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容