TIGK监控平台介绍
1 概述
??眾所周知監(jiān)控平臺對大數(shù)據(jù)平臺是非常重要的,監(jiān)控是故障診斷和分析的重要輔助利器,在發(fā)生事故之前就能預警,最大限度降低系統(tǒng)故障率。
??監(jiān)控系統(tǒng)我們可以分為業(yè)務層面,應用層面,系統(tǒng)層面
1.1 業(yè)務層面
??業(yè)務系統(tǒng)是為了達成某種業(yè)務目標,因此監(jiān)控業(yè)務系統(tǒng)最有效的方式是從數(shù)據(jù)上監(jiān)控業(yè)務目標是否達成,因為業(yè)務系統(tǒng)的是多樣的所以應由各個業(yè)務系統(tǒng)實現(xiàn)監(jiān)控指標開發(fā)。
1.2 應用層面
??需要對應用的整體運行狀況進行了解、把控。一般通過抽象出的統(tǒng)一指標收集組件,收集應用級指標,如JVM堆內(nèi)存、GC、CPU使用率等。
1.3 系統(tǒng)層面
??實時監(jiān)控服務器工作狀態(tài),監(jiān)控性能、內(nèi)存消耗、容量和整體系統(tǒng)健康狀態(tài)等來保證服務器穩(wěn)定運行。
2 TIGK架構(gòu)
??大部分的監(jiān)控系統(tǒng)一般為4個模塊:數(shù)據(jù)采集、數(shù)據(jù)存儲、數(shù)據(jù)展示、告警 。TIGK平臺也是按照此規(guī)則,TIGK其實本身技術棧為TICK,即Telegraf,InfluxDB,Chronograf,Kapacitor,但是由于Chronograf沒有Grafana擴展性和易用性強,所以使用了Grafana作為替代方案形成TIGK。下圖為TIGK的整體架構(gòu)。
??監(jiān)控系統(tǒng)從收集到分析的流程如下
3 TIGK各組件
3.1 Telegraf
??Telegraf是一個插件驅(qū)動的服務器代理,用于收集和報告度量指標。通過plugin來實現(xiàn)數(shù)據(jù)的input和output,內(nèi)置了很多常用服務的插件。
??Telegraf通過插件可以直接從它正在運行的系統(tǒng)中獲取各種指標,從第三方API獲取指標,甚至通過Statsd和Kafka的消費者服務來接收度量指標。它提供的輸出插件,將指標發(fā)送到各種各樣的數(shù)據(jù)存儲、服務和消息隊列,包括InfluxDB,Graphite,Kafka,等他組件。
??上圖為官網(wǎng)所示的支持的插件統(tǒng)計,種類非常多,具體可到官網(wǎng)查看https://docs.influxdata.com/telegraf/v1.14/plugins/plugin-list/
Telegraf有四種類型的插件:
??①輸入插件(Inputs):收集各種時間序列性指標,包含各種系統(tǒng)信息和應用信息的插件。
??②處理插件(Process):對收集到的指標數(shù)據(jù)流進行簡單的處理,如給所有指標添加、刪除、修改一個Tag。只是針對當前的指標數(shù)據(jù)進行。
??③聚合插件(Aggregate):聚合插件有別于處理插件,就在于它要處理的對象是某段時間流經(jīng)該插件的所有數(shù)據(jù)(所以,每個聚合插件都有一個period設置,只會處理now()-period時間段內(nèi)的數(shù)據(jù)),比如取最大值、最小值、平均值等操作。
??④輸出插件(Outputs):收集到的數(shù)據(jù),經(jīng)過處理和聚合后,輸出到數(shù)據(jù)存儲系統(tǒng),可以是各種地方,如:文件、InfluxDB、各種消息隊列服務等等。
3.1.1 Telegraf特性
??(1)Go語言編寫,編譯為一個二進制文件,沒有外部依賴。
??(2)占用內(nèi)存小,通過插件開發(fā)人員可輕松添加input和output來支持其他服務的擴展
??(3)支持眾多流行服務大量插件,滿足主流監(jiān)控需求。
3.1.2 Telegraf相關概念
??Telegraf工作原理:定時去執(zhí)行輸入插件收集數(shù)據(jù),數(shù)據(jù)經(jīng)過處理插件和聚合插件,批量輸出到數(shù)據(jù)存儲。
數(shù)據(jù)指標(Metrics):
??①指標名(Measurement name):指標描述和命名。
??②標簽集合(Tags):Key/Value鍵值對,常用于快速索引和唯一標識。標簽在設計的時候,盡量避免各種數(shù)值型,盡量使用有限集合。
??③字段集合(Fields):Key/Value鍵值對,包含指標描述的數(shù)據(jù)類型和值。
??④時間戳(Timestamp):此條指標數(shù)據(jù)的時間戳。
3.2 Influxdb
??Influxdb是一個開源的分布式時序、時間和指標數(shù)據(jù)庫,使用go語言編寫,無需外部依賴。從創(chuàng)建之初就考慮到處理高的寫和查詢負載。InfluxDB是一個定制的高性能數(shù)據(jù)庫特別用來存儲時間戳數(shù)據(jù),包括DevOps監(jiān)控、應用指標、物聯(lián)網(wǎng)傳感器數(shù)據(jù),實時分析。為了節(jié)省機器上的存儲空間,可以配置InfluxDB保持數(shù)據(jù)的時間長度,自動到期和從系統(tǒng)中刪除任何不需要的數(shù)據(jù)。InfluxDB還提供與數(shù)據(jù)交互的SQL的查詢語言。
3.2.1 Influxdb特性
??(1)時序性(Time Series):與時間相關的函數(shù)的靈活使用(諸如最大、最小、求和等);
??(2)度量(Metrics):對實時大量數(shù)據(jù)進行計算;
??(3)事件(Event):支持任意的事件數(shù)據(jù),換句話說,任意事件的數(shù)據(jù)我們都可以做操作。
同時,它有以下幾大特點:
??schemaless(無結(jié)構(gòu)),可以是任意數(shù)量的列;
??min, max, sum, count, mean, median 一系列函數(shù),方便統(tǒng)計;
??Native HTTP API, 內(nèi)置http支持,使用http讀寫;
??Powerful Query Language 類似sql;
??Built-in Explorer 自帶管理工具。
3.2.2 數(shù)據(jù)格式
??(1)數(shù)據(jù)格式
??在 InfluxDB 中可以粗略的將要存入的一條數(shù)據(jù)看作一個虛擬的 key (包括 database, retention policy, measurement, tag sets, field name, timestamp)和其對應的 value(field value)。
??行協(xié)議指定了寫入數(shù)據(jù)的格式:
??①database: 數(shù)據(jù)庫名,在 InfluxDB 中可以創(chuàng)建多個數(shù)據(jù)庫,不同數(shù)據(jù)庫中的數(shù)據(jù)文件是隔離存放的,存放在磁盤上的不同目錄。
??②retention policy: 存儲策略,用于設置數(shù)據(jù)保留的時間,每個數(shù)據(jù)庫剛開始會自動創(chuàng)建一個默認的存儲策略 autogen,數(shù)據(jù)保留時間為永久。用戶可以自己設置,例如保留最近2小時的數(shù)據(jù)。插入和查詢數(shù)據(jù)時如果不指定存儲策略,則使用默認存儲策略,且默認存儲策略可以修改。InfluxDB 會定期清除過期的數(shù)據(jù)。
??③measurement: 測量指標名,也就是表名。
??④tag sets: tags 在 InfluxDB 中會按照字典序排序,不管是 tagk 還是 tagv,只要不一致就分別屬于兩個 key。
??⑤tag,標簽,在InfluxDB中,tag是一個非常重要的部分,表名+tag一起作為數(shù)據(jù)庫的索引,是“key-value”的形式。
??⑥field name: InfluxDB 中支持一條數(shù)據(jù)中插入多個 fieldName,這其實是一個語法上的優(yōu)化,在實際的底層存儲中,是當作多條數(shù)據(jù)來存儲。
??⑦timestamp: 每一條數(shù)據(jù)都需要指定一個時間戳,在 TSM 存儲引擎中會特殊對待,以為了優(yōu)化后續(xù)的查詢操作。
??(3)與關系型數(shù)據(jù)庫(MySQL)的基礎概念對比
| 數(shù)據(jù)庫 | database | database |
| 表 | table | measurement |
| 列 | column | t ag(帶索引的,非必須)、field(不帶索引)、timestemp(唯一主鍵) |
??(3)points
??points表示表里面的一行數(shù)據(jù),由時間戳time(每個數(shù)據(jù)記錄時間,是數(shù)據(jù)庫中的主索引(會自動生成))、數(shù)據(jù)field(各種記錄值(沒有索引的屬性))、標簽tags(各種有索引的屬性)。
??(4)Series
??Series 相當于是數(shù)據(jù)的集合,在同一個 database 中,retention policy、measurement、tag sets 完全相同的數(shù)據(jù)同屬于一個 series,同一個 series 的數(shù)據(jù)在物理上會按照時間順序排列存儲在一起。
??(5)Shard
?? Shard 它和 retention policy 相關聯(lián)。每一個存儲策略下會存在許多 shard,每一個 shard 存儲一個指定時間段內(nèi)的數(shù)據(jù),并且不重復,如 7點-8點 的數(shù)據(jù)落入 shard0 中,8點-9點的數(shù)據(jù)則落入 shard1 中。每一個 shard 都對應一個底層的 tsm 存儲引擎,有獨立的 cache、wal、tsm file。
??(6) 理解series 和 point
??假設對不同學校的歷年排名情況。首先整個數(shù)據(jù)是一個 measurement ,它包含了許多數(shù)據(jù);然后我們根據(jù)學校 名稱構(gòu)建 tag ,把 排名得分作為 field ,那么所有數(shù)據(jù)行就類似于:
??tag set 就是 tag key = tag value 的不同組合,這里的 tag set 有2種school=Peking和school=Tsinghua。
??2個 tag set 構(gòu)成了2個 series ,而每個 point 點就是 series 上具體某個 timestamp 對應的點。
3.2.3 TSM 存儲引擎
??TSM 存儲引擎主要由幾個部分組成: cache、wal、tsm file、compactor。
??①Cache:cache 相當于是 LSM Tree 中的 memtabl。插入數(shù)據(jù)時,實際上是同時往 cache 與 wal 中寫入數(shù)據(jù),可以認為 cache 是 wal 文件中的數(shù)據(jù)在內(nèi)存中的緩存。當 InfluxDB 啟動時,會遍歷所有的 wal 文件,重新構(gòu)造 cache,這樣即使系統(tǒng)出現(xiàn)故障,也不會導致數(shù)據(jù)的丟失。cache 中的數(shù)據(jù)并不是無限增長的,有一個 maxSize 參數(shù)用于控制當 cache 中的數(shù)據(jù)占用多少內(nèi)存后就會將數(shù)據(jù)寫入 tsm 文件。如果不配置的話,默認上限為 25MB,每當 cache 中的數(shù)據(jù)達到閥值后,會將當前的 cache 進行一次快照,之后清空當前 cache 中的內(nèi)容,再創(chuàng)建一個新的 wal 文件用于寫入,剩下的 wal 文件最后會被刪除,快照中的數(shù)據(jù)會經(jīng)過排序?qū)懭胍粋€新的 tsm 文件中。
??②WAL:wal 文件的內(nèi)容與內(nèi)存中的 cache 相同,其作用就是為了持久化數(shù)據(jù),當系統(tǒng)崩潰后可以通過 wal 文件恢復還沒有寫入到 tsm 文件中的數(shù)據(jù)。
??③TSM File:單個 tsm file 大小最大為 2GB,用于存放數(shù)據(jù)。
??④Compactor:compactor 組件在后臺持續(xù)運行,每隔 1 秒會檢查一次是否有需要壓縮合并的數(shù)據(jù)。主要進行兩種操作,一種是 cache 中的數(shù)據(jù)大小達到閥值后,進行快照,之后轉(zhuǎn)存到一個新的 tsm 文件中。另外一種就是合并當前的 tsm 文件,將多個小的 tsm 文件合并成一個,使每一個文件盡量達到單個文件的最大大小,減少文件的數(shù)量,并且一些數(shù)據(jù)的刪除操作也是在這個時候完成。
3.2.4 目錄與文件結(jié)構(gòu)
??InfluxDB 的數(shù)據(jù)存儲主要有三個目錄。默認情況下是 meta, wal 以及 data 三個目錄。
??(1)meta 用于存儲數(shù)據(jù)庫的一些元數(shù)據(jù),meta 目錄下有一個 meta.db 文件。
??(2)wal 目錄存放預寫日志文件,以 .wal 結(jié)尾
??(3)data 目錄存放實際存儲的數(shù)據(jù)文件,以 .tsm 結(jié)尾。
上面幾張圖中,_internal為數(shù)據(jù)庫名,monitor為存儲策略名稱,再下一層目錄中的以數(shù)字命名的目錄是 shard 的 ID 值。
存儲策略下有兩個 shard,ID 分別為 1 和 2,shard 存儲了某一個時間段范圍內(nèi)的數(shù)據(jù)。再下一級的目錄則為具體的文件,分別是 .wal 和 .tsm 結(jié)尾的文件。
3.2.5 InfluxDB操作方式:
??客戶端命令行方式
??HTTP API接口
??各語言API庫
??基于WEB管理頁面操作
3.3 Grafana
??Grafana是一個功能齊全的度量儀表盤軟件,支持從多種數(shù)據(jù)源讀取數(shù)據(jù)用圖表顯示,界面美觀,有沖擊力,功能設計方便實用。多用于可視化基礎實施和應用分析的時間序列數(shù)據(jù),也可應用在其它領域,包括工業(yè)傳感器、家庭自動化、天氣和過程控制。
3.3.1 Grafana特點
??(1)展示方式:快速靈活的客戶端圖表,面板插件有許多不同方式的可視化指標和日志,官方庫中具有豐富的儀表盤插件,比如熱圖、折線圖、圖表等多種展示方式。監(jiān)控dashboard 導入、導出,這個功能比較實用,做好一個比較滿意的展示面板,導出后主要修改一下里面的IP等信息,通過導入,其它主機的展示全部搞定。
??(2)豐富的數(shù)據(jù)源接口:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等都能接入;
??(3)通知提醒:以可視方式定義最重要指標的警報規(guī)則,Grafana將不斷計算并發(fā)送通知,在數(shù)據(jù)達到閾值時通過Slack、PagerDuty等獲得通知;
??(4)混合展示:在同一圖表中混合使用不同的數(shù)據(jù)源,可以基于每個查詢指定數(shù)據(jù)源,甚至自定義數(shù)據(jù)源;
??(5)注釋:使用來自不同數(shù)據(jù)源的豐富事件注釋圖表,將鼠標懸停在事件上會顯示完整的事件元數(shù)據(jù)和標記;
??(6)過濾器:Ad-hoc過濾器允許動態(tài)創(chuàng)建新的鍵/值過濾器,這些過濾器會自動應用于使用該數(shù)據(jù)源的所有查詢;
??(7)豐富的API接口,方便自動化程序調(diào)用。
3.4 Kapacitor
??Kapacitor是時序數(shù)據(jù)分析、處理引擎。它可以處理來自InfluxDB的流數(shù)據(jù)和批量數(shù)據(jù)。Kapacitor允許插入用戶自定義的邏輯或用戶自定義的函數(shù)來處理基于動態(tài)門限的告警,匹配模式指標,計算統(tǒng)計異常,并根據(jù)這些告警執(zhí)行特定動作,比如動態(tài)負載均衡。Kapacitor支持Email,HTTP,TCP,HipChat,OpsGenie,Alerta,Sensu,PagerDuty,Slack等多種方式告警。
3.4.1 特點
??(1)可以處理基于InfluxQL的批處理與將數(shù)據(jù)存儲在內(nèi)存中的流處理,并使用tick腳本來進行處理規(guī)則的定義;
??(2)按計劃從InfluxDB查詢數(shù)據(jù),或通過line協(xié)議從InfluxDB接收數(shù)據(jù);
??(3)使用InfluxQL對數(shù)據(jù)做各種轉(zhuǎn)換;將轉(zhuǎn)換后的數(shù)據(jù)存回InfluxDB,事件輸出源還可以是email,http post,tcp, log, telegram,kafka,alerta,MQTT等;
??(4)添加用戶自定義函數(shù)檢測異常;
與HipChat, OpsGenie, Alerta, Sensu, PagerDuty, Slack等集成。
3.4.2 相關名詞解釋
| task | 數(shù)據(jù)計算規(guī)則,由一系列節(jié)點node形成的數(shù)據(jù)處理的有向無環(huán)圖DAG |
| task template | 通過模版變量來定制task |
| topic | 預警檢測程序-如果沒有顯示在alert中用topic指定,會用程序的alert node來代替 |
| event | 觸發(fā)的報警事件 |
| handler | 報警事件輸出程序 |
| topic handler | 報警事件的輸出有兩種方式,一種是alert node的屬性方法直接調(diào)用,一種是通過alert指定topic與yaml描述文件來定義 |
| record | 數(shù)據(jù)錄制 |
| replay | 數(shù)據(jù)回放 |
| name | 度量名(相當于influxdb的measurement) |
| tags | 標簽(相當于influxdb的tag key tag field) |
| columns | 字段(相當于influxdb的 field key) |
| values | 字段值(相當于influxdb的field value) |
| string template | 字符串模版 |
| lambda | 函數(shù)表達式 |
3.4.3 數(shù)據(jù)處理模型
?? 它遵循基于工作流的編程模型。數(shù)據(jù)流從一個node到另一個node,每個node是一個黑盒的過程,它能以任意方式處理數(shù)據(jù)。nodes是以有向無環(huán)圖的方式分布的
?? Tasks是通過TICK腳本來定義的,有三種狀態(tài)disabled,enabled not executing,enabled executing
??傳輸數(shù)據(jù)的數(shù)據(jù)模型有兩種Stream和Batch。①Stream:數(shù)據(jù)點(由時間戳timestamp,一系列的屬性fileds和tags組成)作為單個實體傳遞。數(shù)據(jù)立即被transfer,并且每次只transfer一個數(shù)據(jù)點②Batch:數(shù)據(jù)點以數(shù)據(jù)組的形式傳遞,將多個數(shù)據(jù)點看作一個整體輸入
總結(jié)
以上是生活随笔為你收集整理的TIGK监控平台介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: k近邻算法(KNN)-分类算法
- 下一篇: Java script生成apk_lua