分散式時序資料庫InfluxDB

天府雲創發表於2018-01-26

InfluxDB 是一個開源分散式時序、事件和指標資料庫。使用 Go 語言編寫,無需外部依賴。其設計目標是實現分散式和水平伸縮擴充套件。

它有三大特性:

1. Time Series (時間序列):你可以使用與時間有關的相關函式(如最大,最小,求和等)
2. Metrics(度量):你可以實時對大量資料進行計算
3. Eevents(事件):它支援任意的事件資料

InfluxDB

特點

  • schemaless(無結構),可以是任意數量的列
  • Scalable
  • min, max, sum, count, mean, median 一系列函式,方便統計
  • Native HTTP API, 內建http支援,使用http讀寫
  • Powerful Query Language 類似sql
  • Built-in Explorer 自帶管理工具

管理介面:

InfluxDB

API

InfluxDB 支援兩種api方式

  • HTTP API
  • Protobuf API

Protobuf 還未開發完成, 官網文件都沒有

如何使用 http api 進行操作?

比如對於foo_production這個資料庫,插入一系列資料,可以發現POST 請求到 /db/foo_production/series?u=some_user&p=some_password, 資料放到body裡。

資料看起來是這樣的:

下面的"name": "events", 其中"events"就是一個series,類似關係型資料庫的表table

格式是json,可以在一個POST請求傳送多個 series, 每個 series 裡的 points 可以是多個,但索引要和columns對應。

上面的資料裡沒有包含time 列,InfluxDB會自己加上,不過也可以指定time,比如:

time 在InfluxDB裡是很重要的,畢竟InfluxDB是time series database
在InfluxDB裡還有個sequence_number欄位是資料庫維護的,類似於mysql的 主鍵概念

InfluxDB 增刪更查都是用http api來完成,甚至支援使用正規表示式刪除資料,還有計劃任務。

比如:

傳送POST請求到 /db/:name/scheduled_deletes, body如下,

這個查詢會刪除大於14天的資料,並且任何以stats開頭的資料,並且每天3:00 AM執行。

更加詳細檢視官方文件: http://influxdb.org/docs/api/http.html

查詢語言

InfluxDB 提供了類似sql的查詢語言

看起來是這樣的:

非常容易上手, 還支援Group ByMerging SeriesJoining Series, 並內建常用統計函式,比如max, min, mean 等

文件: http://influxdb.org/docs/query_language/

常用語言的庫都有,因為api簡單,也很容易自己封裝。

InfluxdDB作為很多監控軟體的後端,這樣監控資料就可以直接儲存在InfluxDB
StatsDCollectDFluentD

還有其它的視覺化工具支援InfluxDB, 這樣就可以基於InfluxDB很方便的搭建監控平臺

InfluxDB 資料視覺化工具

InfluxDB 用於儲存基於時間的資料,比如監控資料,因為InfluxDB本身提供了Http API,所以可以使用InfluxDB很方便的搭建了個監控資料儲存中心。

對於InfluxDB中的資料展示,官方admin有非常簡單的圖表, 看起來是這樣的

InfluxDB

除了自己寫程式展示資料還可以選擇:

tasseo

tasseo,為Graphite寫的Live dashboard,現在也支援InfluxDB,tasseo 比較簡單, 可以配置的選項很少。

InfluxDB

Grafana

Grafana是一個純粹的html/js應用,訪問InfluxDB時不會有跨域訪問的限制。只要配置好資料來源為InfluxDB之後就可以,剩下的工作就是配置圖表。Grafana 功能非常強大。使用ElasticsSearch儲存DashBoard的定義檔案,也可以Export出JSON檔案(Save ->Advanced->Export Schema),然後上傳回它的/app/dashboards目錄。

配置資料來源:

InfluxDB

相關文章