眾所周知,Sentinel 對監控數據的做法是定時落盤在客戶端,然后 Sentinel 提供接口去拉取日志文件。所以 Sentinel 在監控數據上理論上是最少存儲 1 天以上的數據;然而作為控制臺展示,則僅在內存中聚合 5 分鐘以內的統計數據,不進行持久化。
官方鼓勵大家對 Dashboard 進行改造實現指標信息的持久化,并從其它的存儲中(如 RDBMS、時序數據庫等)拉取的監控信息,包括實時的和歷史的數據。
基于此,結合公司內部的需求,我們自行改造并實現了監控指標的持久化。本文把一些實現過程分享給大家!
Sentinel 是阿里巴巴開源的流量治理平臺,提供了 流量控制、熔斷降級、系統負載保護、黑白名單訪問控制 等功能。在實際的生產需求中,筆者進行了部分擴展:
流控規則持久化:適配 Apollo、Nacos、Zookeeper
監控數據持久化:適配 InfluxDB、Kafka、Elasticsearch
監控面板優化:新增時間控件,允許在任意時刻內查詢監控數據。
演示圖例
改造前
改造后
快捷時間選擇。
自定義時間選擇。
如何構建
本項目默認使用 Maven 來構建,最快的使用方式是把我給你的代碼導入的開發工具中。或在項目的根目錄執行 mvn install -T 4C 完成本項目的構建。
如何啟動
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 Hubhttps://hub.docker.com/repository/docker/shiyindaxiaojie/sentinel-dashboard,請執行參考命令運行。
dockerrun-p8090:8090--name=sentinel-dashboard-dshiyindaxiaojie/sentinel-dashboard
如何部署
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 -jartarget/sentinel-dashboard.jar
Docker 部署
本項目使用了 Spring Boot 的鏡像分層特性優化了鏡像的構建效率,請確保正確安裝了 Docker 工具,然后執行以下命令。
dockerbuild-fdocker/Dockerfile-tsentinel-dashboard:{tag}.
Helm 部署
以應用為中心,建議使用 Helm 統一管理所需部署的 K8s 資源描述文件,請參考以下命令完成應用的安裝和卸載。
helminstallsentinel-dashboard./helm#部署資源 helmuninstallsentinel-dashboard#卸載資源
如何接入
為了減少客戶端集成的工作,您可以使用 eden-architect 框架,只需要兩步就可以完成 Sentinel 的集成。
引入 Sentinel 依賴
io.github.shiyindaxiaojie eden-sentinel-spring-cloud-starter
開啟 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
審核編輯:劉清
-
RDBMS
+關注
關注
0文章
9瀏覽量
5843 -
nacos
+關注
關注
0文章
10瀏覽量
197
原文標題:基于 Sentinel 實現歷史監控數據回看
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論