动手扩展 Sentinel:实现历史监控数据回看
👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书福利
全栈前后端分离博客项目 1.0 版本完结啦,2.0 正在更新中..., 演示链接:http://116.62.199.48/ ,全程手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前已更新了177小节,累计28w+字,讲解图:1194张,还在持续爆肝中.. 后续还会上新更多项目,目标是将Java领域典型的项目都整一波,如秒杀系统, 在线商城, IM即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,已有640+小伙伴加入(早鸟价超低)
Sentinel 是阿里巴巴开源的流量治理平台,提供了 流量控制
、熔断降级
、系统负载保护
、黑白名单访问控制
等功能。在实际的生产需求中,笔者进行了部分扩展:
流控规则持久化:适配 Apollo
、Nacos
、Zookeeper
监控数据持久化:适配 InfluxDB
、Kafka
、Elasticsearch
监控面板优化:新增时间控件,允许在任意时刻内查询监控数据。
您可以访问 GitHub[1] 查阅源码。
1演示图例
改造前
改造后
快捷时间选择
自定义时间选择
2如何构建
本项目默认使用 Maven 来构建,最快的使用方式是 git clone
到本地。在项目的根目录执行 mvn install -T 4C
完成本项目的构建。
3如何启动
IDEA 启动
本项目默认不依赖外部组件,可以直接启动运行。
在项目目录下运行 mvn install
(如果不想运行测试,可以加上-DskipTests
参数)。进入 sentinel-dashboard
目录,执行mvn spring-boot:run
或者启动SentinelApplication
类。运行成功的话,可以看到Spring Boot
启动成功的界面。
在实际的生产需求,Sentinel 保存的规则和监控是需要持久化落盘的,因此,您可以在 sentinel-dashboard/src/main/resources/application.properties
接入外部组件。
规则存储类型:memory(默认)、nacos(推荐)、apollo、zookeeper
# 规则存储类型,可选项:memory(默认)、nacos(推荐)、apollo、zookeeper
sentinel.rule.type=nacos
# Nacos 存储规则,如果您设置了 sentinel.metrics.type=nacos,需要调整相关配置
sentinel.rule.nacos.server-addr=localhost:8848
sentinel.rule.nacos.namespace=demo
sentinel.rule.nacos.group-id=sentinel
sentinel.rule.nacos.username=nacos
sentinel.rule.nacos.password=nacos
# Apollo 存储规则,如果您设置了 sentinel.metrics.type=apollo,需要调整相关配置
sentinel.rule.apollo.portal-url=http://localhost:10034
sentinel.rule.apollo.token=
sentinel.rule.apollo.env=
# Zookeeper 存储规则,如果您设置了 sentinel.metrics.type=zookeeper,需要调整相关配置
sentinel.rule.zookeeper.connect-string=localhost:2181
sentinel.rule.zookeeper.root-path=/sentinel_rule
监控存储类型:memory(默认)、influxdb(推荐)、elasticsearch
# 监控存储类型,可选项:memory(默认)、influxdb(推荐)、elasticsearch
sentinel.metrics.type=memory
# InfluxDB 存储监控数据,如果您设置了 sentinel.metrics.type=influxdb,需要调整相关配置
influx.url=http://localhost:8086/
influx.token=UfgaW37A93PkncmJum25G7M2QkBg6xqqjGthh-o-UIVIynC_-Q7RFWlTtEpMqhGLCuAsX64k3Isc2uN33YgElw==
influx.org=sentinel
influx.bucket=sentinel
influx.log-level=NONE
influx.read-timeout=10s
influx.write-timeout=10s
influx.connect-timeout=10s
# Elasticsearch 存储监控数据,如果您设置了 sentinel.metrics.type=elasticsearch,需要调整相关配置
sentinel.metrics.elasticsearch.index-name=sentinel_metric
spring.elasticsearch.rest.uris=http://localhost:9200
spring.elasticsearch.rest.connection-timeout=3000
spring.elasticsearch.rest.read-timeout=5000
spring.elasticsearch.rest.username=
spring.elasticsearch.rest.password=
# 监控数据存储缓冲设置,降低底层存储组件写入压力。可选项:none(默认不启用)、kafka(推荐)
sentinel.metrics.sender.type=none
# Kafka 存储监控数据,如果您设置了 sentinel.metrics.sender.type=kafka,需要调整相关配置
sentinel.metrics.sender.kafka.topic=sentinel_metric
spring.kafka.producer.bootstrap-servers=localhost:9092
spring.kafka.producer.batch-size=4096
spring.kafka.producer.buffer-memory=40960
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
镜像启动
本项目已发布到 Docker Hub[2],请执行参考命令运行。
docker run -p 8090:8090 --name=sentinel-dashboard -d shiyindaxiaojie/sentinel-dashboard
4如何部署
FatJar 部署
执行 mvn clean package
打包成一个 fat jar,参考如下命令启动编译后的控制台。
java -Dserver.port=8080 \
-Dsentinel.rule.nacos.server-addr=localhost:8848 \
-Dsentinel.rule.nacos.namespace=demo \
-Dsentinel.rule.nacos.group-id=sentinel \
-Dsentinel.metrics.type=influxdb \
-Dinflux.url=http://localhost:8086 \
-Dinflux.token=XXXXXX \
-Dinflux.org=sentinel \
-Dinflux.bucket=sentinel \
-jar target/sentinel-dashboard.jar
Docker 部署
本项目使用了 Spring Boot 的镜像分层特性优化了镜像的构建效率,请确保正确安装了 Docker 工具,然后执行以下命令。
docker build -f docker/Dockerfile -t sentinel-dashboard:{tag} .
Helm 部署
以应用为中心,建议使用 Helm 统一管理所需部署的 K8s 资源描述文件,请参考以下命令完成应用的安装和卸载。
helm install sentinel-dashboard ./helm # 部署资源
helm uninstall sentinel-dashboard # 卸载资源
5如何接入
为了减少客户端集成的工作,您可以使用 eden-architect[3] 框架,只需要两步就可以完成 Sentinel 的集成。
引入 Sentinel 依赖
<dependency>
<groupId>io.github.shiyindaxiaojie</groupId>
<artifactId>eden-sentinel-spring-cloud-starter</artifactId>
</dependency>
开启 Sentinel 配置
spring:
cloud:
sentinel: # 流量治理组件
enabled: false # 默认关闭,请按需开启
http-method-specify: true # 兼容 RESTful
eager: true # 立刻刷新到 Dashboard
transport:
dashboard: localhost:8090
datasource:
flow:
nacos:
server-addr: ${spring.cloud.nacos.config.server-addr}
namespace: ${spring.cloud.nacos.config.namespace}
groupId: sentinel
dataId: ${spring.application.name}-flow-rule
rule-type: flow
data-type: json
笔者提供了两种不同应用架构的示例,里面有集成 Sentinel 的示例。
面向领域模型的 COLA 架构,代码实例可以查看 eden-demo-cola[4] 面向数据模型的 分层架构,代码实例请查看 eden-demo-layer[5]
👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书福利
全栈前后端分离博客项目 1.0 版本完结啦,2.0 正在更新中..., 演示链接:http://116.62.199.48/ ,全程手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前已更新了177小节,累计28w+字,讲解图:1194张,还在持续爆肝中.. 后续还会上新更多项目,目标是将Java领域典型的项目都整一波,如秒杀系统, 在线商城, IM即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,已有640+小伙伴加入(早鸟价超低)
1. 我的私密学习小圈子~
最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。
PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。
点“在看”支持小哈呀,谢谢啦