133、springcloud-hystrix 服务监控的告警机制
Springcloud-hystrix组件可以用来进行服务的熔断和降级,
当一个服务出现问题的时候,也可以在降级的方法里面通过发送短信和邮件的形式来进行告警
下面来讲解,如何在hystrix的降级方法里面,进行发短信通知,进行告警的操作
1、首先要引入springboot和redis集成的相关依赖包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>
2、之后,需要在application.yml配置文件中添加redis服务的主机信息和密码,还有端口号
eureka:client:serviceUrl:defaultZone: http://localhost:8181/eureka
spring:application:name: eureka-client-orders-feignredis:host: 127.0.0.1port: 6379timeout: 2000password:server:port: 8188
ribbon:eureka:enabled: truefeign:# 开启feign对hystrix熔断降级的支持hystrix:enabled: true# 修改调用超时时间client:config:default:connectTimeout: 500readTimeout: 500
3、最后在降级的方法里面将异常标志存入到redis中,然后进行告警
package pafc.cloud.feignclient.controller;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import io.netty.util.internal.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import pafc.cloud.feignclient.service.OrderService;import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;@Controller
@RequestMapping("/orderIdQuery")
public class IndexController {@Autowiredpublic OrderService orderService;@Autowiredprivate StringRedisTemplate redisTemplate;@ResponseBody@HystrixCommand(fallbackMethod = "saveOrderFail")@RequestMapping(value = "/createOrder", method = RequestMethod.GET)public Object allGoods() throws InterruptedException {
// TimeUnit.SECONDS.sleep(10);Map<String, Object> data = new HashMap<>();data.put("code", 0);data.put("data", orderService.getOrderById("0"));return data;}/*** 进行熔断降级** @return*/private Object saveOrderFail() {String saveKey = "save-order";String saveValue = redisTemplate.opsForValue().get(saveKey);new Thread(() -> {if (StringUtil.isNullOrEmpty(saveValue)) {System.out.println("下单失败,需要紧急查看");//发送一个http请求,发送短信redisTemplate.opsForValue().set(saveKey, "save-order-fail", 20, TimeUnit.SECONDS);} else {System.out.println("已经发送过短信,20秒内请不要重复发送");}}).start();Map<String, Object> msg = new HashMap<>();msg.put("code", -1);msg.put("msg", "抢购人数太多,您被挤出来了,稍等重试");return msg;}}
4、启动服务进行测试,把所有的商品服务都给关掉,模拟商品服务超时或者宕机
测试结果如下所示
2020-04-05 11:13:51.731 INFO 11008 --- [-CLIENT-GOODS-1] c.n.l.DynamicServerListLoadBalancer : DynamicServerListLoadBalancer for client EUREKA-CLIENT-GOODS initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=EUREKA-CLIENT-GOODS,current list of Servers=[localhost:8184, localhost:8183],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:2; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]
},Server stats: [[Server:localhost:8183; Zone:defaultZone; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
, [Server:localhost:8184; Zone:defaultZone; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@a673dbc
订单服务,调用商品服务异常
2020-04-05 11:13:52.532 INFO 11008 --- [ HystrixTimer-1] io.lettuce.core.EpollProvider : Starting without optional epoll library
2020-04-05 11:13:52.537 INFO 11008 --- [ HystrixTimer-1] io.lettuce.core.KqueueProvider : Starting without optional kqueue library
2020-04-05 11:13:52.676 INFO 11008 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty : Flipping property: EUREKA-CLIENT-GOODS.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
下单失败,需要紧急查看
订单服务,调用商品服务异常
下单失败,需要紧急查看
订单服务,调用商品服务异常
已经发送过短信,20秒内请不要重复发送
2020-04-05 11:17:40.120 INFO 11008 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
2020-04-05 11:22:40.121 INFO 11008 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
2020-04-05 11:27:40.126 INFO 11008 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
可以看到系统已经检测到商品服务出现了超时或者宕机
并且已经将告警信息写入到了Redis中。通知维护人员进行检查。
133、springcloud-hystrix 服务监控的告警机制相关推荐
- Hystrix服务监控
Hystrix服务监控 SpringCloud全家桶 学习目标 加入小编的Java学习交流君羊(785794074)暗号:67 Actuator 除了实现服务容错之外,Hystrix 还提供了近乎实时 ...
- SpringCloud 微服务监控方案sentinel + spring boot admin
SpringCloud 微服务监控方案sentinel + spring boot admin 前言:项目基于springcloud框架,服务注册中心使用的是Eureka spring boot ad ...
- zabbix4.0添加mysql报警_部署监控三剑客 Zabbix4.0 监控以及告警机制
Zabbix 简介 : Zabbix 是一个高度集成的企业级开源网络监控解决方案,与Cacti.Nagios类似,提供分布式监控以及集中的 Web 管理界面.被监控对象只要支持 SNMP 协议或者运行 ...
- 微服务架构 — 服务治理 — 服务监控与告警、服务日志与审计
目录 文章目录 目录 日志与审计 监控与告警 配置中心 文档中心 日志与审计 日志分析组件应该在微服务兴起之前就被广泛使用了.即使单体应用架构,当访问数变大.或服务器规模增多时,日志文件的大小会膨胀到 ...
- prometheus 配置服务器监控、服务监控、容器中服务监控与告警
最近公司有几个服务遇到了瓶颈,也就是数据量增加了,没有人发现,这不是缺少一个监控服务和告警的系统吗? 主要需求是监控每个服务,顺带监控一下服务器和一些中间件,这里采集的2种,zabbix和promet ...
- springcloud(Hystrix服务降级,服务熔断)
基础知识 首次分布式服务系统面临的问题 复杂的分布式体系结构中的应用程序有数十个依赖关系,每个依赖有时候难免发生问题,这个时候可能引发连锁反应,导致整个系统雪崩. 所以就有了Hystrix: 官网地址 ...
- SpringCloud Hystrix服务熔断和降级的理解
(个人理解,不喜勿喷)假如我要开发一个项目,但是开发的过程中遇到一个问题,我不会操作数据库(包括数据库连接,数据查询等),我只能向我的朋友请教,朋友A会使用Hibernate,朋友B会JDBC访问数据 ...
- springcloud的处理雪崩效应的Hystrix和服务监控Dashboard
服务雪崩效应 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败. 正常情况下的访问 : 但是,当请求的服务中出现无法访问.异常.超时等问题时(图中的I),那么用户 ...
- springCloud - 第13篇 - 服务监控 集群模式 Hystrix-turbine
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 在springcloud 体系中,可以用 hystrix-dashboard 实时监控服务的 ...
最新文章
- 所有各数据库或文件的连接串定义CHM文件.
- 从配置文件到分布式配置管理QConf
- HTML5 开发APP
- php 递归实现无限极分类和排序_PHP无限级分类实现层级值间用字符串拼接
- a4988 脉宽要求_Allegro MicroSystems - A4988: 带转换器和过流保护的 DMOS 微步驱动器
- python 快速删除程序_如何快速一次性卸载所有python包(第三方库)呢
- 配置环境_python虚拟环境的搭建
- 2018年度人工智能优化商业运作的10大途径
- php隔行符,PHP PHP_EOL 换行符
- 初中数学抽象教学的案例_初中数学教学反思案例
- 干货:18 张思维导图,后端技术学习路线长这样!
- 10个免费域名转发地址 无广告 无需要注册
- workbench拓扑优化教程_ANSYS经典案例在Workbench中实现 | 基于网格重划分的金属成型仿真分析...
- [译]应用内搜索功能实现 Android TV应用程序手册教程十三
- AccessHelper
- 手机自带的一些很实用的小程序,您都用过了吗?
- 转载:H.264 H.265 硬件解码芯片?
- 仓储物流系统初级架构
- 鸿蒙升级后桌面背景底纹怎么弄,ps添加背景怎么弄
- 多种调度算法的平均周转时间算例