1. 程式人生 > >InfluxDB 開源分散式時序、事件和指標資料庫

InfluxDB 開源分散式時序、事件和指標資料庫

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

特點

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

管理介面:

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

[
  {
    "name": "events",
    "columns": ["state", "email", "type"],
    "points": [
      ["ny", "
[email protected]
"
, "follow"], ["ny", "[email protected]", "open"] ]
}, { "name": "errors", "columns": ["class", "file", "user", "severity"], "points": [ ["DivideByZero", "example.py", "[email protected]", "fatal"] ] } ]

格式是json,可以在一個POST請求傳送多個series

, 每個series裡的points可以是多個,但索引要和columns對應。

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

[
  {
    "name": "response_times",
    "columns": ["time", "value"],
    "points": [
      [1382819388, 234.3],
      [1382819389, 120.1],
      [1382819380, 340.9]
    ]
  }
]

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

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

比如:

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

{
  "regex": "stats\..*",
  "olderThan": "14d",
  "runAt": 3
}

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

查詢語言

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

看起來是這樣的:

select * from events where state == 'NY';

select * from log_lines where line =~ /error/i;

select * from events where customer_id == 23 and type == 'click';

select * from response_times where value > 500;

select * from events where email !~ /.*gmail.*/;

select * from nagios_checks where status != 0;

select * from events 
where (email =~ /.*gmail.* or email =~ /.*yahoo.*/) and state == 'ny';

delete from response_times where time > now() - 1h

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

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

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

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

InfluxDB 資料視覺化工具

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

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

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

tasseo

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

Grafana

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

配置資料來源:

   datasources: {      
      influx: {
        default: true,
        type: 'influxdb',
        url: 'http://<your_influx_db_server>:8086/db/<db_name>',
        username: 'test',
        password: 'test',
      }
    },


勘誤:“使用 Go 語音編寫”,“語音”應該是“語言”吧

回覆

已改, 感謝

回覆

tosun· 2014年08月28日

請問有influxdb和OpenTSDB的比較嗎?

回覆

OpenTSDB沒用過,有機會試下

回覆

OpenTSDB和influxdb還是要看的量級的場景,畢竟Opentsdb是需要hbase的支撐的。 但是他倆都有個缺點是不能做rrdtool那種的預先計算, 當然也可以通過別的邏輯來減輕後期聚合計算帶來的影響 。 我這邊有個metric的平臺採用的就是influxdb做後端儲存,效能還是很客觀的,他本身有一些靈巧的設計, 比如lru快取演算法,查詢的連續性,自帶非同步

回覆

厲害

回覆

8086....

回覆

· 2015年08月03日

想起了ELK...

回覆

arkii· 2016年01月11日

據我瞭解,Grafana 的 Dashboard,以及使用者許可權 是儲存在sqlite資料庫裡。
Kibana使用ElasticsSearch儲存DashBoard的定義檔案。


相關推薦

InfluxDB 開源分散式時序事件指標資料庫

InfluxDB是一個開源分散式時序、事件和指標資料庫。使用 Go 語言編寫,無需外部依賴。其設計目標是實現分散式和水平伸縮擴充套件。 特點 schemaless(無結構),可以是任意數量的列Scalablemin, max, sum, count, mean, median 一系列函式,方便統計Nat

zookeeper(四):核心原理(Watcher事件狀態)

ted sso 兩個 reat exist 這一 通過 投票 children zookeeper主要是為了統一分布式系統中各個節點的工作狀態,在資源沖突的情況下協調提供節點資源搶占,提供給每個節點了解整個集群所處狀態的途徑。這一切的實現都依賴於zookeeper中的事件監

爬蟲-- 分散式 Erlang RabbitMQ Celery 的安裝

分散式:多臺伺服器處理一個任務 分散式爬蟲 使用Celery + RabbitMQ  實現,而且 RabbitMQ 是基於Erlang 安裝的 一、安裝erlang  rabbitmq (1)windows下安裝 1、先安裝erlang  otp

爬蟲-- 分散式 Erlang RabbitMQ Celery 的安裝

分散式:多臺伺服器處理一個任務 分散式爬蟲 使用Celery + RabbitMQ  實現,而且 RabbitMQ 是基於Erlang 安裝的 一、安裝erlang  rabbitmq (1)windows下安裝 1、 先安裝erlang  otp_win64_2

Vue學習之vue例項中的資料事件方法

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initia

C#中委託事件回撥函式的理解

在C#中我們經常會碰到事件,尤其是在WPF或者WinForm中,窗體載入、或者點選一個按鈕,都會觸發事件。實際上,事件是對委託的封裝。如果不進行封裝,讓委託暴露給呼叫者,呼叫者就可以把委託變數重新引用到新的委託物件,也就刪除了當前要呼叫的方法列表;更糟糕的是,公共的委託成員打破了封裝不僅導致程式碼難以維護和除

grafana-開源時序性統計監控平臺(未完成)

提到雙十一人人都會想到天貓霸氣的實時大屏。說起實時大屏,都會想到最典型的流式計算架構: 資料採集:將來自各源頭資料實時採集 中間儲存:利用類Kafka Queue進行生產系統和消費系統解耦 實時計算:環節中最重要環節,訂閱實時資料,通過計算規則對視窗中資料進行運算

分散式事務分散式事務概念彙總

1、鎖: 單程序的系統中,存在多執行緒同時操作一個公共變數,此時需要加鎖對變數進行同步操作,保證多執行緒的操作線性執行消除併發修改。解決的是單程序中的多執行緒併發問題。 2、分散式鎖: 只要的應用場景是在叢集模式的多個相同服務,可能會部署在不同機器上,解決程序間安全

DevExpress 行事歷(Scheduler)的常用屬性事件方法

sources sch ble cursor 生產 ase art ott blog 一、TcxScheduler【TcxScheduler常用屬性】1.Storage - 邦定一個Storage為Scheduler顯示提供數據 2.DateNavigate.Col

Navicat for Premium破解通用MySQLMariaDBMongoDBSQL ServerOraclePostgreSQL SQLite 資料庫

Navicat for Premium破解通用MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 資料庫 Navicat for MariaDB為例 Navicat Premium 是一套資料庫開發工具,讓你從單一應用程

phpMyAdmin 安裝,建立修改刪除資料庫及插入瀏覽搜尋資料表中的資料

phpMyAdmin是眾多MySQL圖形化管理工具中使用最廣泛的一種,不管是Windows還是Linux,都可以通過該管理工具可以對MySQL進行各種操作。 一、下載及安裝 使用者可以在官方網站上免費下載最新版本,免費下載 下載好後,把壓縮包解壓到apache的專案目錄中,開啟config

[筆記]OracleMySQLDB2資料庫分頁查詢的實現

1.Oracle分頁查詢 SELECT * FROM (        SELECT tt.*,ROWNUM AS rowno                 FROM (                     SELECT t.info_id,t.title,t.sou

Vertica的這些事—— SQL ServerOracleMySQLVertica資料庫常用函式對比

SQL Server、Oracle、MySQL和Vertica資料庫常用函式對比 Vertica資料庫是HP公司新收購的用於BI方面的資料庫。 絕對值 S:select abs(-1) value O:select abs(-1) value f

DELPHI分別連線MS SQLSERVEROracleACCESS資料庫的連線字串(備用)

1、DELPHI連線MS SQLSERVER資料庫 ADOConn_ToolDB.Close; ADOConn_ToolDB.ConnectionString:='Provider=SQLOLEDB.1;'+

Redis快取維護方案-考慮資料庫與快取雙寫redis本地資料庫事務一致性資料庫主從同步延遲的情況怎麼解決快取與資料庫不一致

一般常用的快取方案有兩種: 第一種 讀的時候,先讀快取,快取沒有的話,讀資料庫,取出資料後放入快取,同時返回響應。 更新的時候,

分散式系統:時間時鐘事件序列

在程式中,我們經常需要知道事件序列,在單體應用中,事件序列是較為簡單的,最簡單的辦法就是用時間戳,但在分散式系統中,事件序列是很困難的,Leslie Lamport大神在論文Time, Clocks, and the Ordering of Events in a Distributed System討論了在

一張圖看懂開源許可協議,開源許可證GPLBSDMITMozillaApacheLGPL的區別

軟件發布 csdn 合作 title ref 沒有 版本 簡單介紹 著名 開源許可證GPL、BSD、MIT、Mozilla、Apache和LGPL的區別 首先借用有心人士的一張相當直觀清晰的圖來劃分各種協議:開源許可證GPL、BSD、MIT、Mozilla、Apache和L

jquery checkbox選中改變狀態changeclick事件

document browser clas als true bsp 賦值 函數返回 checkbox jquery判斷checked的三種方法:.attr(‘checked); //看版本1.6+返回:”checked”或”undefined” ;1.5-返回:tr

任務調度開源框架Quartz動態添加修改刪除定時任務

star play cit box sport nts str ignorecas tar 作者:Joyce-Luo Quartz 是個開源的作業調度框架,為在 Java 應用程序中進行作業調度提供了簡單卻強大的機制。Quartz框架包含了調度器監聽、

js keyupkeypresskeydown事件 詳解

rgs spa 小鍵盤 ansi 使用方法 form 單個 sage ges js keyup、keypress和keydown事件都是有關於鍵盤的事件 當一個按鍵被pressed 或released在每一個現代瀏覽器中,都可能有三種客戶端事件。 keydown even