六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

一文教你如何發(fā)揮好 TDengine Grafana 插件作用

作為當前最流行的圖形化運維監(jiān)控解決方案之一,Grafana 提供了一個靈活易用的界面,可以連接多種不同的數(shù)據(jù)源,包括時序數(shù)據(jù)庫(Time Series Database)、云服務(wù)、監(jiān)控系統(tǒng)等,然后從這些數(shù)據(jù)源中提取數(shù)據(jù)并實時地將其可視化。為了給用戶打造更豐富的可視化方案,TDengine 在開源不久就提供了對 Grafana 的支持,此后也在不斷升級改造 TDengine Grafana 插件,還推出了基于 Grafana 的零依賴監(jiān)控解決方案 TDinsight。本篇文章將以 tdengine-datasource 為例介紹 Grafana 插件開發(fā)。

實際上,tdengine-datasource 是 TDengine 為 Grafana 打造的 datasource 插件,它能夠從 TDengine 讀取數(shù)據(jù),并展示到 Grafana。

一文教你如何發(fā)揮好 TDengine Grafana 插件作用 - TDengine Database 時序數(shù)據(jù)庫

開發(fā)環(huán)境準備

Grafana 配置

首先下載 Grafana 并解壓,修改 conf/default.ini 配置。

  • 修改插件加載路徑。Grafana 插件會默認加載在 plugins = data/plugins,這里需要修改為自己插件的地址。這里通常改為插件項目下的 dist 目錄。
[paths]
plugins = /path/to/Grafana-plugins
  • 修改 allow_loading_unsigned_plugins 配置,配置項的值為插件的名字,允許 Grafana 加載 unsigned 的插件。
allow_loading_unsigned_plugins = my_plugin_name

新建插件

使用 grafna-create-plugin 創(chuàng)建插件,然后根據(jù)提示新建插件。

$ npx @Grafana/create-plugin
? What is going to be the name of your plugin? my-plugin # 輸入插件名字
? What is the organization name of your plugin? taosdata # 輸入公司名字
? How would you describe your plugin? my testing plugin # 輸入插件描述
? What type of plugin would you like? datasource # 選擇插件類型 app or panel or datasource
? Do you want a backend part of your plugin? Yes # datasource 類型插件是否包含后端
? Do you want to add Github CI and Release workflows? Yes # 是否添加 github ci 和 release 工作流
? Do you want to add a Github workflow for automatically checking "Grafana API compatibility" on PRs? Yes # 是否添加 pr 工作流

之后 grafna-create-plugin 會在目錄創(chuàng)建名為 taosdata-myplugin-datasource 的插件工程。進到該目錄之后,執(zhí)行 yarn install && yarn build && go mod tidy && mage -v build 即可構(gòu)建插件。啟動 Grafana,在 datasource 配置頁面就可以搜到該插件,插件的前端代碼在 src 目錄,后端代碼在 pkg 目錄。

后端代碼

后端代碼需要實現(xiàn) QueryDataHandler 接口和 CheckHealthHandler 接口,分別用于查詢數(shù)據(jù)和 checkHealth。

頁面查詢數(shù)據(jù)時會調(diào)用 QueryData 方法。不同的數(shù)據(jù)源,QueryData 方法實現(xiàn)會有差異,歸根結(jié)底,該方法的作用是從數(shù)據(jù)源查詢數(shù)據(jù),并將數(shù)據(jù)封裝成 Data Frame。

type QueryDataHandler interface {
   QueryData(ctx context.Context, req *QueryDataRequest) (*QueryDataResponse, error)
}

Grafana 會定時調(diào)用 CheckHealth 方法,以檢測插件的健康狀態(tài)。數(shù)據(jù)源配置頁面的 Save & Test 按鈕也會調(diào)用 CheckHealth 方法來檢測配置是否正確。

type CheckHealthHandler interface {
   CheckHealth(ctx context.Context, req *CheckHealthRequest) (*CheckHealthResult, error)
}

前端代碼

grafana datasource plugin 需要有一定的前端代碼開發(fā)量,包含 datasource、數(shù)據(jù)源配置頁面和數(shù)據(jù)查詢頁面。

datasource-with-backend 插件,datasource 的前端代碼需要實現(xiàn)(extends)DataSourceWithBackend 接口。由于通過后端接口進行數(shù)據(jù)查詢,所以前端頁面代碼比較簡單。

datasource-backend 插件,datasource 的前端代碼需要實現(xiàn)(extends)DataSourceApi 接口,并至少實現(xiàn) query、testDatasource 等方法。其中 query 方法用于數(shù)據(jù)查詢,testDatasource 方法用于測試數(shù)據(jù)源配置。

async query(options: DataQueryRequest<MyQuery>): Promise<DataQueryResponse>

async testDatasource()

數(shù)據(jù)源插件需要配置數(shù)據(jù)源地址、授權(quán)等信息,通常還需要配置數(shù)據(jù)查詢方式,因此需要數(shù)據(jù)源配置頁面和數(shù)據(jù)查詢頁面。

plugin.json 和 module.ts

如果是通過 grafna-create-plugin 創(chuàng)建的插件項目,grafna-create-plugin 會在 src 目錄下生成 plugin.json 和 module.ts 文件。其中 plugin.json 包含了插件的信息,包括插件類型、插件名字、ID 等。而 module.ts 是 grafana 插件的入口。

Grafana 和 backend plugin 通訊協(xié)議

Grafana 和 backend-plugin 是兩個進程,plugin 是 Grafana 的子進程,二者通過 gRpc 通信,plugin 作為 server 端,Grafana 作為 client 端。

其 gRpc 通信協(xié)議可參考 https://github.com/Grafana/Grafana-plugin-sdk-go/blob/master/proto/backend.proto,從協(xié)議上看,backend-plugin 提供了如下 service:

//---------------------------------------------------------
// Resource service enables HTTP-style requests over gRPC.
//---------------------------------------------------------

service Resource {
  rpc CallResource(CallResourceRequest) returns (stream CallResourceResponse);
}

//-----------------------------------------------
// Data
//-----------------------------------------------

service Data {
  rpc QueryData(QueryDataRequest) returns (QueryDataResponse);
}

//-----------------------------------------------
// Diagnostics
//-----------------------------------------------

service Diagnostics {
  rpc CheckHealth(CheckHealthRequest) returns (CheckHealthResponse);
  rpc CollectMetrics(CollectMetricsRequest) returns (CollectMetricsResponse);
}

//-----------------------------------------------------------------
// Stream -- EXPERIMENTAL and is subject to change until 8.0
//-----------------------------------------------------------------

service Stream {
  // SubscribeStream called when a user tries to subscribe to a plugin/datasource
  // managed channel path – thus plugin can check subscribe permissions and communicate
  // options with Grafana Core. When the first subscriber joins a channel, RunStream
  // will be called. 
  rpc SubscribeStream(SubscribeStreamRequest) returns (SubscribeStreamResponse);

  // RunStream will be initiated by Grafana to consume a stream. RunStream will be
  // called once for the first client successfully subscribed to a channel path.
  // When Grafana detects that there are no longer any subscribers inside a channel,
  // the call will be terminated until next active subscriber appears. Call termination
  // can happen with a delay.
  rpc RunStream(RunStreamRequest) returns (stream StreamPacket);

  // PublishStream called when a user tries to publish to a plugin/datasource
  // managed channel path. Here plugin can check publish permissions and
  // modify publication data if required.
  rpc PublishStream(PublishStreamRequest) returns (PublishStreamResponse);
}

grafana backend-plugin 實現(xiàn)依賴 github.com/hashicorp/go-plugin 庫,go-plugin 是一個基于 gRpc 的golang 插件系統(tǒng),由 HashiCorp 開發(fā),并在業(yè)界廣泛使用,grafana backend plugin 就是基于 go-plugin 實現(xiàn)的。

tdengine-datasource

tdengine-datasource 是 TDengine 的 grafana 數(shù)據(jù)源插件。目前,tdengine-datasource 不完全是一個 backend-plugin,TDinsight 或 dashboard 的數(shù)據(jù)仍然是通過前端頁面直接查詢,只有后端 alerting 的查詢請求會經(jīng)過后端。

一文教你如何發(fā)揮好 TDengine Grafana 插件作用 - TDengine Database 時序數(shù)據(jù)庫

ConfigEditor

在數(shù)據(jù)源配置頁面可以配置數(shù)據(jù)源的信息。添加數(shù)據(jù)源時,需要配置數(shù)據(jù)源的名字(默認為 TDengine Datasource)、TDengine 的地址、認證信息,通過 Save&test 按鈕,可以校驗 TDengine 的認證信息。

一文教你如何發(fā)揮好 TDengine Grafana 插件作用 - TDengine Database 時序數(shù)據(jù)庫

QueryEditor

在查詢配置頁面可以自定義數(shù)據(jù)查詢,包含查詢 sql、時間戳偏移配置、group by 配置等。

一文教你如何發(fā)揮好 TDengine Grafana 插件作用 - TDengine Database 時序數(shù)據(jù)庫

結(jié)語

現(xiàn)在你可以操作體驗了,希望本篇文章能帶給你一些幫助。更多示例可參考:

如果在使用 TDengine Grafana 插件的過程中遇到任何問題,或者有新的功能建議,也歡迎在 GitHubhttps://github.com/taosdata/grafanaplugin) 上和我們交流。或者添加小T vx:tdengine,和 TDengine 的技術(shù)研發(fā)人員進行直接溝通。