Grafana 源碼分析


版本 6.7.1

前言

  • go 依賴注入
  • 事件總線模式
  • go-macaron
  • hashicorp/go-plugin
  • DTO

Services

Services vs Background Services

兩者都實現了 Init(),后者還實現了 Run()

分析 server.go 代碼可知,大多數服務是通過匿名導入( import _ <package> )的方式,隨包的 init() 方法完成服務注冊。只有 api.HTTPServer 服務是通過顯式導入 api 包並注冊。而 api.HTTPServer 服務的依賴服務,包括 datasources.CacheService、login.LoginService、hooks.HooksService、quota.QuotaService、backendplugin.Manager、rendering.RenderingService 是在 http_server.go 中顯式導入注冊。

優先級 High:SqlStore,HTTPServer

Service 功能說明 依賴項
SqlStore 提供數據庫服務,包括用戶表、模板信息表等、注冊各種數據庫表增刪改查請求的處理函數,比如 Dashboard 表的請求處理函數。Init:初始化 xorm 引擎完成表的創建或升級、遷移操作向 Bus 注冊 sql Handler檢查用戶表中是否至少有一個 admin *setting.Cfg, bus.Bus, *localcache.CacheService
OSSLicensingService 檢查開源軟件證書授權 *setting.Cfg, *hooks.HooksService
UserAuthTokenService *sqlstore.SqlStore, *serverlock.ServerLockService, *setting.Cfg
SearchService 處理 /api/search/,/api/alerts/{alertid} 等API 請求 bus.Bus
CacheService 從緩存中讀取 datasource 信息並返回。 bus.Bus, *localcache.CacheService
LoginService 提供登錄后的服務。Init:注冊 user 更新處理函數到 Bus。 bus.Bus, *quota.QuotaService
HooksService
QuotaService models.UserTokenService
ServerLockService *sqlstore.SqlStore
BackgroundService 說明 依賴項
HTTPServer 提供 API 服務,Web 框架基於 go-macaron。Init:初始化 HTTPServer 結構體,包括創建一個 Macaron 實例,注冊 API 路由以及對應處理函數 handler。Run:將注冊的 API 路徑依次應用到 Macaron 實例(通過調用 Macaron 的 Handle 和 Get 方法);根據協議(HTTP/HTTP2/HTTPS/SOCKET)啟動服務端。 routing.RouteRegister, bus.Bus, rendering.Service, *setting.Cfg, *hooks.HooksService, *localcache.CacheService, datasources.CacheService, models.UserTokenService, *quota.QuotaService, *remotecache.RemoteCache, api.ProvisioningService, *login.LoginService, models.Licensing, backendplugin.Manager, *plugins.PluginManager
InternalMetricsService *setting.Cfg
RemoteCache 向遠端存儲存放對象,支持的遠端存儲包括:redis,memcached 和 db。 *sqlstore.SqlStore, *setting.Cfg
TracingService 提供 jaeger 的鏈路追蹤服務 *setting.Cfg
UsageStatsService *setting.Cfg, bus.Bus, *sqlstore.SqlStore, models.Licensing
PluginManager 加載前端插件:datasource(負載將 ds 的原始數據轉化成前端需要的 time series 或 table 格式),panel 和 app。Init:讀取 plugin.json 文件,初始化插件信息。Run:每 10分鍾 檢查插件版本,並更新。 backendplugin.Manager
AlertEngine 告警處理服務。Init:初始化告警 Job 隊列。Run:更新任務隊列;處理告警任務。 rendering.Service
CleanUpService 定時刪除 過期、tmp 文件 *setting.Cfg, *serverlock.ServerLockService
NotificationService 通知處理服務 bus.Bus, *setting.Cfg
ProvisioningService *setting.Cfg
RenderingService 提供監控導出圖片服務 *setting.Cfg, *remotecache.RemoteCache
Manager 加載后端插件

Service:包名.服務結構體名
功能說明:介紹 Service(功能概述、init() 方法向 Bus 注冊了哪些事件處理函數等),以及 Init(),Run() 函數功能
依賴項:僅列出被 `inject:""` 標記的字段

數據庫表

Dashboard 表

插件系統

Frontend Plugin

Backend Plugin

CLI 工具

總結

小技巧:Navigate | Implementation(s) 快速找到實現結構體


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM