自己写代码来定义一个metrics,然后让prmetheus收走,在grafana里面定义一个panel并展示出来。
prometheus的四种metrics指标。虽然所有的metrics都是数字,但是数字和数字之间还不一样。
counter:比如说请求的总量,cpu的使用时间
Gauge:统计的数,是可增加也可以减少的,比如说当前业务使用的内存的大小。垃圾回收后,内存就会减少。
Hostogram:用来做数据分布统计,比如说请求的响应时间来举例子,某个应用收了100个请求,在这100个请求里面,响应时间在0到100毫秒的有多少。100毫秒到300毫秒的有多少个。300毫秒到500毫秒的有多少个。它可以统计出这个数来。这0到100,100到300 ,300到500 这些就是 bucket桶,bucket是用来装数据的,bucket可以自己定义,
Summary:用来做数据分布统计,统计出来不是一个绝对的数,而是比率。还是拿响应时间来举例子,用summary统计出来的,你这100个请求里有百分九十的请求小于100毫秒返回的,然后有99%的请求都是在150毫秒返回的。它是能告诉你这个数据,在一个比例的之间里面有多少请求。
写代码
统计创建订单的服务被调用了多少次,getInfo订单信息的服务被调用了多少次。
pom的这个里面已经引用了metrics了,但是这个里面是按照状态码来统计的。状态码是200的请求是多少,500的请求是多少。
但是我们现在想知道创建订单和获取订单分别被调用了多少次。这个现在是没法满足的,需要我们自己写一个指标的处理器来处理。我们用的指标的类型就是刚才讲的counter.counter是只增不减的。我的访问次数永远是只增不减的
定义counter
加上@Configuration注解
注入prometheus的注册器,然后自己写一个指标。注册到注册器上去。
这样我们在访问prometheus的端点的时候就能看到,我给它系统的这个指标了。
这个包下的Counter。这个就是我们要的计数器。
用Counter的build方法,用里面有两个参数的那个方法,第一个参数是指标的名字。
metrics的名字就是我们在这里看到的类似这种的
就是大括号前面之前的
第二个参数是Help。就是一个说明、描述性的文字。
要在这个指标上带哪些标签。
通过labelNames来指定。service代表是哪个请求,method代表是get还是post方法,code代表返回的状态码。
注册到peometheus的注册器上。
这样prometheus的metrics指标上就会多一个is_request_count的指标。但是它现在还没有值,
我们需要让他用这个counter去计数。什么时候计数呢?我们需要在拦截器那,用拦截器拦住所有的请求,然后来计数。
创建prometheus的拦截器
继承handlerInterceptor
直接声明称Spring的组件。
注入Counter,然后覆盖掉afterCompletion,不管你的请求是成功还是失败,最终会进入到这个方法里面来。
这里定义了三个标签。
这里就要给它传三个值
状态码是一个int类型转换成String类型
调用它的inc方法,就是把这个counter往上加1
让interceptor生效
创建一个配置类,实现WebMvcConfigurer
在这里面 我们把interceptor加进去。
注入我们自己写的interceptor。然后注册上去,并制定所有的请求,都拦截。
最后修改下orderController的参数接收方式
启动测试
刷新端点,然后搜索我们自己定义的指标。指标有了但是没有数据。
调用orders方法。多点击几次。
再调用 获取订单的方法。多点击几次
可以看到我们自己定义的指标有数据了 。这样我就把服务的调用信息加到prometheus的端点上了。然后吧这个metrics暴露出来了。
定义dashboard
下面去grafana里面定义个dashboard把数据展示出来。
加一个新的dashboard
进入到编辑页面
起个名字
首先选择数据源,这选择Prometheus.
下面就是要写查询语句,这就是我们要查的东西。
创建订单的方法被调用了多少次。
每隔5秒采一次样,然后显示最近5分钟的数据
保存这个dashboard
再进去到编辑页面
选择当前最近的一次采集的数据
多调用几次orders方法
这里的数据就变成10了
前缀和后缀
当前的值是10小于20所以显示第一个颜色。
这里过户选的是Value的话 就是数字的颜色
1在5和20之间 所以就显示第二个颜色。
上面值的曲线。
在多访问几次接口,曲线应该还会往上走。
结束