Sentinel(十四)之控制台
轉(zhuǎn)載自??Sentinel 控制臺(tái)
1. 概述
Sentinel 提供一個(gè)輕量級(jí)的開源控制臺(tái),它提供機(jī)器發(fā)現(xiàn)以及健康情況管理、監(jiān)控(單機(jī)和集群),規(guī)則管理和推送的功能。這里,我們將會(huì)詳細(xì)講述如何通過簡單的步驟就可以使用這些功能。
接下來,我們將會(huì)逐一介紹如何整合 Sentinel 核心庫和 Dashboard,讓它發(fā)揮最大的作用。同時(shí)我們也在阿里云上提供企業(yè)級(jí)的控制臺(tái):AHAS Sentinel 控制臺(tái),您只需要幾個(gè)簡單的步驟,就能最直觀地看到控制臺(tái)如何實(shí)現(xiàn)這些功能。
Sentinel 控制臺(tái)包含如下功能:
- 查看機(jī)器列表以及健康情況:收集 Sentinel 客戶端發(fā)送的心跳包,用于判斷機(jī)器是否在線。
- 監(jiān)控 (單機(jī)和集群聚合):通過 Sentinel 客戶端暴露的監(jiān)控 API,定期拉取并且聚合應(yīng)用監(jiān)控信息,最終可以實(shí)現(xiàn)秒級(jí)的實(shí)時(shí)監(jiān)控。
- 規(guī)則管理和推送:統(tǒng)一管理推送規(guī)則。
- 鑒權(quán):生產(chǎn)環(huán)境中鑒權(quán)非常重要。這里每個(gè)開發(fā)者需要根據(jù)自己的實(shí)際情況進(jìn)行定制。
注意:Sentinel 控制臺(tái)目前僅支持單機(jī)部署。Sentinel 控制臺(tái)項(xiàng)目提供 Sentinel 功能全集示例,不作為開箱即用的生產(chǎn)環(huán)境控制臺(tái),若希望在生產(chǎn)環(huán)境使用請根據(jù)文檔自行進(jìn)行定制和改造。
2. 啟動(dòng)控制臺(tái)
2.1 獲取 Sentinel 控制臺(tái)
您可以從?release 頁面?下載最新版本的控制臺(tái) jar 包。
您也可以從最新版本的源碼自行構(gòu)建 Sentinel 控制臺(tái):
- 下載?控制臺(tái)?工程
- 使用以下命令將代碼打包成一個(gè) fat jar:?mvn clean package
2.2 啟動(dòng)
注意:啟動(dòng) Sentinel 控制臺(tái)需要 JDK 版本為 1.8 及以上版本。
使用如下命令啟動(dòng)控制臺(tái):
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar其中?-Dserver.port=8080?用于指定 Sentinel 控制臺(tái)端口為?8080。
從 Sentinel 1.6.0 起,Sentinel 控制臺(tái)引入基本的登錄功能,默認(rèn)用戶名和密碼都是?sentinel??梢詤⒖?鑒權(quán)模塊文檔?配置用戶名和密碼。
注:若您的應(yīng)用為 Spring Boot 或 Spring Cloud 應(yīng)用,您可以通過 Spring 配置文件來指定配置,詳情請參考?Spring Cloud Alibaba Sentinel 文檔。
3. 客戶端接入控制臺(tái)
控制臺(tái)啟動(dòng)后,客戶端需要按照以下步驟接入到控制臺(tái)。
3.1 引入JAR包
客戶端需要引入 Transport 模塊來與 Sentinel 控制臺(tái)進(jìn)行通信。您可以通過?pom.xml?引入 JAR 包:
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId><version>x.y.z</version> </dependency>3.2 配置啟動(dòng)參數(shù)
啟動(dòng)時(shí)加入 JVM 參數(shù)?-Dcsp.sentinel.dashboard.server=consoleIp:port?指定控制臺(tái)地址和端口。若啟動(dòng)多個(gè)應(yīng)用,則需要通過?-Dcsp.sentinel.api.port=xxxx?指定客戶端監(jiān)控 API 的端口(默認(rèn)是 8719)。
從 1.6.3 版本開始,控制臺(tái)支持網(wǎng)關(guān)流控規(guī)則管理。您需要在接入端添加?-Dcsp.sentinel.app.type=1?啟動(dòng)參數(shù)以將您的服務(wù)標(biāo)記為 API Gateway,在接入控制臺(tái)時(shí)您的服務(wù)會(huì)自動(dòng)注冊為網(wǎng)關(guān)類型,然后您即可在控制臺(tái)配置網(wǎng)關(guān)規(guī)則和 API 分組。
除了修改 JVM 參數(shù),也可以通過配置文件取得同樣的效果。更詳細(xì)的信息可以參考?啟動(dòng)配置項(xiàng)。
3.3 觸發(fā)客戶端初始化
確保客戶端有訪問量,Sentinel 會(huì)在客戶端首次調(diào)用的時(shí)候進(jìn)行初始化,開始向控制臺(tái)發(fā)送心跳包。
注意:您還需要根據(jù)您的應(yīng)用類型和接入方式引入對應(yīng)的?適配依賴,否則即使有訪問量也不能被 Sentinel 統(tǒng)計(jì)。
4. 查看機(jī)器列表以及健康情況
當(dāng)您在機(jī)器列表中看到您的機(jī)器,就代表著您已經(jīng)成功接入控制臺(tái);如果沒有看到您的機(jī)器,請檢查配置,并通過?${user.home}/logs/csp/sentinel-record.log.xxx?日志來排查原因,詳細(xì)的部分請參考?日志文檔。
注意:若接入 Sentinel 控制臺(tái)不成功,可以參考?FAQ?排查問題。
5. 監(jiān)控
5.1 "簇點(diǎn)鏈路"中顯示剛剛調(diào)用的資源(單機(jī)實(shí)時(shí))
簇點(diǎn)鏈路(單機(jī)調(diào)用鏈路)頁面實(shí)時(shí)的去拉取指定客戶端資源的運(yùn)行情況。它一共提供兩種展示模式:一種用樹狀結(jié)構(gòu)展示資源的調(diào)用鏈路,另外一種則不區(qū)分調(diào)用鏈路展示資源的實(shí)時(shí)情況。
注意:?簇點(diǎn)鏈路監(jiān)控是內(nèi)存態(tài)的信息,它僅展示啟動(dòng)后調(diào)用過的資源。
5.2 "實(shí)時(shí)監(jiān)控"匯總資源信息(集群聚合)
同時(shí),同一個(gè)服務(wù)下的所有機(jī)器的簇點(diǎn)信息會(huì)被匯總,并且秒級(jí)地展示在"實(shí)時(shí)監(jiān)控"下。
注意:?實(shí)時(shí)監(jiān)控僅存儲(chǔ) 5 分鐘以內(nèi)的數(shù)據(jù),如果需要持久化,需要通過調(diào)用實(shí)時(shí)監(jiān)控接口來定制。
注意:請確保 Sentinel 控制臺(tái)所在的機(jī)器時(shí)間與自己應(yīng)用的機(jī)器時(shí)間保持一致,否則會(huì)導(dǎo)致拉不到實(shí)時(shí)的監(jiān)控?cái)?shù)據(jù)。
6. 規(guī)則管理及推送
Sentinel 控制臺(tái)同時(shí)提供簡單的規(guī)則管理以及推送的功能。規(guī)則推送分為 3 種模式,包括 "原始模式"、"Pull 模式" 和"Push 模式"。
這里先簡單的介紹"原始模式"。
6.1 規(guī)則管理
您可以在控制臺(tái)通過接入端暴露的?HTTP API?來查詢規(guī)則。
6.2 規(guī)則推送
目前控制臺(tái)的規(guī)則推送也是通過?規(guī)則查詢更改 HTTP API?來更改規(guī)則。這也意味著這些規(guī)則僅在內(nèi)存態(tài)生效,應(yīng)用重啟之后,該規(guī)則會(huì)丟失。
注:若通過控制臺(tái)推送規(guī)則時(shí)出現(xiàn) invalid type 或 empty type 的錯(cuò)誤,請確保 transport 模塊版本與 core 模塊版本保持一致;若控制臺(tái)版本 >= 1.7.1,請將接入端的相關(guān)依賴也升級(jí)至 1.7.1 及以上版本。
以上是原始模式。當(dāng)了解了原始模式之后,我們非常鼓勵(lì)您通過?動(dòng)態(tài)規(guī)則?并結(jié)合各種外部存儲(chǔ)來定制自己的規(guī)則源。我們推薦通過動(dòng)態(tài)配置源的控制臺(tái)來進(jìn)行規(guī)則寫入和推送,而不是通過 Sentinel 客戶端直接寫入到動(dòng)態(tài)配置源中。在生產(chǎn)環(huán)境中,我們推薦?push 模式,具體可以參考:在生產(chǎn)環(huán)境使用 Sentinel。
注:若要使用集群流控功能,則必須對接動(dòng)態(tài)規(guī)則源,否則無法正常使用。
Sentinel 同時(shí)還提供應(yīng)用維度規(guī)則推送的示例頁面(流控規(guī)則頁面,前端路由為?/v2/flow),用戶改造控制臺(tái)對接配置中心后可直接通過 v2 頁面推送規(guī)則至配置中心。Sentinel 抽取了通用接口用于向遠(yuǎn)程配置中心推送規(guī)則以及拉取規(guī)則:
- DynamicRuleProvider<T>: 拉取規(guī)則(應(yīng)用維度)
- DynamicRulePublisher<T>: 推送規(guī)則(應(yīng)用維度)
用戶只需實(shí)現(xiàn)?DynamicRuleProvider?和?DynamicRulePublisher?接口,并在 v2 的 controller 中通過?@Qualifier?注解替換相應(yīng)的 bean 即可實(shí)現(xiàn)應(yīng)用維度推送。我們提供了 Nacos 和 Apollo 的示例,改造詳情可參考?應(yīng)用維度規(guī)則推送示例。
6.3 網(wǎng)關(guān)流控規(guī)則
參考?網(wǎng)關(guān)流控控制臺(tái)文檔。
鑒權(quán)
從 Sentinel 1.5.0 開始,控制臺(tái)提供通用的鑒權(quán)接口?AuthService,用戶可根據(jù)需求自行實(shí)現(xiàn)。
從 Sentinel 1.6.0 起,Sentinel 控制臺(tái)引入基本的登錄功能,默認(rèn)用戶名和密碼都是?sentinel。該鑒權(quán)能力非?;A(chǔ),生產(chǎn)環(huán)境使用建議根據(jù)安全需要自行改造。
用戶可以通過如下參數(shù)進(jìn)行配置:
- -Dsentinel.dashboard.auth.username=sentinel?用于指定控制臺(tái)的登錄用戶名為?sentinel;
- -Dsentinel.dashboard.auth.password=123456?用于指定控制臺(tái)的登錄密碼為?123456;如果省略這兩個(gè)參數(shù),默認(rèn)用戶和密碼均為?sentinel;
- -Dserver.servlet.session.timeout=7200?用于指定 Spring Boot 服務(wù)端 session 的過期時(shí)間,如?7200?表示 7200 秒;60m表示 60 分鐘,默認(rèn)為 30 分鐘;
同樣也可以直接在 Spring properties 文件中進(jìn)行配置。
注意:部署多臺(tái)控制臺(tái)時(shí),session 默認(rèn)不會(huì)在各實(shí)例之間共享,這一塊需要自行改造。
控制臺(tái)配置項(xiàng)
控制臺(tái)的一些特性可以通過配置項(xiàng)來進(jìn)行配置,配置項(xiàng)主要有兩個(gè)來源:System.getProperty()?和?System.getenv(),同時(shí)存在時(shí)后者可以覆蓋前者。
通過環(huán)境變量進(jìn)行配置時(shí),因?yàn)椴恢С?.?所以需要將其更換為?_。
| auth.enabled | boolean | true | - | 是否開啟登錄鑒權(quán),僅用于日常測試,生產(chǎn)上不建議關(guān)閉 |
| sentinel.dashboard.auth.username | String | sentinel | - | 登錄控制臺(tái)的用戶名,默認(rèn)為?sentinel |
| sentinel.dashboard.auth.password | String | sentinel | - | 登錄控制臺(tái)的密碼,默認(rèn)為?sentinel |
| sentinel.dashboard.app.hideAppNoMachineMillis | Integer | 0 | 60000 | 是否隱藏?zé)o健康節(jié)點(diǎn)的應(yīng)用,距離最近一次主機(jī)心跳時(shí)間的毫秒數(shù),默認(rèn)關(guān)閉 |
| sentinel.dashboard.removeAppNoMachineMillis | Integer | 0 | 120000 | 是否自動(dòng)刪除無健康節(jié)點(diǎn)的應(yīng)用,距離最近一次其下節(jié)點(diǎn)的心跳時(shí)間毫秒數(shù),默認(rèn)關(guān)閉 |
| sentinel.dashboard.unhealthyMachineMillis | Integer | 60000 | 30000 | 主機(jī)失聯(lián)判定,不可關(guān)閉 |
| sentinel.dashboard.autoRemoveMachineMillis | Integer | 0 | 300000 | 距離最近心跳時(shí)間超過指定時(shí)間是否自動(dòng)刪除失聯(lián)節(jié)點(diǎn),默認(rèn)關(guān)閉 |
| sentinel.dashboard.unhealthyMachineMillis | Integer | 60000 | 30000 | 主機(jī)失聯(lián)判定,不可關(guān)閉 |
| server.servlet.session.cookie.name | String | sentinel_dashboard_cookie | - | 控制臺(tái)應(yīng)用的 cookie 名稱,可單獨(dú)設(shè)置避免同一域名下 cookie 名沖突 |
配置示例:
- 命令行方式:
- Java 方式:
- 環(huán)境變量方式:
總結(jié)
以上是生活随笔為你收集整理的Sentinel(十四)之控制台的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何实现cpu超频如何让电脑cpu超频
- 下一篇: Sentinel(十三)之动态规则扩展