Grafana 是一款采用 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的访问信息:
./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 |
否 |
double |
网络流入流量 |
network_out |
否 |
double |
网络流出流量 |
diskutil |
否 |
double |
磁盘负载 |
创建表的命令
# 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控制台创建一个子账户:"账户管理"
# 样例 # 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
网上也有很多文档,这里就不单独在介绍;
使用Grafana
Grafana使用介绍,可以参见官网,其中最主要的概念包括, DataSources(数据源)、Dashboard(仪表盘)、Panel(面板)
第一步:配置数据源
我们这里使用使用MySQL接入,接入信息可以参见mysql客户端访问的信息ecs_metric_schema
配置接入信息并保存
第二步:新增一个Dashboard
配置一个Graph,读取metric表中的时序数据