使用 TDengine 快速搭建運維監測系統

提到監測,有不少成熟的解決方案,彷佛已經沒有再討論的必要,但隨着計算機技術的發展,愈來愈多的場景開始須要監測,它會向着更深更廣的方向發展。從業務領域來看,運維、電力、交通、工控、煤炭、油氣、科研等,全部具備量化監測指標的產業,都須要數據的採集、存儲、分析、可視化。但具體到不一樣業務,其監測的重點卻能夠差異很大。ios

運維監測系統概述

本文將業務領域侷限在IT運維監測方向,談談這裏面須要關注的一些事情。IT運維監測數據一般都是對時間特性比較敏感的數據,例如git

  • 系統資源指標:CPU、內存、IO、帶寬等
  • 軟件系統指標:存活狀態、鏈接數目、請求數目、超時數目、錯誤數目、響應時間、服務類型及其餘與業務有關的指標

這些數據的來源很豐富。能夠來自操做系統自帶命令,如free、vmstat、sar、iostat等。若是程序部署在Tomcat、WebLogic、IIS、JBoss等容器上,則由這些容器對外提供採集接口。但真正對軟件系統起做用的,業務上真正關注的指標,主要來自於數據埋點。埋點的事情有不少,先後端均可能有,一般都是業務上的行爲,可是如何存儲與分析埋點後的數據,是監測系統的一個重要問題。經過以上實時採集的數據,主要目標是得到以下信息github

  • 宿主機的健康狀態
  • 軟件是否處於正常運行狀態,系統穩定性如何
  • 軟件負載狀況,是否可以知足線上性能要求,是否須要增長實例,性能的瓶頸在哪裏,如何提升性能
  • 用戶行爲分析、用戶畫像

運維監測系統的組成

一個典型的監測系統,一般分爲數據採集、數據傳輸、數據存儲、數據統計分析、數據可視化五個模塊,分析結果最終會反饋到產品經理或者軟件研發人員,以確保線上軟件穩定運行,並進一步提供改進軟件的關鍵信息。web

1. 數據採集模塊

數據採集是監測系統的第一步,採集信息是否豐富、是否足夠準確、是否存夠實時,直接影響到了監測系統的應用效果。shell

若是是對主機狀態、軟件基本運行狀況進行數據採集,最簡單易用的是Telegraf,它是一個插件驅動的服務器代理程序,可直接從其運行的容器和系統中提取各類指標,事件和日誌,從第三方API提取指標。Telegraf還具備輸出插件,可將指標發送到各類其餘數據存儲,服務和消息隊列,包括InfluxDB、OpenTSDB、TDengine、NSQ等等。數據庫

若是是對軟件系統產生的日誌數據作數據採集,則須要該軟件系統的開發人員來完成。日誌數據可分爲結構化日誌和非結構化日誌兩類,對業務分析有益的數據,一般是結構化的,只是採用非結構化的文本進行了表示而已。不少軟件開發人員由於偷懶,但更多的是沒有這方面的意識,隨意的編寫記錄日誌的程序。這些日誌於是格式變化較大,壓縮比不好,等於將數據存儲成本和數據分析的工做量徹底推給了下游的數據分析人員,而分析人員受限於採用的開發工具,基本上沒法準確、實時的給出分析結果。恰巧,軟件系統中最容易更改且影響面最小的就是日誌模塊,因此,把日誌模塊抽象、改進、使得日誌結構化,這是比較重要且簡單的工做。json

2. 數據傳輸模塊

網絡環境不會是監控系統要考慮的主要問題,可是考慮到監控數據的大小和實時性要求,能夠將日誌區分慢日誌和快日誌。後端

對快日誌,比較流行的傳輸方式採用RESTFul接口,不一樣點在於選擇Pull仍是Push。若是是與業務關聯比較多的,建議採用Push方式,保證明時性的同時,也不須要緩存數據。Pull方式則比較簡單,通常只須要被監控的軟件系統提供Http接口便可,適用於拉取一些簡單數值,例如系統狀態、訪問數量、訪問時間等。快日誌通常須要存儲到實時分析系統,以生成實時報表爲主要目標。TDengine提供的RESTFul接口,能夠快速處理Push過來的Http請求,實時處理快日誌。緩存

慢日誌一般記到日誌文件,而後再單獨作一個通用的日誌收集程序,將日誌寫入到Kafka中,再分流出去。以後,由日誌機消費這些數據,進入到數據存儲模塊中。服務器

3. 數據存儲模塊

數據存儲選型在監測系統中相當重要,可供選擇的大數據引擎不少。針對時序數據作了優化的,例如Prometheus、InfluxDB、TDengine、ClickHouse、OpenTSDB、Graphite等時序數據庫;通用分析型的,例如Hadoop體系及其上的流式計算引擎。具體怎麼選?仍是要從記錄的數據類型來看,關注的指標能夠從寫入速度、採集頻率、數據壓縮比、查詢分析速度方面着手。

若是和時間關聯不大,採用Hadoop處理這類問題較好。若是確實是時序數據的,則採用時序數據庫比較好。在時序數據庫上,若是爲非結構化數據的,能夠採用InfluxDB、OpenTSDB、Cassendra、MongoDB,若是爲結構化數據的,能夠採用Prometheus、ClickHouse、TDengine。後面這三種,Prometheus受限於設計,須要在水平擴展的問題上妥善考慮;ClickHouse偏重於分析,實時數據的處理能力稍差;TDengine推出時間較短,但在寫入速度、查詢速度、壓縮比等方面都有突出的性能表現。

4. 數據統計分析模塊

統計分析的目標,不該該被選擇的存儲引擎限制了想象力。可是一般來講,監控數據的統計分析也都是與時間序列有關的一系列分析,能夠分爲兩類

  • 實時分析:最新值、實時曲線、流式計算、滑動窗口、歷史截面等
  • 非實時分析:年報、月報、日報、分組、聚合等

這些指標的查詢性能,是選擇數據存儲引擎的關鍵因素。TDengine查詢性能很是好,可以將絕大多數傳統思惟下的非實時分析,轉變爲實時分析,充分利用這個特色,能夠爲用戶提供新功能,進一步拓展新業務。

5. 數據可視化模塊

數據可視化方面,除了Grafana以外,並無太多可供選擇的開源可視化軟件。若是部門內部使用,是足夠的;若是是對外的項目,或者須要跨部門提供數據,就須要本身編寫更加易用、查詢條件更豐富的界面,展現實時或者定時任務的計算結果,以期獲得更好的反饋。

基於TDengine的運維監測系統的快速搭建

參照TDengine的白皮書,它創新性的定義了時序數據的存儲結構,並且具有安裝使用方便、壓縮比高、查詢性能好等特色,特別適用於處理實時監測類數據。與具體業務上有關的監測邏輯,不容易舉例說明。但因爲TDengine可以與開源數據採集系統Telegraf和開源數據可視化系統Grafana快速集成,因此本節參照以上各系統的用戶手冊,快速搭建運維數據監測系統,整個過程無需任何代碼開發。

1. 架構圖

系統監測架構圖
圖1 系統監測架構圖

2. TDengine的安裝與配置

  • 下載tdengine-1.6.0.0.tar.gz,地址http://www.taosdata.com/downloads/
  • 安裝TDengine,解壓後運行install.sh進行安裝
  • 啓動TDengine,運行sudo systemctl start taosd
  • 測試是否安裝成功,運行TDengine的shell命令行程序taos,能夠看到以下相似信息
1Welcome to the TDengine shell, server version:1.6.0  client version:1.6.0
2Copyright (c) 2017 by TAOS Data, Inc. All rights reserved.
3
4taos> 
複製代碼

3. Telegraf的安裝與配置

  • 下載telegraf_1.7.4-1_amd64.deb,地址https://portal.influxdata.com/downloads/
  • 安裝telegraf,sudo dpkg -i telegraf_1.7.4-1_amd64.deb
  • 配置telegraf,修改Telegraf配置文件/etc/telegraf/telegraf.conf中與TDengine有關的配置項

在output plugins部分,修改[[outputs.http]]配置項

1url:http://ip:6020/telegraf/udb,其中ip爲TDengine集羣的中任意一臺服務器的IP地址,6020爲TDengine RESTful接口的端口號,telegraf爲固定關鍵字,udb爲用於存儲採集數據的數據庫名稱,可預先建立
2method: "POST" 
3username: 登陸TDengine的用戶名
4password: 登陸TDengine的密碼
5data_format: "json"
6json_timestamp_units: "1ms"
複製代碼

例如

1[[outputs.http]]
2   url = "http://127.0.0.1:6020/telegraf/udb"
3   method = "POST"
4   username = "root"
5   password = "taosdata"
6   data_format = "json"
7   json_timestamp_units = "1ms"
複製代碼

在agent部分,修改以下配置項

1hostname: 區分不一樣採集設備的機器名稱,需確保其惟一性
2metric_batch_size: 30,容許Telegraf每批次寫入記錄最大數量,增大其數量能夠下降Telegraf的請求發送頻率,但對於TDegine,該數值不能超過50
複製代碼

例如

1[agent]
2   hostname = "gsl"
3   metric_batch_size = 30
4   interval = "10s"
5   debug = true
6   omit_hostname = false
複製代碼
  • 啓動telegraf,sudo systemctl start telegraf
  • 測試是否接收到Telegraf的數據
    • 在shell中輸入show databases語句,應該看到名爲udb的數據庫
    • 運行use udb語句
    • 運行show stables語句,能夠看到cpu等超級表
    • 運行show stables語句,能夠看到cpu_gsl_cpu0等普通數據表

圖 2 Telegraf數據接入到TDengine
圖 2 Telegraf數據接入到TDengine

3.Grafana的安裝與配置

  • 下載grafana_6.2.5_amd64.deb,地址https://grafana.com/grafana/download
  • 安裝Grafana,sudo dpkg -i grafana_6.2.5_amd64.deb
  • 配置Grafana,TDengine 的 Grafana 插件 /usr/local/taos/connector/grafana 目錄下,將之拷貝到/var/lib/grafana/plugins 目錄
  • 啓動Grafana,sudo systemctl start taosd
  • 用戶能夠直接經過localhost:3000的網址,登陸Grafana服務器(用戶名/密碼:admin/admin),配置TDengine數據源,此時能夠在數據源列表中看到TDengine數據源類型

圖 3 Grafana載入TDengine插件
圖 3 Grafana載入TDengine插件

  • 在Host文本框中輸入http://localhost:6020並保存

圖 4 建立TDengine數據源
圖 4 建立TDengine數據源

  • 而後,就能夠在Grafana的數據源列表中看到剛建立好的TDengine的數據源

圖 5 TDengine數據源配置成功

  • 建立Dashboard的時候使用TDengine數據源

圖 6 建立Dashboard時選擇TDengine數據源
圖 6 建立Dashboard時選擇TDengine數據源

點擊Add Query按鈕增長三個新查詢,在INPUT SQL輸入框中輸入查詢SQL語句,該SQL語句的結果集應爲兩行多列的曲線數據,例如

1select avg(f_usage_idle) from udb.cpu WHERE ts>=$from and ts<$to interval($interval)
2
3其中,$from、$to和$interval爲TDengine插件的內置變量,表示從Grafana插件面板獲取的查詢範圍和時間間隔
4點擊GENERATE SQL按鈕能夠看到Grafana發給TDengine的SQL語句。
5
6select avg(f_usage_idle) from udb.cpu WHERE ts>='2019-07-04T01:23:44.509Z' and ts<'2019-07-04T07:23:44.511Z' interval(20000a)
複製代碼

圖 7 Grafana展現的Cpu監測圖
圖 7 Grafana展現的Cpu監測圖

總結

監測系統能夠採用的技術方案有不少,若是僅僅是作一個玩具,選擇面是很大的。但若監測的數據量很大,對於寫入尤爲是分析性能要求很高的場景,不妨試試TDengine。

本文只是簡單對TDengine使用作了初步探討,要想真正瞭解它超強的讀寫能力,還須要進一步構造大規模的測試數據集。

關於 TDengine

TDengine是濤思數據擁有自主知識產權的高性能、可伸縮、高可靠、零管理的物聯網大數據平臺軟件,能夠將數據庫、緩存、消息隊列、流式計算等功能徹底融合在一塊兒。因爲針對物聯網大數據特色作了各類優化,TDengine的數據插入、查詢的性能比通用的大數據平臺好10倍以上,存儲空間也大爲節省,採用SQL接口,與第三方軟件能無縫集成,大幅簡化了物聯網平臺的系統架構,大幅減小了研發和運維的複雜度與成本。TDengine可普遍運用於物聯網、車聯網、工業大數據等領域。2019年7月12日,TDengine開源,在GitHub全球趨勢排行榜上連續幾天排名第一。

目前在GitHub上,TDengine的Star數已超10,000,GitHub地址:github.com/taosdata/TD… ,歡迎來GitHub上Star咱們!

相關文章
相關標籤/搜索