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