在微服务架构中,Hystrix 除了实现容错外,还提供了实时监控功能。
在服务调用时,Hystrix 会实时累积关于 HystrixCommand 的执行信息,比如每秒的请求数、成功数等。
Hystrix 监控需要两个必备条件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
访问:
http://localhost:port/actuator/hystrix.stream
我们已经知道 Hystrix 提供了监控的功能,可以通过 hystrix.stream 端点来获取监控数据,
但是这些数据是以字符串的形式展现的,实际使用中不方便查看。
我们可以借助 Hystrix Dashboard 对监控进行图形化展示。
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
application.yml
//开启了所有健康监测的访问接口,默认只开启了health和info,也开启了hystrix的仪表盘访问
management:
endpoints:
web:
exposure:
include: '*'
启动类
@EnableHystrix
@EnableHystrixDashboard
访问:
http://localhost:56712/hystrix
地址: 监控哪个服务
delay : 多少毫秒刷新监测
title: 监测名称(随意)
第一列 针对的是request
第一个绿色的数字,代表成功访问请求的数量,对应横向的绿色Success。
第二个蓝色的数字,代表发生断路的次数: 对应横向的蓝色Short-Circuited
第三个青色的数字,代表错误请求的数量 对应横向的青色Bad Request
第二列 针对的是response
第一个橙色的数字,代表超时访问的数量 对应横向的橙色TimeOut
第二个紫色的数字,代表拒绝访问的数量 对应横向的紫色Rejected
第三个红色的数字,代表失败的服务数量 对应横向的红色Failed
重要: Circuit 代表熔断器是否打开 open/close
可以使用postman来测试
localhost:56700/teacher/login
{
"username":"test01",
"password":"123"
}
localhost:56700/teacher/profile
headers
token : Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMTY1OTExMzQzNTcyNzY2NzIyIiwic3ViIjoi5byg5LiJIiwiaWF0IjoxNTY5OTEyODY5LCJhcGlzIjoiQVBJLVNUVURFTlQtRVhBTS1MSVNULCIsIm5pY2tOYW1lIjoi5byg5LiJIiwidXNlcklkIjoiMTE2NTkxMTM0MzU3Mjc2NjcyMiIsImV4cCI6MTU2OTkxNjQ2OX0.gOn3o66jh09LWmGxBRz1yF06wnDZ6k0PPxliJeZxnMA
localhost:56700/student/exam/getAnswerQuestionStudentList
headers
token : Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMTY1OTExMzQzNTcyNzY2NzIyIiwic3ViIjoi5byg5LiJIiwiaWF0IjoxNTY5OTEyODY5LCJhcGlzIjoiQVBJLVNUVURFTlQtRVhBTS1MSVNULCIsIm5pY2tOYW1lIjoi5byg5LiJIiwidXNlcklkIjoiMTE2NTkxMTM0MzU3Mjc2NjcyMiIsImV4cCI6MTU2OTkxNjQ2OX0.gOn3o66jh09LWmGxBRz1yF06wnDZ6k0PPxliJeZxnMA
body:
{
"askCount": null,
"askJoins": null,
"askScore": null,
"chapterIds": "1166263291698312169",
"chapterIdsArray": null,
"classId": "1165965535742021634",
"className": "Y2T11班",
"examName": "1111111",
"examStatus": "4",
"examTime": "2019-09-02T16:00:00.000+0000",
"examTimeLength": 124,
"examType": "1",
"id": "1177847561151582210",
"modifyName": "",
"modifyTime": "2019-09-28T09:23:53.000+0000",
"mutipleCount": 5,
"mutipleJoins": "1173975195879292929,1173974582034513921,1173973956240162817,1173973119703007234,1173974376522006529",
"mutipleScore": 10,
"personNumber": 2,
"questionTypeIds": "1,2",
"questionTypeIdsArray": null,
"singleCount": 5,
"singleJoins": "1173971848543682561,1173786581987823618,1173972453286821890,1173971944765210625,1177772963345207298",
"singleScore": 10
}