从采集到分析-TSDB For InfluxDB®让你的数据产生价值
数据无处不在,价值无处不在。在时序数据库领域,TSDB For InfluxDB®作为一款数据存储分析的利刃,在生产和开发环境中得到了比较广泛的应用。本文主要讲述如何将你的数据搬迁上云,让你的数据产生更大的价值。
了解我们-TSDB For InfluxDB®
TSDB For InfluxDB®是一款专门处理高写入和查询负载的时序数据库,用于存储大规模的时序数据并进行实时分析,包括来自DevOps监控、应用指标和IoT传感器上的数据。它的主要特点如下:
专为时间序列数据量身订造高性能数据存储。TSM引擎提供数据高速读写和压缩等功能。
简单高效的HTTP API写入和查询接口。
针对时序数据,量身订造类似SQL的查询语言,轻松查询聚合数据。
允许对tag建索引,实现快速有效的查询。
数据保留策略(Retention policies)能够有效地使旧数据自动失效。
在阿里云购买成功之后,我们需要创建数据库账户和密码,设置存储策略。通过实例详情页面可以查看访问TSDB For InfluxDB®的方式,目前提供两种HTTP访问地址:VPC网络(什么是专有网络,相同VPC内的云产品实例可以相互访问)与公共网络(需购买时开通,内外部网络都可访问),均开通了HTTPS加密验证,注意接入时使用HTTPS通道。
实例生产完成后可以在管理用户账号和数据库用户test和数据库test,并保证用户test对数据库test具有读写权限。
Telegraf-数据的搬运工
Telegraf是一个用Go语言编写的代理程序,可采集系统和服务的统计数据,并写入TSDB For InfluxDB®数据库。Telegraf具有内存占用小的特点,通过插件系统开发人员可轻松添加支持其他服务的扩展。Telegraf安装完成后,数据可以用HTTP方式写入TSDB For InfluxDB®。
urls选择实例详情中的公网或者VPC访问地址,修改上图标记中的写入的数据库和存储策略,存储策略在不填的情况下将会写入该数据库默认存储策略中。TSDB For InfluxDB®采用认证的方式写入,在填写username和password之前需要确保该账号对数据库具有写权限。关于权限可以在实例管理->账号管理中进行设置。完成这些操作之后,Telegraf采集的数据便可以写入到TSDB For InfluxDB®中。
启动Telegraf
Ubuntu, Debian, RedHat, CentOS启动
sudo service telegraf start
Ubuntu 15.04+, Debian 8+, CentOS 7+, RHEL 7+启动
sudo systemctl start telegraf
客户端写入-不一样的风格
InfluxDB开源社区提供了丰富的SDK,基本上涵盖了主流了编程语言,TSDB For InfluxDB®完全兼容各种客户端。下面将介绍几种主要的写入方式:
Go写入方式
package main
import(
"fmt"
"log"
"math/rand"
"net/url"
"time"
client "github.com/influxdata/influxdb1-client"
)
func main(){
host, err := url.Parse(fmt.Sprintf("https://%s:%d","xxx.influxdata.rds.aliyuncs.com",3242))
if err !=nil{
log.Fatal(err)
}
config := client.Config{
URL:*host,
Username:"test",
Password:"test",
}
con, err := client.NewClient(config)
if err !=nil{
log.Fatal(err)
}
_, _, err = con.Ping()
if err !=nil{
log.Fatal(err)
}
var(
shapes =[]string{"circle","rectangle","square","triangle"}
colors =[]string{"red","blue","green"}
sampleSize =1000
pts = make([]client.Point, sampleSize)
)
rand.Seed(42)
for i :=0; i < sampleSize; i++{
pts[i]= client.Point{
Measurement:"shapes",
Tags: map[string]string{
"color": colors[rand.Intn(len(colors))],
"shape": shapes[rand.Intn(len(shapes))],
},
Fields: map[string]interface{}{
"value": rand.Intn(sampleSize),
},
Time: time.Now(),
}
}
bps := client.BatchPoints{
Points: pts,
Database:"test",
RetentionPolicy:"autogen",
}
_, err = con.Write(bps)
if err !=nil{
log.Fatal(err)
}
}
HTTP连接配置中需要指明实例的公网或者VPC地址和数据库用户、密码(具体可以在实例管理中查询)。在写入前指定数据写入的数据库和保留策略(如果不指定,则写入默认的保留策略),数据可以按行或者Batch的方式写入。为了提高写入吞吐,推荐Batch的写入方式,Batch行数按数据大小可以在100~1000行左右。SDK下载,请参见地址,程序编译执行命令为go run main.go
。
JAVA写入方式
package main;
import java.util.concurrent.TimeUnit;
import org.influxdb.InfluxDB;
import org.influxdb.BatchOptions;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.Point;
publicclassStartMain{
publicstaticvoid main(String[] args)throwsException{
StartMain startMain =newStartMain();
try{
startMain.run();
}catch(Exception e){
System.out.println(e);
}
}
publicvoid run()throwsException{
InfluxDB influxDB =InfluxDBFactory.connect("https://xxx.influxdata.rds.aliyuncs.com:3242","test","test");
String dbName ="test";
influxDB.setDatabase(dbName);
String rpName ="autogen";
influxDB.setRetentionPolicy(rpName);
influxDB.enableBatch(BatchOptions.DEFAULTS);
influxDB.write(Point.measurement("cpu")
.time(System.currentTimeMillis(),TimeUnit.MILLISECONDS)
.addField("idle",90L)
.addField("user",9L)
.addField("system",1L)
.build());
influxDB.write(Point.measurement("disk")
.time(System.currentTimeMillis(),TimeUnit.MILLISECONDS)
.addField("used",80L)
.addField("free",1L)
.build());
influxDB.close();
}
}
Java SDK下载见地址,在enableBatch
中设置异常捕捉函数可以处理写入异常。
influxDB.enableBatch(BatchOptions.DEFAULTS.exceptionHandler(
(failedPoints, throwable)->{/* custom error handling here */})
);
Influx CLI写入
TSDB for InfluxDB®支持命令行界面Influx CLI,连接时需指定ssl、host、port、username和password:
influx -ssl -host xxx.influxdata.rds.aliyuncs.com -port 3242-username admin -password admin
客户端上通过行写入协议可以将数据写入TSDB For InfluxDB®,如:
> INSERT cpu,host=serverA,region=us_west value=0.64
Shell写入
curl -i -XPOST -u test:test 'https://xxx.influxdata.rds.aliyuncs.com:3242/write?db=test'--data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'
Shell的具体用法可以参考HTTP API。
Shell的具体用法可以参考HTTP API。
数据分析
目前TSDB For InfluxDB®支持丰富的类SQL查询,非常方便从业者使用。
下面示例是查询每组color
的平均值:
> SELECT MEAN("value") FROM "shapes" GROUP BY "color"
name: shapes
tags: color=blue
time mean
--------
0216.25
name: shapes
tags: color=green
time mean
--------
0434.25
name: shapes
tags: color=red
time mean
--------
0540.25
InfluxDB® is a trademark registered by InfluxData, which is not affiliated with, and does not endorse, TSDB for InfluxDB®.