是一款采用 go 語言編寫的開源應用,主要用于大規模名額資料的可視化展現,是網絡架構和應用分析中最流行的時序資料展示工具,可以通過将采集的資料查詢然後可視化的展示,實作報警通知;Grafana擁有豐富的資料源,官方支援以下資料源:Graphite,Elasticsearch,InfluxDB,Prometheus,Cloudwatch,MySQL和OpenTSDB等。Tablestore基于DLA,能提供标準的SQL讀能力,是以天然就可以使用MySQL插件接入Tablestore的時序資料。
Data Lake Analytics(DLA)是Serverless化的互動式聯合查詢服務。無需ETL,使用标準SQL即可分析與內建對象存儲(OSS)、資料庫(PostgreSQL/MySQL等)、NoSQL(Tablestore等)資料源的資料。
表格存儲(Tablestore)是阿裡雲自研的面向海量結構化資料存儲的Serverless NoSQL多模型資料庫,被廣泛用于社交、物聯網、人工智能、中繼資料和大資料等業務場景。提供相容HBase的WideColumn模型、消息模型Timeline以及時空模型Timestream,可提供PB級存儲、千萬TPS以及毫秒級延遲的服務能力。
Tablestore不僅支援阿裡雲自研的計算生态,比如MaxCompute、Blink;還是支援開源的計算生态,比如Spark、Flink等,是以成為計算下遊Sink結果表的絕佳選擇,同時依托底層優秀的架構,提供毫秒級實時的查詢能力,配合DLA服務,實作線上的互動式分析能力。如圖所示,這一套标準的資料處理流程,資料經過加工計算,生成高附加值的内容,持久化到資料庫中,并為客戶提供線上的通路能力。

今天這篇文章正如标題所示,借助DLA 标準SQL的能力,通過Grafana展示Tablestore中存儲的監控資料。為了友善起見,Grafana我們采用本地部署的模式,我們在阿裡雲上購買一台按量的VPC環境的ECS(CentOS),用于搭建Grafana和注入資料。
準備資源
Tablestore資源
第一步,我們要準備一個Tablestore的執行個體,細節我們可以參考
《快速入門》。并記錄得到執行個體名、VPC域名、雲賬戶AccessKeyId資訊。
# 樣例
# VPC域名:https://ecs-metric.cn-hangzhou.vpc.tablestore.aliyuncs.com
# 執行個體名:ecs-metric
# AccessKeyId:test-accessid
# AccessKeySecret:test-accesskey
為了友善起見,以下對Tablestore的操作,都使用Tablestore Cli來執行,
Cli下載下傳和使用方式。
下載下傳解壓Cli,并配置Cli的通路資訊:
./ts config --endpoint https://{VPC域名} --instance {執行個體名} --id {AccessKeyId} --key {AccessKeySecret}
# 樣例
# ./ts config --endpoint https://ecs-metric.cn-hangzhou.vpc.tablestore.aliyuncs.com --instance ecs-metric --id test_accessid --key test_accesskey
使用Cli,建立一張表,表名為metric,schema如下:
字段 | 是否主鍵 | 類型 | 描述 |
machine | 是 | string | 機器的Host name |
ts | integer | Unix時間戳,機關為秒 | |
load | 否 | double | 機器負載 |
network_in | 網絡流入流量 | ||
network_out | 網絡流出流量 | ||
diskutil | 磁盤負載 |
建立表的指令
# Tablestore是Schema Free模式,隻用建立主鍵即可,非主鍵列不用預先定義
./ts create -t metric --pk '[{"c":"machine", "t":"string"}, {"c":"ts", "t":"integer"}]'
./ts lt
./ts use -t metric
注入一部分資料
#注入2個ECS模拟監控資料, 分别是machineA,machineB, 時間範圍是2020-01-18 12:50:00到2020-01-18 12:50:45
./ts put --pk '["machineA", 1579323000]' --attr '[{"c":"load", "v":3.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineA", 1579323005]' --attr '[{"c":"load", "v":7.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":31.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineA", 1579323010]' --attr '[{"c":"load", "v":3.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineA", 1579323015]' --attr '[{"c":"load", "v":2.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineA", 1579323020]' --attr '[{"c":"load", "v":6.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":172.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineA", 1579323025]' --attr '[{"c":"load", "v":2.0}, {"c":"network_in", "v":32.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineA", 1579323030]' --attr '[{"c":"load", "v":4.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":4.0}]'
./ts put --pk '["machineA", 1579323035]' --attr '[{"c":"load", "v":7.0}, {"c":"network_in", "v":70.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineA", 1579323040]' --attr '[{"c":"load", "v":2.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":112.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineA", 1579323045]' --attr '[{"c":"load", "v":3.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":2.0}]'
./ts put --pk '["machineB", 1579323000]' --attr '[{"c":"load", "v":3.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineB", 1579323005]' --attr '[{"c":"load", "v":7.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":31.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineB", 1579323010]' --attr '[{"c":"load", "v":3.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineB", 1579323015]' --attr '[{"c":"load", "v":2.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineB", 1579323020]' --attr '[{"c":"load", "v":6.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":172.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineB", 1579323025]' --attr '[{"c":"load", "v":2.0}, {"c":"network_in", "v":32.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineB", 1579323030]' --attr '[{"c":"load", "v":4.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":4.0}]'
./ts put --pk '["machineB", 1579323035]' --attr '[{"c":"load", "v":7.0}, {"c":"network_in", "v":70.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineB", 1579323040]' --attr '[{"c":"load", "v":2.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":112.0}, {"c":"diskutil", "v":1.0}]'
./ts put --pk '["machineB", 1579323045]' --attr '[{"c":"load", "v":3.0}, {"c":"network_in", "v":120.0}, {"c":"network_out", "v":120.0}, {"c":"diskutil", "v":2.0}]'
DLA資源
第二步,我們要開通DLA服務,并配置DLA到Tablestore的映射,細節可以參考
《使用DLA服務》在DLA控制台建立一個子賬戶:"賬戶管理"
# 樣例
# redchen_s1604337383174619
在DLA中新增執行個體的Schema資訊,在DLA控制台 "SQL"->"SQL執行" 同步執行如下指令
CREATE SCHEMA {Schema名} with DBPROPERTIES(LOCATION ='https://{VPC域名}', catalog='ots', instance ='{執行個體名}');
# 樣例
# CREATE SCHEMA ecs_metric_schema with DBPROPERTIES(LOCATION ='https://ecs-metric.cn-hangzhou.vpc.tablestore.aliyuncs.com', catalog='ots', instance ='ecs-metric');
在建立一個外表
# 注意,這裡的表名和字段一定要和Tablestore一緻
CREATE EXTERNAL TABLE metric (
machine VARCHAR NOT NULL ,
ts BIGINT NOT NULL,
load DOUBLE,
network_in DOUBLE,
network_out DOUBLE,
diskutil DOUBLE,
primary key(machine, ts));
授權子賬戶能操作以上Schema
# 樣例
# grant all on ecs_metric_schema.* to redchen_s1604337*********;
建立成功之後,可以在DLA界面找到JDBC的接入資訊:DLA控制台->通路站點管理,如圖所示:
配置完成之後,可以使用mysql用戶端連接配接以上的接入位址,确認連接配接是否正常。
mysql -h{DLA外網位址} -P{端口} -u{賬戶} -p{密碼} -D{Schema}
# 樣例
# mysql -h*.cn-hangzhou.datalakeanalytics.aliyuncs.com -P10000 -u* -p* -Decs_metric_schema
安裝Grafana
細節可以參考
《installation》網上也有很多文檔,這裡就不單獨在介紹;
使用Grafana
Grafana使用介紹,可以參見
官網,其中最主要的概念包括, DataSources(資料源)、Dashboard(儀表盤)、Panel(面闆)
第一步:配置資料源
我們這裡使用使用MySQL接入,接入資訊可以參見mysql用戶端通路的資訊ecs_metric_schema

配置接入資訊并儲存

第二步:新增一個Dashboard
配置一個Graph,讀取metric表中的時序資料

