sentinel 启动配置项
官网:https://sentinelguard.io/zh-cn/docs/general-configuration.html
启动配置项
参数设置
# 虚拟机设置:-Dkey=value,优先级最高
-Dcsp.sentinel.config.file=classpath:sentinel.properties
# 配置文件设置
-Dcsp.sentinel.config.file参数指定配置文件的位置,
默认为classpath:sentinel.properties,编码为UTF-8
基础配置项
project.name:项目名称,如果没有指定,默认为main函数的类名
csp.sentinel.app.type:应用类型,默认为0
csp.sentinel.metric.file.single.size:单个监控日志文件的大小,默认为50m
csp.sentinel.metric.file.total.count:监控日志文件的总数上限,默认为6
csp.sentinel.statistic.max.rt:最大的有效响应时长(ms),超出此值则按照此值记录,默认为4900
csp.sentinel.spi.classloader:SPI加载时使用的ClassLoader,默认为给定类的 ClassLoader
日志配置项
csp.sentinel.log.dir:sentinel日志目录,默认为${user.home}/logs/csp/
csp.sentinel.log.use.pid:日志文件名中是否加入进程号(区分单机部署多个应用的情况),默认false
csp.sentinel.log.output.type:日志输出类型,file(文件,默认)、console(控制台)
说明:如果一个机器部署多个应用,需将csp.sentinel.log.use.pid设置为true
sentinel-transport-common配置项
csp.sentinel.dashboard.server:控制台的地址,制定控制台后客户端会自动向该地址发送心跳包
csp.sentinel.heartbeat.interval.ms:心跳发送周期,单位毫秒
csp.sentinel.api.port:http api server的端口号,默认为8719(可不提供端口,若冲突会自动向下探测可用端口)
csp.sentinel.heartbeat.client.ip:指定心跳包中本机的ip
spring cloud配置类
SentinelProperties
@ConfigurationProperties(
prefix = "spring.cloud.sentinel"
)
@Validated
public class SentinelProperties {
private boolean eager = false;
private boolean enabled = true;
private String blockPage;
private Map<String, DataSourcePropertiesConfiguration> datasource;
private SentinelProperties.Transport transport;
private SentinelProperties.Metric metric;
private SentinelProperties.Servlet servlet;
private SentinelProperties.Filter filter;
private SentinelProperties.Flow flow;
private SentinelProperties.Log log;
private Boolean httpMethodSpecify;
private Boolean webContextUnify;
*********
Transport
public static class Transport {
private String port = "8719";
private String dashboard = "";
private String heartbeatIntervalMs;
private String clientIp;
*********
Metric
public static class Metric {
private String fileSingleSize;
private String fileTotalCount;
private String charset = "UTF-8";
*********
Servlet
public static class Servlet {
private String blockPage;
*********
Filter
public static class Filter {
private int order = -2147483648;
private List<String> urlPatterns = Arrays.asList("/**");
private boolean enabled = true;
*********
Flow
public static class Flow {
private String coldFactor = "3";
*********
Log
public static class Log {
private String dir;
private boolean switchPid = false;
DataSourcePropertiesConfiguration
public class DataSourcePropertiesConfiguration {
private FileDataSourceProperties file; //本地文件存储
private NacosDataSourceProperties nacos; //nacos存储
private ZookeeperDataSourceProperties zk; //zookeeper存储
private ApolloDataSourceProperties apollo; //apollo存储
private RedisDataSourceProperties redis; //redis存储
private ConsulDataSourceProperties consul; //consul存储
NacosDataSourceProperties
public class NacosDataSourceProperties extends AbstractDataSourceProperties {
private String serverAddr;
private String username;
private String password;
@NotEmpty
private String groupId = "DEFAULT_GROUP";
@NotEmpty
private String dataId;
private String endpoint;
private String namespace;
private String accessKey;
private String secretKey;
public NacosDataSourceProperties() {
super(NacosDataSourceFactoryBean.class.getName());
}
AbstractDataSourceProperties
public class AbstractDataSourceProperties {
@NotEmpty
private String dataType = "json"; //数据默认用json格式存储
@NotNull
private RuleType ruleType; //规则类型
private String converterClass;
@JsonIgnore
private final String factoryBeanName;
@JsonIgnore
private Environment env;
public AbstractDataSourceProperties(String factoryBeanName) {
this.factoryBeanName = factoryBeanName;
}
RuleType:限流规则、降级规则、系统限流规则、黑白名单规则等
public enum RuleType {
FLOW("flow", FlowRule.class),
DEGRADE("degrade", DegradeRule.class),
PARAM_FLOW("param-flow", ParamFlowRule.class),
SYSTEM("system", SystemRule.class),
AUTHORITY("authority", AuthorityRule.class),
GW_FLOW("gw-flow", "com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule"),
GW_API_GROUP("gw-api-group", "com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition");
private final String name;
private Class clazz;
private String clazzName;
private RuleType(String name, Class clazz) {
this.name = name;
this.clazz = clazz;
}
private RuleType(String name, String clazzName) {
this.name = name;
this.clazzName = clazzName;
}