全部產品
Search
文件中心

Time Series Database:從採集到分析-TSDB For InfluxDB®讓你的資料產生價值

更新時間:Jul 06, 2024

資料無處不在,價值無處不在。在時序資料庫領域,TSDB For InfluxDB®作為一款資料存放區分析的利刃,在生產和開發環境中得到了比較廣泛的應用。本文主要講述如何將你的資料搬遷上雲,讓你的資料產生更大的價值。

瞭解我們-TSDB For InfluxDB®

TSDB For InfluxDB®是一款專門處理高寫入和查詢負載的時序資料庫,用於儲存大規模的時序資料並進行即時分析,包括來自DevOps監控、應用指標和IoT感應器上的資料。它的主要特點如下:

  • 專為時間序列資料量身訂造高效能資料儲存。TSM引擎提供資料高速讀寫和壓縮等功能。

  • 簡單高效的HTTP API寫入和查詢介面。

  • 針對時序資料,量身訂造類似SQL的查詢語言,輕鬆查詢彙總資料。

  • 允許對tag建索引,實現快速有效查詢。

  • 資料保留原則(Retention policies)能夠有效地使舊資料自動失效。

在阿里雲購買成功之後,我們需要建立資料庫賬戶和密碼,設定儲存策略。通過執行個體詳情頁面可以查看訪問TSDB For InfluxDB®的方式,目前提供兩種HTTP訪問地址:VPC網路(什麼是Virtual Private Cloud,相同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開源社區提供了豐富的用戶端,基本上涵蓋了主流了程式設計語言,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'

資料分析

目前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®.