InfluxDB & Grafana 實作

Webber
4 min readJun 19, 2019

--

現今大數據時代情況下,數據不單只是海量,且併發性越來越高,連帶要求系統吞吐量要高,處理反應要即時。因此,相對應技術應運而生,像是

  • Streaming : Kafka
  • Time-Series DB : InfluxDB/Prometheus/Graphite
  • 監控 UI : Grafana

Time-Series DB 相較以往的 RDB / Document / Key-Value / Wide-Column 等類型 DB,它是更適合處理時間性質資料,像是指定時間區間做統計查詢,因此很適合該場景 :

  • 設備每一秒報出各自的溫度,要能快速取出每五秒的平均值

而 Time-Series DB 為了達到能處理海量數據且高效能力,這類技術通常只提供 Insert/Read ,Delete 須依靠 Retention Policy。另外,一個很大優點是 InfluxDB 提供 HTTP Post 便可以將資料寫入,相當輕便好整合。

另外,要選擇與參考各類型 DB,推薦可到此網站,有詳細的排名與分類。

接下來,簡易介紹如何安裝與整合 InfluxDB & Grafana,並透過 HTTP 持續送資料到 InfluxDB,Grafana 即時呈現數據

首先,安裝的部分,推薦用這個 docker-compose

裡面除了包含 InfluxDB & Grafana 鏡像以外,也增加了 Chronograf 這套開源軟體,它是作為 InfluxDB Admin UI (InfluxDB 原本官方的 Admin UI 已經放棄改用 Chronograf)

照著 GitHub 上說明安裝完後,應可順利到 Chronograf Admin UI,去建立資料庫,甚至可以做查詢達到類似 Grafana 效果。

接下來,透過 HTTP API,可模擬機台送點到 InfluxDB

curl -i -XPOST 'http://localhost:8086/write?db=iot_test' --data-binary 'equipment,machine_id=1,region=tw value=0.5'
  • database : iot_test
  • measurement 可類比成 table name : equipment
  • tag key 可類比成有索引的欄位 : machine_id & region
  • tag value : 1 & tw
  • field key : value
  • field value : 0.5

再到 Grafana 便可以設計 Dashboard,設定對應的查詢條件

以下列SQL 為例,取出 machine_id 1設備每30秒平均值

SELECT mean(“value”) AS “mean_value” FROM “iot_test”.”autogen”.”equipment” WHERE “machine_id” = ‘1’ GROUP BY time(30s) FILL(none)
  • autogen 是 influxdb 每個 DB default retention policy,預設是永遠保留。建議可以改變保留期間或建立新的 retention policy
  • 若是要傳入資料到 non-default retention policy,HTTP 參數需要指定 rp parameter,並給予 retention policy name

最後呈現效果如下 :

更好的 Practice,可以透過 Kafka Producer & Consumer 或是 Kafka Connect for InfluxDB,達到一個更完整的 Real-Time 資料流架構

--

--