Spring cloud微服务安全实战-7-6自定义metrics监控指标(1)
自己写代码来定义一个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之间 所以就显示第二个颜色。
上面值的曲线。
在多访问几次接口,曲线应该还会往上走。
结束
Spring cloud微服务安全实战-7-6自定义metrics监控指标(1)的更多相关文章
- 《Spring Cloud微服务 入门 实战与进阶》
很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...
- Spring Cloud微服务安全实战_00_前言
一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介: 二.最终形成的架 ...
- Spring cloud微服务安全实战_汇总
Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课 ...
- Spring Cloud微服务安全实战_4-5_搭建OAuth2资源服务器
上一篇搭建了一个OAuth2认证服务器,可以生成token,这篇来改造下之前的订单微服务,使其能够认这个token令牌. 本篇针对订单服务要做三件事: 1,要让他知道自己是资源服务器,他知道这件事后, ...
- Spring Cloud微服务安全实战_4-3_订单微服务&价格微服务
实现一个场景: 订单微服务: POM: <?xml version="1.0" encoding="UTF-8"?> <project xml ...
- Spring cloud微服务安全实战 最新完整教程
课程资料获取链接:点击这里 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务 ...
- Spring cloud微服务安全实战-6-8sentinel限流实战
阿里2018年开源的. 简单来说就是干三件事,最终的结果就是保证你的服务可用,不会崩掉.保证服务高可用. 流控 先从最简单的场景来入手. 1.引用一个依赖, 2,声明一个资源. 3.声明一个规则 注意 ...
- Spring cloud微服务安全实战-6-4权限控制改造
授权,权限的控制 令牌里的scope包含fly就有权限访问.根据Oauth的scope来做权限控制, 要让@PreAuthorize生效,就要在启动类里面写一个注解. 里面有一个属性叫做,就是在方法的 ...
- Spring cloud微服务安全实战-6-2JWT认证之认证服务改造
首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递 ...
- Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
授权模式改造成了Authorization code完成了改造的同时也实现了SSO.微服务环境下的前后端分离的单点登陆. 把admin的服务重启.刷新页面 并没有让我去登陆,直接就进入了首页. ord ...
随机推荐
- HTML&CSS基础-内联样式和内部样式表
HTML&CSS基础-内联样式和内部样式表 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.CSS(Cascading Style Sheets)简介 层叠样式表(Cas ...
- 小程序~列表渲染~key
如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <input/> 中的输入内容, <switch/> 的选中状态),需要 ...
- Eclipse搭建maven web项目
最近在做做一个小实验,搭建ssm框架,要求使用maven来统一管理jar包,接下来就看如何建立maven项目,首先必须有要有相应的开发环境:JDK和maven,以及配置tomcat. 开发环境搭建可以 ...
- 关于jsp页面中name=“username”与name=“username ”的区别
我们可以仔细的观察一下,上面的name属性都等于username,但是确实存在大同小异的差距,为什么这样说呢,因为,第二个比第一个多了一个空格,在jsp中,我曾经遇到过一个情况就是两个单选按钮用同一个 ...
- 最详细的keepalived+lvs-dr配置文档
四台台机器: 分发器主:192.168.0.154 分发器备:192.168.0.171 rs_1:192.168.0.131 rs_2:192.168.0.132 keepalived安装: yum ...
- Python的可变类型和不可变类型?
Python的每个对象都分为可变和不可变可变:列表.字典 不可变:数字.字符串.元组
- IIS 站点配置文件
IIS 站点配置文件 C:/Windows/System32/inetsrv/config/applicationHost.config 配置文件示例: <system.application ...
- 多项式总结&多项式板子
多项式总结&多项式板子 三角/反三角是不可能放的(也不可能真香的 多项式乘法(DFT,FFT,NTT,MTT) 背板子 前置知识:泰勒展开 如果\(f(x)\)在\(x_0\)处存在\(n\) ...
- (转)React事件处理函数必须使用bind(this)的原因
1.JavaScript自身特性说明如果传递一个函数名给一个变量,之后通过函数名()的方式进行调用,在方法内部如果使用this则this的指向会丢失.示例代码:首先我们创建test对象并直接调用方法 ...
- Go字符串常用处理
应用到strings包 /** * @Author: jadeshu * @Description: * @File: main * @Version: 1.0.0 * @Date: 2019/11/ ...