Sentinel 入门

原创
2020/03/11 17:03
阅读数 3.2W

摘要

入门级的使用sentinel。

入门示例

服务端启动sentinel-dashboard

  1. 下载 sentinel 源码
  2. 启动 dashboard。 run DashboardApplication 的main方法,
  3. 登录dashboard . 默认端口是 8080,默认账号密码是 sentinel、sentinel。这个可以在application.properties文件中配置。

效果如下:

刚开始这里是没有数据的。 等后续有限流数据上报这里才会有数据展示。

客户端应用接入sentinel dashboard

引入jar

<dependency>
			<groupId>com.alibaba.csp</groupId>
			<artifactId>sentinel-core</artifactId>
			<version>1.7.2-SNAPSHOT</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba.csp</groupId>
			<artifactId>sentinel-transport-simple-http</artifactId>
			<version>1.7.2-SNAPSHOT</version>
		</dependency>

示例代码

下面的例子是一个简单的qps限流策略。

@RequestMapping("sentinel")
	public String sentinel() {
	    initFlowRules();
		String resourceName = "testSentinel";
		Entry entry = null;
		String retVal;
		try {
			entry = SphU.entry(resourceName, EntryType.IN);
			retVal = "passed";
		}catch(Exception e) {
			retVal = "blocked";
		}finally {
			if(entry != null) {
				entry.exit();
			}
		}
		
		return retVal;
		
	}
	
	private static void initFlowRules(){
	    List<FlowRule> rules = new ArrayList<>();
	    FlowRule rule = new FlowRule();
	    rule.setResource("testSentinel");// 资源名称
	    rule.setGrade(RuleConstant.FLOW_GRADE_QPS); //qps 降级
	    rule.setCount(2); // 每秒 2次,超过2次就失败
	    rules.add(rule);
	    FlowRuleManager.loadRules(rules);
	}

属性配置

属性可以通过jvm参数注入,也可以通过 classpath:sentinel.properties 配置。但是project.name这个当前版本只支持jvm参数注入,不支持配置在sentinel.properties文件里面。所以建议通过jvm注入。

jvm参数注入:

-Dproject.name=sentinel-demo -Dcsp.sentinel.dashboard.server=127.0.0.1:8080 -Dcsp.sentinel.api.port=8081

sentinel.properties 里面

# 本地http服务端口
csp.sentinel.api.port=8081
# dashboard 访问IP:port
csp.sentinel.dashboard.server=127.0.0.1:8080
#客户端向dashboard 发送心跳包的时间间隔,单位毫秒
csp.sentinel.heartbeat.interval.ms=1000

# 当前版本 1.7 ,只能通过jvm 参数注入,不能配置在这里  -Dproject.name=sentinel-demo
#project.name=sentinel-demo

更多参数配置见参考文档。

启动之后 效果如下:

查看客户端阻塞日志

阻塞日志默认是放在 ${user.home}/logs/csp/sentinel-block.log 这个文件里。这里的日志记录只有发生阻塞了才有,不是每次请求都有日志。

比如我本地就是这个文件:

/Users/**/logs/csp/sentinel-block.log

日志格式如下:

时间戳 | 该秒发生的第一个资源 | 资源名称,拦截的原因,接口调用来源,|被拦截资源的调用者,被拦截的数量,最后的0没有意义
2020-03-11 23:53:00|1|testSentinel,FlowException,default,|3,0

详细介绍参考:日志

查看客户端统计日志

文件是 ${user.home}/logs/csp/${appName}-metrics.log.${date},我本地是这个

/Users/michaelfeng/logs/csp/sentinel-demo-metrics.log.2020-03-11

日志格式:

时间戳|时间|资源|通过的请求|阻止的请求数|成功执行完成的请求数|用户自定的异常|平均响应时长
1583943002000|2020-03-12 00:10:02|testSentinel|1|0|1|0|0|0|0|0
1583943002000|2020-03-12 00:10:02|__total_inbound_traffic__|1|0|1|0|0|0|0|0

这里每一行代表一秒的统计数据。 有数据才会落一行日志,没有数据则不落日志。

业务日志

其它的日志在 ${user_home}/logs/csp/sentinel-record.log.xxx 里。该日志包含规则的推送、接收、处理等记录,排查问题的时候会非常有帮助。

参考文档

sentinel 客户端配置项参数详解

sentinel日志

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部