使用TDengine快速搭建運(yùn)維監(jiān)測(cè)系統(tǒng)

這里官方文檔太久沒(méi)有更新,可以參考但是不能完全照般了,做了小調(diào)整.僅以自己搭建的過(guò)程碰到的問(wèn)題做的調(diào)整修改原有文檔,請(qǐng)?jiān)髡呃斫?

提到監(jiān)測(cè),有很多成熟的解決方案,似乎已經(jīng)沒(méi)有再討論的必要,但隨著計(jì)算機(jī)技術(shù)的發(fā)展,越來(lái)越多的場(chǎng)景開(kāi)始需要監(jiān)測(cè),它會(huì)向著更深更廣的方向發(fā)展。從業(yè)務(wù)領(lǐng)域來(lái)看,運(yùn)維、電力、交通、工控、煤炭、油氣、科研等,所有具有量化監(jiān)測(cè)指標(biāo)的產(chǎn)業(yè),都需要數(shù)據(jù)的采集、存儲(chǔ)、分析、可視化。但具體到不同業(yè)務(wù),其監(jiān)測(cè)的重點(diǎn)卻可以差別很大。

官網(wǎng)博文同步發(fā)布地址:https://www.taosdata.com/blog/2019/07/10/使用tdengine快速搭建運(yùn)維監(jiān)測(cè)系統(tǒng)/

運(yùn)維監(jiān)測(cè)系統(tǒng)概述

本文將業(yè)務(wù)領(lǐng)域局限在IT運(yùn)維監(jiān)測(cè)方向,談?wù)勥@里面需要關(guān)注的一些事情。IT運(yùn)維監(jiān)測(cè)數(shù)據(jù)通常都是對(duì)時(shí)間特性比較敏感的數(shù)據(jù),例如

系統(tǒng)資源指標(biāo):CPU、內(nèi)存、IO、帶寬等

軟件系統(tǒng)指標(biāo):存活狀態(tài)、連接數(shù)目、請(qǐng)求數(shù)目、超時(shí)數(shù)目、錯(cuò)誤數(shù)目、響應(yīng)時(shí)間、服務(wù)類(lèi)型及其他與業(yè)務(wù)有關(guān)的指標(biāo)

這些數(shù)據(jù)的來(lái)源很豐富??梢詠?lái)自操作系統(tǒng)自帶命令,如free、vmstat、sar、iostat等。如果程序部署在Tomcat、WebLogic、IIS、JBoss等容器上,則由這些容器對(duì)外提供采集接口。但真正對(duì)軟件系統(tǒng)起作用的,業(yè)務(wù)上真正關(guān)注的指標(biāo),主要來(lái)自于數(shù)據(jù)埋點(diǎn)。埋點(diǎn)的事情有很多,前后端都可能有,通常都是業(yè)務(wù)上的行為,但是如何存儲(chǔ)與分析埋點(diǎn)后的數(shù)據(jù),是監(jiān)測(cè)系統(tǒng)的一個(gè)重要問(wèn)題。通過(guò)以上實(shí)時(shí)采集的數(shù)據(jù),主要目標(biāo)是獲得如下信息

宿主機(jī)的健康狀態(tài)

軟件是否處于正常運(yùn)行狀態(tài),系統(tǒng)穩(wěn)定性如何

軟件負(fù)載情況,是否能夠滿足線上性能要求,是否需要增加實(shí)例,性能的瓶頸在哪里,如何提高性能

用戶(hù)行為分析、用戶(hù)畫(huà)像

運(yùn)維監(jiān)測(cè)系統(tǒng)的組成

一個(gè)典型的監(jiān)測(cè)系統(tǒng),通常分為數(shù)據(jù)采集、數(shù)據(jù)傳輸、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)統(tǒng)計(jì)分析、數(shù)據(jù)可視化五個(gè)模塊,分析結(jié)果最終會(huì)反饋到產(chǎn)品經(jīng)理或者軟件研發(fā)人員,以確保線上軟件穩(wěn)定運(yùn)行,并進(jìn)一步提供改進(jìn)軟件的關(guān)鍵信息。

1.數(shù)據(jù)采集模塊

數(shù)據(jù)采集是監(jiān)測(cè)系統(tǒng)的第一步,采集信息是否豐富、是否足夠準(zhǔn)確、是否存夠?qū)崟r(shí),直接影響到了監(jiān)測(cè)系統(tǒng)的應(yīng)用效果。

如果是對(duì)主機(jī)狀態(tài)、軟件基本運(yùn)行情況進(jìn)行數(shù)據(jù)采集,最簡(jiǎn)單易用的是Telegraf,它是一個(gè)插件驅(qū)動(dòng)的服務(wù)器代理程序,可直接從其運(yùn)行的容器和系統(tǒng)中提取各種指標(biāo),事件和日志,從第三方API提取指標(biāo)。Telegraf還具有輸出插件,可將指標(biāo)發(fā)送到各種其他數(shù)據(jù)存儲(chǔ),服務(wù)和消息隊(duì)列,包括InfluxDB、OpenTSDB、TDengine、NSQ等等。

如果是對(duì)軟件系統(tǒng)產(chǎn)生的日志數(shù)據(jù)做數(shù)據(jù)采集,則需要該軟件系統(tǒng)的開(kāi)發(fā)人員來(lái)完成。日志數(shù)據(jù)可分為結(jié)構(gòu)化日志和非結(jié)構(gòu)化日志兩類(lèi),對(duì)業(yè)務(wù)分析有益的數(shù)據(jù),通常是結(jié)構(gòu)化的,只是采用非結(jié)構(gòu)化的文本進(jìn)行了表示而已。很多軟件開(kāi)發(fā)人員因?yàn)橥祽?,但更多的是沒(méi)有這方面的意識(shí),隨意的編寫(xiě)記錄日志的程序。這些日志因而格式變化較大,壓縮比很差,等于將數(shù)據(jù)存儲(chǔ)成本和數(shù)據(jù)分析的工作量完全推給了下游的數(shù)據(jù)分析人員,而分析人員受限于采用的開(kāi)發(fā)工具,基本上無(wú)法準(zhǔn)確、實(shí)時(shí)的給出分析結(jié)果。恰巧,軟件系統(tǒng)中最容易更改且影響面最小的就是日志模塊,所以,把日志模塊抽象、改進(jìn)、使得日志結(jié)構(gòu)化,這是比較重要且簡(jiǎn)單的工作。

2.數(shù)據(jù)傳輸模塊

網(wǎng)絡(luò)環(huán)境不會(huì)是監(jiān)控系統(tǒng)要考慮的主要問(wèn)題,但是考慮到監(jiān)控?cái)?shù)據(jù)的大小和實(shí)時(shí)性要求,可以將日志區(qū)分慢日志和快日志。

對(duì)快日志,比較流行的傳輸方式采用RESTFul接口,不同點(diǎn)在于選擇Pull還是Push。如果是與業(yè)務(wù)關(guān)聯(lián)比較多的,建議采用Push方式,保證實(shí)時(shí)性的同時(shí),也不需要緩存數(shù)據(jù)。Pull方式則比較簡(jiǎn)單,一般只需要被監(jiān)控的軟件系統(tǒng)提供Http接口即可,適用于拉取一些簡(jiǎn)單數(shù)值,例如系統(tǒng)狀態(tài)、訪問(wèn)數(shù)量、訪問(wèn)時(shí)間等??烊罩疽话阈枰鎯?chǔ)到實(shí)時(shí)分析系統(tǒng),以生成實(shí)時(shí)報(bào)表為主要目標(biāo)。TDengine提供的RESTFul接口,可以快速處理Push過(guò)來(lái)的Http請(qǐng)求,實(shí)時(shí)處理快日志。

慢日志通常記到日志文件,然后再單獨(dú)做一個(gè)通用的日志收集程序,將日志寫(xiě)入到Kafka中,再分流出去。之后,由日志機(jī)消費(fèi)這些數(shù)據(jù),進(jìn)入到數(shù)據(jù)存儲(chǔ)模塊中。

3.數(shù)據(jù)存儲(chǔ)模塊

數(shù)據(jù)存儲(chǔ)選型在監(jiān)測(cè)系統(tǒng)中至關(guān)重要,可供選擇的大數(shù)據(jù)引擎很多。針對(duì)時(shí)序數(shù)據(jù)做了優(yōu)化的,例如Prometheus、InfluxDB、TDengine、ClickHouse、OpenTSDB、Graphite等時(shí)序數(shù)據(jù)庫(kù);通用分析型的,例如Hadoop體系及其上的流式計(jì)算引擎。具體怎么選?還是要從記錄的數(shù)據(jù)類(lèi)型來(lái)看,關(guān)注的指標(biāo)可以從寫(xiě)入速度、采集頻率、數(shù)據(jù)壓縮比、查詢(xún)分析速度方面著手。

如果和時(shí)間關(guān)聯(lián)不大,采用Hadoop處理這類(lèi)問(wèn)題較好。如果確實(shí)是時(shí)序數(shù)據(jù)的,則采用時(shí)序數(shù)據(jù)庫(kù)比較好。在時(shí)序數(shù)據(jù)庫(kù)上,如果為非結(jié)構(gòu)化數(shù)據(jù)的,可以采用InfluxDB、OpenTSDB、Cassendra、MongoDB,如果為結(jié)構(gòu)化數(shù)據(jù)的,可以采用Prometheus、ClickHouse、TDengine。后面這三種,Prometheus受限于設(shè)計(jì),需要在水平擴(kuò)展的問(wèn)題上妥善考慮;ClickHouse偏重于分析,實(shí)時(shí)數(shù)據(jù)的處理能力稍差;TDengine推出時(shí)間較短,但在寫(xiě)入速度、查詢(xún)速度、壓縮比等方面都有突出的性能表現(xiàn)。

4.數(shù)據(jù)統(tǒng)計(jì)分析模塊

統(tǒng)計(jì)分析的目標(biāo),不應(yīng)該被選擇的存儲(chǔ)引擎限制了想象力。但是通常來(lái)說(shuō),監(jiān)控?cái)?shù)據(jù)的統(tǒng)計(jì)分析也都是與時(shí)間序列有關(guān)的一系列分析,可以分為兩類(lèi)

實(shí)時(shí)分析:最新值、實(shí)時(shí)曲線、流式計(jì)算、滑動(dòng)窗口、歷史截面等

非實(shí)時(shí)分析:年報(bào)、月報(bào)、日?qǐng)?bào)、分組、聚合等

這些指標(biāo)的查詢(xún)性能,是選擇數(shù)據(jù)存儲(chǔ)引擎的關(guān)鍵因素。TDengine查詢(xún)性能非常好,能夠?qū)⒔^大多數(shù)傳統(tǒng)思維下的非實(shí)時(shí)分析,轉(zhuǎn)變?yōu)閷?shí)時(shí)分析,充分利用這個(gè)特點(diǎn),可以為用戶(hù)提供新功能,進(jìn)一步拓展新業(yè)務(wù)。

5.數(shù)據(jù)可視化模塊

數(shù)據(jù)可視化方面,除了Grafana之外,并沒(méi)有太多可供選擇的開(kāi)源可視化軟件。如果部門(mén)內(nèi)部使用,是足夠的;如果是對(duì)外的項(xiàng)目,或者需要跨部門(mén)提供數(shù)據(jù),就需要自己編寫(xiě)更加易用、查詢(xún)條件更豐富的界面,展示實(shí)時(shí)或者定時(shí)任務(wù)的計(jì)算結(jié)果,以期得到更好的反饋。

基于TDengine的運(yùn)維監(jiān)測(cè)系統(tǒng)的快速搭建

參照TDengine的白皮書(shū),它創(chuàng)新性的定義了時(shí)序數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu),而且具備安裝使用方便、壓縮比高、查詢(xún)性能好等特點(diǎn),特別適用于處理實(shí)時(shí)監(jiān)測(cè)類(lèi)數(shù)據(jù)。與具體業(yè)務(wù)上有關(guān)的監(jiān)測(cè)邏輯,不容易舉例說(shuō)明。但由于TDengine能夠與開(kāi)源數(shù)據(jù)采集系統(tǒng)Telegraf和開(kāi)源數(shù)據(jù)可視化系統(tǒng)Grafana快速集成,所以本節(jié)參照以上各系統(tǒng)的用戶(hù)手冊(cè),快速搭建運(yùn)維數(shù)據(jù)監(jiān)測(cè)系統(tǒng),整個(gè)過(guò)程無(wú)需任何代碼開(kāi)發(fā)。

1.架構(gòu)圖

2.TDengine的安裝與配置

下載TDengine-server-2.0.12.0-Linux-x64.tar.gz (4.5M),地址https://www.taosdata.com/cn/getting-started/#%E9%80%9A%E8%BF%87%E5%AE%89%E8%A3%85%E5%8C%85%E5%AE%89%E8%A3%85

安裝TDengine,解壓后運(yùn)行install.sh進(jìn)行安裝

啟動(dòng)TDengine,運(yùn)行sudo systemctl start taosd

測(cè)試是否安裝成功,運(yùn)行TDengine的shell命令行程序taos,可以看到如下類(lèi)似信息

Welcome to the TDengine shell, server version:1.6.0 client version:1.6.0

Copyright (c) 2017 by TAOS Data, Inc. All rights reserved.

taos>

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

如果是centos7 使用yum install?Telegraf 安裝更簡(jiǎn)單

配置telegraf,修改Telegraf配置文件/etc/telegraf/telegraf.conf中與TDengine有關(guān)的配置項(xiàng)

在output plugins部分,修改[[outputs.http]]配置項(xiàng)

url:http://ip:6020/telegraf/udb,其中ip為T(mén)Dengine集群的中任意一臺(tái)服務(wù)器的IP地址,6020為T(mén)Dengine RESTful接口的端口號(hào),telegraf為固定關(guān)鍵字,udb為用于存儲(chǔ)采集數(shù)據(jù)的數(shù)據(jù)庫(kù)名稱(chēng),可預(yù)先創(chuàng)建

method: "POST"

username: 登錄TDengine的用戶(hù)名

password: 登錄TDengine的密碼

data_format: "json"

json_timestamp_units: "1ms"

例如:

[[outputs.http]]

? url = "http://127.0.0.1:6041/telegraf/udb"

? method = "POST"

? username = "root"

? password = "taosdata"

? data_format = "json"

? json_timestamp_units = "1ms"

在agent部分,修改如下配置項(xiàng):

hostname: 區(qū)分不同采集設(shè)備的機(jī)器名稱(chēng),需確保其唯一性

metric_batch_size: 30,允許Telegraf每批次寫(xiě)入記錄最大數(shù)量,增大其數(shù)量可以降低Telegraf的請(qǐng)求發(fā)送頻率,但對(duì)于TDegine,該數(shù)值不能超過(guò)50

[agent]

? hostname = "gsl"

? metric_batch_size = 30

? interval = "10s"

? debug = true

? omit_hostname = false


啟動(dòng)telegraf,sudo systemctl start telegraf

測(cè)試是否接收到Telegraf的數(shù)據(jù)

在shell中輸入show databases語(yǔ)句,應(yīng)該看到名為udb的數(shù)據(jù)庫(kù)

運(yùn)行use udb語(yǔ)句

運(yùn)行show stables語(yǔ)句,可以看到cpu等超級(jí)表

運(yùn)行show stables語(yǔ)句,可以看到cpu_gsl_cpu0等普通數(shù)據(jù)表


3.Grafana的安裝與配置 主要為centos系統(tǒng),其他的參照官方安裝文檔

wget?https://dl.grafana.com/oss/release/grafana-7.3.6-1.x86_64.rpm

sudo yum install?grafana-7.3.6-1.x86_64.rpm

配置Grafana,TDengine 的 Grafana 插件 /usr/local/taos/connector/grafanaplugin 目錄下,將之拷貝到/var/lib/grafana/plugins 目錄

scp -r /usr/local/taos/connector/grafanaplugin/* /var/lib/grafana/plugins/

啟動(dòng)Grafana,

配置文件位置:/etc/grafana/grafana.ini

修改端口4000,默認(rèn)為3000。

systemctl enable grafana-server #開(kāi)機(jī)自動(dòng)啟動(dòng)

systemctl start grafana-server #啟動(dòng)grafana服務(wù)

用戶(hù)可以直接通過(guò)localhost:3000的網(wǎng)址,登錄Grafana服務(wù)器(用戶(hù)名/密碼:admin/admin),配置TDengine數(shù)據(jù)源,此時(shí)可以在數(shù)據(jù)源列表中看到TDengine數(shù)據(jù)源類(lèi)型


在Host文本框中輸入http://localhost:6041并保存

然后,就可以在Grafana的數(shù)據(jù)源列表中看到剛創(chuàng)建好的TDengine的數(shù)據(jù)源

創(chuàng)建Dashboard的時(shí)候使用TDengine數(shù)據(jù)源

點(diǎn)擊Add Query按鈕增加三個(gè)新查詢(xún),在INPUT SQL輸入框中輸入查詢(xún)SQL語(yǔ)句,該SQL語(yǔ)句的結(jié)果集應(yīng)為兩行多列的曲線數(shù)據(jù),例如

select avg(f_usage_idle) from udb.cpu WHERE ts>=$from and ts<$to interval($interval)

其中,$from、$to和$interval為T(mén)Dengine插件的內(nèi)置變量,表示從Grafana插件面板獲取的查詢(xún)范圍和時(shí)間間隔

點(diǎn)擊GENERATE SQL按鈕可以看到Grafana發(fā)給TDengine的SQL語(yǔ)句。

select 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)



總結(jié)

監(jiān)測(cè)系統(tǒng)可以采用的技術(shù)方案有很多,如果僅僅是做一個(gè)玩具,選擇面是很大的。但若監(jiān)測(cè)的數(shù)據(jù)量很大,對(duì)于寫(xiě)入尤其是分析性能要求很高的場(chǎng)景,不妨試試TDengine。

本文只是簡(jiǎn)單對(duì)TDengine使用做了初步探討,要想真正了解它超強(qiáng)的讀寫(xiě)能力,還需要進(jìn)一步構(gòu)造大規(guī)模的測(cè)試數(shù)據(jù)集。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 漸變的面目拼圖要我怎么拼? 我是疲乏了還是投降了? 不是不允許自己墜落, 我沒(méi)有滴水不進(jìn)的保護(hù)膜。 就是害怕變得面...
    悶熱當(dāng)乘涼閱讀 4,480評(píng)論 0 13
  • 夜鶯2517閱讀 128,155評(píng)論 1 9
  • 版本:ios 1.2.1 亮點(diǎn): 1.app角標(biāo)可以實(shí)時(shí)更新天氣溫度或選擇空氣質(zhì)量,建議處女座就不要選了,不然老想...
    我就是沉沉閱讀 7,450評(píng)論 1 6
  • 我是一名過(guò)去式的高三狗,很可悲,在這三年里我沒(méi)有戀愛(ài),看著同齡的小伙伴們一對(duì)兒一對(duì)兒的,我的心不好受。怎么說(shuō)呢,高...
    小娘紙閱讀 3,810評(píng)論 4 7
  • 那一年,我選擇了獨(dú)立遠(yuǎn)行,火車(chē)帶著我在前進(jìn)的軌道上爬行了超過(guò)23個(gè)小時(shí); 那一年,我走過(guò)泥濘的柏油路,在那個(gè)遠(yuǎn)離故...
    木芽閱讀 1,934評(píng)論 4 5

友情鏈接更多精彩內(nèi)容