玩转Tablestore:使用Grafana快速展示时序数据

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服务,实现在线的交互式分析能力。如图所示,这一套标准的数据处理流程,数据经过加工计算,生成高附加值的内容,持久化到数据库中,并为客户提供在线的访问能力。

 

玩转Tablestore:使用Grafana快速展示时序数据

 

今天这篇文章正如标题所示,借助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

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服务》

 

在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控制台->访问站点管理,如图所示:

 

玩转Tablestore:使用Grafana快速展示时序数据

 

配置完成之后,可以使用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

 

玩转Tablestore:使用Grafana快速展示时序数据

 

配置接入信息并保存

玩转Tablestore:使用Grafana快速展示时序数据

 

第二步:新增一个Dashboard

 

配置一个Graph,读取metric表中的时序数据

 

玩转Tablestore:使用Grafana快速展示时序数据

 

 

玩转Tablestore:使用Grafana快速展示时序数据

 

上一篇:助力10万阿里小二备战双11,他们在背后都做了什么?


下一篇:《算法基础》——2.4 有关素数的运算