互聯網級監控系統必備-時序數據庫之Influxdb技術

時間序列數據庫,簡稱時序數據庫,Time Series Database,一個全新的領域,最大的特色就是每一個條數據都帶有Time列。數據庫

時序數據庫到底能用到什麼業務場景,答案是:監控系統。服務器

Baidu一下,互聯網監控系統,你們會發現小米、餓了嗎等互聯網巨頭都在用時序數據庫實現企業級的互聯網監控系統。網絡

不少人會說,用Zabbix不就搞定了,其實不是這樣的,簡單的主機資源監控、網絡監控、小規模的部署環境,Zabbix能搞定。架構

若是在IDC 上千臺服務器環境下,分佈式應用架構、各類中間件,這種狀況下咱們要監控上千臺服務的主機資源、網絡、按不一樣緯度監控服務的性能、TPS,監控各種中間件,程序監控埋點。Zabbix就沒法curl

知足須要了。此時,咱們要獨立搭建本身的監控體系了。說到這,每個監控圖表的背後,都有什麼?分佈式

1. 時間軸函數

2. 數據值(不一樣指標緯度)性能

例如,一段時間內CPU使用率大數據

這時,各類Google、Baidu以後,你確定會搜索到Influxdb、OpenTSDB等時序數據庫。ui

Influxdb咱們研究了很長的時間,準備用2篇文章,推薦給你們,本文中,咱們分享一下Influxdb的關鍵特性、查詢語法和使用場景。

1、Influxdb關鍵特性

1. 支持相似SQL的查詢語法

2.提供了Http Api直接訪問

3.存儲超過10億級別的時間序列數據

4.靈活的數據保留策略,能夠定義到Database級別(只保留最熱的數據)

5.內置管理接口和CMD

6.飛通常速度的聚合查詢

7.按不一樣時間段進行聚合查詢

8.內置持續查詢功能,定時計算指定時間段的數據,插入到指定表中,能夠理解爲定時歸集數據

9. 水平擴展,支持集羣模式

2、Influxdb 版本和.Net支持

1. 根據咱們的使用經驗,V0.10版本是很是穩定的,V0.9.6咱們用過,有內存泄漏問題

2. GitHub上有很是多的.Net Libraby,方便咱們寫入和讀取數據

3、數據寫入Write Data(Points)

Http API:
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load,host=server01,region=us-west value=0.64 1434055562000000000‘
db:mydb, 要寫入的數據庫
measurement:cpu_load,表
tag keys:host  region  tag value:server01 us-west
tag標籤能夠理解爲維度,可選參數,用於標識不一樣的數據源,基於tag使查詢更加簡單和高效
 Tags are indexed so queries on tag keys or tag values are more performant than queries on fields.
key field:value  value field:0.64
Timestamp:1434055562000000000 可選參數、UTC

支持批量寫入
支持同一個Timestamp寫入不一樣的數據
Influxdb 支持存儲結構靈活變化,能夠在任意增長measure、tags、fields,可是每一個tag、field的數據類型必須固定。

4、查詢Query

Http API:
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT value FROM cpu_load_short WHERE region='us-west‘
返回JSON格式數據
支持同時多個Query SQL
查詢最大返回10000個點的數據,若是超過閾值,能夠設置chunk_size
Measurement、Tag、Field、數據等大小寫敏感,SQL關鍵字不區分大小寫

支持算術計算:
SELECT (water_level * 2) + 4 from h2o_feet
支持對Tags進行過濾查詢,條件必須使用單引號
SELECT water_level FROM h2o_feet WHERE location = 'santa_monica'
Tag value 爲空、不爲空過濾
SELECT * FROM h2o_feet WHERE location !~ /.*/
SELECT * FROM h2o_feet WHERE location =~ /.*/
時間範圍過濾
SELECT * FROM h2o_feet WHERE time > now() - 7d
Field value過濾
SELECT * FROM h2o_feet WHERE location = 'coyote_creek' AND  water_level > 8

聚合函數、選擇函數、轉換函數

5、持續查詢(Continuous Queries)

持續查詢是Influxdb自動、週期的運行的查詢,結果自動存儲

設計持續查詢的目的是爲了規則採樣數據,好比按天、按月採樣數據

CREATE CONTINUOUS QUERY <cq_name> ON <database_name> [RESAMPLE [EVERY <interval>] [FOR <interval>]] BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement> FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>] END

6、 監控應用場景

經過上面幾個部分的介紹,Influxdb的基本語法就能夠掌握了。有什麼做用:

1. 實時採集監控數據,按時間寫入Influxdb

2. 按不一樣緯度聚合查詢監控數據,用於監控展示

3. 持續查詢,定時歸集指定時間的數據,用於更大時間範圍監控數據的展示

總結一下,場景結合實踐,經過實際監控系統的應用,和你們分享了Influxdb的使用和技能。咱們本身的監控系統就是經過這個套路一點點搭建起來的。

目前,咱們的監控平臺,2500個監控項,500臺服務器實時監控,每日處理上T數據,幾百個監控圖表,Influxdb知足了咱們平常超大規模監控的須要。

同時,Influxdb在大數據展示領域,也有不俗的表現,Druid的集成也很棒的。

 

周國慶

2017/7/11

相關文章
相關標籤/搜索