眾所周知,Sentinel 對(duì)監(jiān)控?cái)?shù)據(jù)的做法是定時(shí)落盤在客戶端,然后 Sentinel 提供接口去拉取日志文件。所以 Sentinel 在監(jiān)控?cái)?shù)據(jù)上理論上是最少存儲(chǔ) 1 天以上的數(shù)據(jù);然而作為控制臺(tái)展示,則僅在內(nèi)存中聚合 5 分鐘以內(nèi)的統(tǒng)計(jì)數(shù)據(jù),不進(jìn)行持久化。
官方鼓勵(lì)大家對(duì) Dashboard 進(jìn)行改造實(shí)現(xiàn)指標(biāo)信息的持久化,并從其它的存儲(chǔ)中(如 RDBMS、時(shí)序數(shù)據(jù)庫等)拉取的監(jiān)控信息,包括實(shí)時(shí)的和歷史的數(shù)據(jù)。
基于此,結(jié)合公司內(nèi)部的需求,我們自行改造并實(shí)現(xiàn)了監(jiān)控指標(biāo)的持久化。本文把一些實(shí)現(xiàn)過程分享給大家!
Sentinel 是阿里巴巴開源的流量治理平臺(tái),提供了 流量控制、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)、黑白名單訪問控制 等功能。在實(shí)際的生產(chǎn)需求中,筆者進(jìn)行了部分?jǐn)U展:
流控規(guī)則持久化:適配 Apollo、Nacos、Zookeeper
監(jiān)控?cái)?shù)據(jù)持久化:適配 InfluxDB、Kafka、Elasticsearch
監(jiān)控面板優(yōu)化:新增時(shí)間控件,允許在任意時(shí)刻內(nèi)查詢監(jiān)控?cái)?shù)據(jù)。
演示圖例
改造前
改造后
快捷時(shí)間選擇。
自定義時(shí)間選擇。
如何構(gòu)建
本項(xiàng)目默認(rèn)使用 Maven 來構(gòu)建,最快的使用方式是把我給你的代碼導(dǎo)入的開發(fā)工具中?;蛟陧?xiàng)目的根目錄執(zhí)行 mvn install -T 4C 完成本項(xiàng)目的構(gòu)建。
如何啟動(dòng)
IDEA 啟動(dòng)
本項(xiàng)目默認(rèn)不依賴外部組件,可以直接啟動(dòng)運(yùn)行。
在項(xiàng)目目錄下運(yùn)行 mvn install(如果不想運(yùn)行測(cè)試,可以加上 -DskipTests 參數(shù))。
進(jìn)入 sentinel-dashboard 目錄,執(zhí)行 mvn spring-boot:run 或者啟動(dòng) SentinelApplication 類。運(yùn)行成功的話,可以看到 Spring Boot 啟動(dòng)成功的界面。
在實(shí)際的生產(chǎn)需求,Sentinel 保存的規(guī)則和監(jiān)控是需要持久化落盤的,因此,您可以在 sentinel-dashboard/src/main/resources/application.properties 接入外部組件。
規(guī)則存儲(chǔ)類型:memory(默認(rèn))、nacos(推薦)、apollo、zookeeper
#規(guī)則存儲(chǔ)類型,可選項(xiàng):memory(默認(rèn))、nacos(推薦)、apollo、zookeeper sentinel.rule.type=nacos #Nacos存儲(chǔ)規(guī)則,如果您設(shè)置了sentinel.metrics.type=nacos,需要調(diào)整相關(guān)配置 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存儲(chǔ)規(guī)則,如果您設(shè)置了sentinel.metrics.type=apollo,需要調(diào)整相關(guān)配置 sentinel.rule.apollo.portal-url=http://localhost:10034 sentinel.rule.apollo.token= sentinel.rule.apollo.env= #Zookeeper存儲(chǔ)規(guī)則,如果您設(shè)置了sentinel.metrics.type=zookeeper,需要調(diào)整相關(guān)配置 sentinel.rule.zookeeper.connect-string=localhost:2181 sentinel.rule.zookeeper.root-path=/sentinel_rule
監(jiān)控存儲(chǔ)類型:memory(默認(rèn))、influxdb(推薦)、elasticsearch
#監(jiān)控存儲(chǔ)類型,可選項(xiàng):memory(默認(rèn))、influxdb(推薦)、elasticsearch sentinel.metrics.type=memory #InfluxDB存儲(chǔ)監(jiān)控?cái)?shù)據(jù),如果您設(shè)置了sentinel.metrics.type=influxdb,需要調(diào)整相關(guān)配置 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存儲(chǔ)監(jiān)控?cái)?shù)據(jù),如果您設(shè)置了sentinel.metrics.type=elasticsearch,需要調(diào)整相關(guān)配置 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= #監(jiān)控?cái)?shù)據(jù)存儲(chǔ)緩沖設(shè)置,降低底層存儲(chǔ)組件寫入壓力??蛇x項(xiàng):none(默認(rèn)不啟用)、kafka(推薦) sentinel.metrics.sender.type=none #Kafka存儲(chǔ)監(jiān)控?cái)?shù)據(jù),如果您設(shè)置了sentinel.metrics.sender.type=kafka,需要調(diào)整相關(guān)配置 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
鏡像啟動(dòng)
本項(xiàng)目已發(fā)布到 Docker Hubhttps://hub.docker.com/repository/docker/shiyindaxiaojie/sentinel-dashboard,請(qǐng)執(zhí)行參考命令運(yùn)行。
dockerrun-p8090:8090--name=sentinel-dashboard-dshiyindaxiaojie/sentinel-dashboard
如何部署
FatJar 部署
執(zhí)行 mvn clean package 打包成一個(gè) fat jar,參考如下命令啟動(dòng)編譯后的控制臺(tái)。
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 -jartarget/sentinel-dashboard.jar
Docker 部署
本項(xiàng)目使用了 Spring Boot 的鏡像分層特性優(yōu)化了鏡像的構(gòu)建效率,請(qǐng)確保正確安裝了 Docker 工具,然后執(zhí)行以下命令。
dockerbuild-fdocker/Dockerfile-tsentinel-dashboard:{tag}.
Helm 部署
以應(yīng)用為中心,建議使用 Helm 統(tǒng)一管理所需部署的 K8s 資源描述文件,請(qǐng)參考以下命令完成應(yīng)用的安裝和卸載。
helminstallsentinel-dashboard./helm#部署資源 helmuninstallsentinel-dashboard#卸載資源
如何接入
為了減少客戶端集成的工作,您可以使用 eden-architect 框架,只需要兩步就可以完成 Sentinel 的集成。
引入 Sentinel 依賴
io.github.shiyindaxiaojie eden-sentinel-spring-cloud-starter
開啟 Sentinel 配置
spring: cloud: sentinel:#流量治理組件 enabled:false#默認(rèn)關(guān)閉,請(qǐng)按需開啟 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
審核編輯:劉清
-
RDBMS
+關(guān)注
關(guān)注
0文章
9瀏覽量
5834 -
nacos
+關(guān)注
關(guān)注
0文章
10瀏覽量
189
原文標(biāo)題:基于 Sentinel 實(shí)現(xiàn)歷史監(jiān)控?cái)?shù)據(jù)回看
文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論