天天看點

《InfluxDB原理與實戰》讀書筆記

概述

前言部分,作為第一印象(雖然很多人,包括我有時候不怎麼看),寫得很牛逼,總結的結論很中肯:

海量監控資料的真正挑戰在于以下幾點:

1.能否做到實時。實時是種質變的能力,可将一個離線監控平台提升為一個實時決策系統。難點在于能否設計實作高性能的架構,以及能否實作水準擴充等。

2.分叢集後,單個業務的流量大小、标簽集多少是關鍵。流量大,相對容易解決,主要涉及系統性能和水準擴充等。标簽集多,海量标簽,海量時間序列線,如何做查詢優化是挑戰,如筆者遇到的一些業務上報的監控資料,有幾十個次元的标簽,并将QQ号和URL作為标簽值,有非常海量的時間序列線。

3.針對監控資料多寫少讀、成本敏感的特點,如何設計高效的存儲引擎?既能充分發揮硬體性能,又能在高效壓縮存儲的同時保障查詢效率。

技術理念定位:技術降成本,堅決反對開源軟體堆砌。

要做的是借助強大的技術和工程能力,直面問題,在架構和源碼層面解決它,而不是引入和堆砌更多的開源軟體。

第一章 初識InfluxDB

時序資料

時序資料的定義,總結的若幹個特點:

  1. 抵達的資料幾乎總是作為新條目被記錄,無更新操作。
  2. 資料通常按照時間順序抵達。
  3. 時間是一個主坐标軸。

InfluxData與TICK

InfluxData公司的開源高性能時序中台TICK(Telegraf +InfluxDB + Chronograf +Kapacitor), InfluxDB是作為TICK的存儲系統進行設計和開發的。TICK專注于DevOps監控、IoT監控、實時分析等應用場景,是一個內建了采集、存儲、分析、可視化等能力的開源時序中台,由Telegraf、 InfluxDB、Chronograf、Kapacitor 4個元件以一種靈活松散但緊密配合、互為補充的方式構成,各個子產品互相配合、互為補充,整體系統架構:

《InfluxDB原理與實戰》讀書筆記

該公司開源​​InfluxDB-Relay​​的高可用套件後,宣布閉源其叢集功能,作為商業付費版本(InfluxDB Enterprise和InfluxDB Cloud)分發。

使用場景

時序資料的存儲、分析與監控

優勢

特性與簡介

第二章 InfluxDB入門

安裝

指令行簡介

配置檔案

第三章 寫入和查詢

寫入

InfluxDB寫操作支援簡明的行協定(Line Protocol,一種基于文本格式的協定),以及CollectD、Graphite、OpenTSDB、Prometheus、UDP等第三方協定。

行協定

單行文本,表示一條時序資料,由表、标簽集、名額集和時間戳4部分組成

第四章 連續查詢和保留政策

連續查詢

保留政策

第五章 認證與授權

通過認證和授權,InfluxDB的不同賬戶擁有完全獨立的資料空間和權限空間。

認證

授權

第六章 叢集和高可用

第七章 備份管理和節點管理

備份管理

InfluxDB企業版提供兩個工具集:

  1. 備份和還原備份工具集

    用于大多數場景,通用型工具;支援以資料庫、保留政策、分片3個次元標明要操作的資料,進行備份或還原備份操作,

  2. 導出和導入資料工具集

    針對海量資料集(100G以上)場景補充設計的備份工具。

  • 導出:influx_inspect export,以行協定格式導出資料,參數選項:
  • -compress:使用gzip壓縮資料,預設不壓縮
  • -database ​

    ​<db_name>​

    ​:要導出的資料對應的資料庫名稱
  • -datadir ​

    ​<data_dir>​

    ​​:DATA節點資料對應的存儲目錄,預設值​

    ​$HOME/.influxdb/data​

  • -end ​

    ​<timestamp>​

    ​:時間範圍結束的時間戳,rfc3339格式
  • -out ​

    ​<export_dir>​

    ​​:導出資料的存儲目錄,預設值​

    ​$HOME/.influxdb/export​

  • -retention ​

    ​<rp_name>​

    ​:要導出的資料對應的保留政策名稱
  • -start ​

    ​<timestamp>​

    ​:時間範圍開始的時間戳,rfc3339格式
  • -waldir ​

    ​<wal_dir>​

    ​​:DATA節點WAL檔案對應的存儲目錄,預設值為​

    ​$HOME/.influxdb/wal​

  • 導入:influx-import,選項:
  • -path:要導入的資料檔案的存儲目錄
  • -compressed:如果導入檔案為壓縮檔案,則設定為true,支援.gz格式壓縮
  • -pps:導入允許的速率。預設pps為0不限速。
  • -precision ‘h|m|s|ms|u|ns’:指定導入資料的時間戳精度,支援h小時、m分鐘、s秒、ms毫秒、u微秒、ns納秒,精度預設為ns。

節點管理

第八章 第三方協定

現今的開源世界太繁榮,閉門造車一家獨大,大機率會玩死。是以,需要支援與其他系統原生內建或者以插件形式內建的可擴充能力。

UDP

CollectD

​​官網​​,

架構圖:

《InfluxDB原理與實戰》讀書筆記

多名額插件(Multi-value Plugins)用于指定多名額資料的處理方式,有兩種處理方式:split和join

Graphite

OpenTSDB

OpenTSDB是基于HBase的分布式、可伸縮的時序型資料庫,由時間序列守護程式(Time Series Daemon,TSD)及指令行實用程式集組成。可以通過運作一個或多個TSD來提供OpenTSDB服務,每個TSD都是獨立的,沒有主裝置和共享狀态,是以使用者可以根據需要運作任意數量的TSD,以支撐業務需求。每個TSD使用HBase或托管的Google Bigtable服務來存儲和檢索時間序列資料,資料模式針對類似時間序列的快速聚合進行高度優化,以最大程度節省存儲空間。使用者不需要直接通路底層存儲,可通過telnet協定、HTTP API或内置GUI與TSD通信,來擷取相關的資料或執行預設操作。所有通信都在同一指定端口上進行,TSD通過檢視接收的前幾個位元組來确定用戶端的協定。OpenTSDB架構:

《InfluxDB原理與實戰》讀書筆記

Prometheus

Prometheus的靈感來源于Google的Borgmon監控系統,主要子產品包括Prometheus Server、Exporters、Push Gateway、PromQL、Alertmanager以及圖形界面,系統架構:

《InfluxDB原理與實戰》讀書筆記

第九章 基于TICK的DevOps監控實戰

TICK,即Telegraf、InfluxDB、Chronograf、Kapacitor4個元件,是一個集采集能力、運算和存儲能力、告警能力、可視化能力為一體,支援數百種第三方系統和軟體的監控系統,專注于DevOps監控、IoT監控、實時分析。

TICK架構圖:

《InfluxDB原理與實戰》讀書筆記

Telegraf采集配置檔案指定的監控資料,并通過InfluxDB API接口上報到InfluxDB伺服器,InfluxDB伺服器接收到上報的時序資料後,執行預設的連續查詢、聚合運算等操作并進行壓縮存儲。通過Chronograf可以檢視Dashboard等可視化資訊,通過Kapacitor可以對接收到的時序資料執行預設的告警政策。

Telegraf

InfluxDB

Chronograf

Kapacitor

第十章 基于InfluxDB、Prometheus、Grafana的DevOps監控實戰

開源世界,開放和生态才是未來。InfluxDB支援內建Prometheus、Grafana。Prometheus缺乏資料持久存儲能力的問題?

Prometheus

安裝,略過。

Grafana

  • 可視化:從熱圖到直方圖,從圖表到地理地圖,Grafana支援大量的可視化選項,通過一種精美呈現的方式幫助讀者了解資料。
  • 告警:可以可視化地定義門檻值、配置告警政策、處理名額資料和生成相應的告警資訊,并支援Slack、PagerDuty、VictorOps、OpsGenie等通知系統。
  • 統一顯示:将多種資料源的資料整合起來統一顯示,支援30多個開源和商業資料源,也可以基于多種資料源建構統一儀表盤。
  • 開放:完全開源的,并由一個充滿活力的社群開發和營運;安裝友善,支援全部主流作業系統,提供Docker安裝鏡像;提供雲托管的Grafana服務。
  • 可擴充性:目前Grafana官方庫支援數百個儀表盤和插件,充滿激情和活力的Grafana社群每周都會推出新的儀表盤或插件。
  • 協同:可在團隊之間共享資料和儀表盤。

內建

第十一章 InfluxDB源碼架構剖析

繼續閱讀