从采集到分析-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®.