1. 介紹
1.1. TIGK
在云環(huán)境中的工作的運營者特別依賴監(jiān)堆棧所提供的資源的持續(xù)可見性和告警,使其成為云的基礎(chǔ)組件。希望利用OpenStack等開源云環(huán)境的企業(yè)數(shù)量在不斷增加,這帶來了對開源監(jiān)控解決方案的需求。
隨著容器時代的到來,業(yè)務(wù)軟件架構(gòu)正在向微服務(wù)架構(gòu)發(fā)展和調(diào)整。微服務(wù)架構(gòu)下的軟件不斷提供更多的API接口來實現(xiàn)方便靈活的調(diào)度。在這種背景下,目前一些系統(tǒng)監(jiān)控軟件(比如Zabbix,nagios)就略顯笨重,使用靈活度上有所不足。
Telegraf Influx Grafana Kapacitor(TIGK)是在公有云(AWS,Aliyun,Azure,google云)或者私有云(OpenStack)云中使用的解決方案之一,可以Ansible部署。TIGK從系統(tǒng)CPU、RAM和I / O(網(wǎng)絡(luò)和磁盤)捕獲、存儲、顯示和觸發(fā)警報提示。
1.2. 名詞解釋
influxdata:開發(fā)T,I,K產(chǎn)品的公司,最知名的當(dāng)然還是influxdb
T:Telegraf,安裝在服務(wù)器上的agent,負(fù)責(zé)收集數(shù)據(jù)
I:InfluxDB,時序數(shù)據(jù)庫,負(fù)責(zé)高頻次的寫入和查詢
G:Grafana,數(shù)據(jù)展示平臺,支持多種數(shù)據(jù)源
K:Kapacitor,告警服務(wù)
2. 架構(gòu)圖
2.1. 整體架構(gòu)

2.2. Telegraf
Telegraf是一個插件驅(qū)動的服務(wù)器代理,用于收集和報告度量指標(biāo),使用起來跟Collectd、Statsd、Logstash等軟件很像。通過plugin來實現(xiàn)數(shù)據(jù)的input和output。Telegraf通過插件可以直接從它正在運行的系統(tǒng)中獲取各種指標(biāo),從第三方API獲取指標(biāo),甚至通過Statsd和Kafka的消費者服務(wù)來接收度量指標(biāo)。它還提供了輸出插件,將指標(biāo)發(fā)送到各種各樣的數(shù)據(jù)存儲、服務(wù)和消息隊列,包括InfluxDB,Graphite,OpenTSDB,Datadog,Librato,Kafka,MQTT,NSQ和很多其他組件。Telegraf目前支持80多種輸入插件,但目前還沒有直接獲取虛擬機度量指標(biāo)的插件,有個cloudwatch插件可以從Amazon CloudWatch獲取度量指標(biāo)。
Telegraf的特性:
Go語言編寫,編譯為一個二進(jìn)制文件,沒有外部依賴。
占用內(nèi)存小,通過插件開發(fā)人員可輕松添加input和output來支持其他服務(wù)的擴展
支持眾多流行服務(wù)大量插件,滿足主流監(jiān)控需求。
參考:官方文檔
2.3. InfluxDB
InfluxDB是一個時間序列數(shù)據(jù)庫,從創(chuàng)建之初就考慮到處理高的寫和查詢負(fù)載。InfluxDB是一個定制的高性能數(shù)據(jù)庫特別用來存儲時間戳數(shù)據(jù),包括DevOps監(jiān)控、應(yīng)用指標(biāo)、物聯(lián)網(wǎng)傳感器數(shù)據(jù),實時分析。為了節(jié)省機器上的存儲空間,可以配置InfluxDB保持?jǐn)?shù)據(jù)的時間長度,自動到期和從系統(tǒng)中刪除任何不需要的數(shù)據(jù)。InfluxDB還提供與數(shù)據(jù)交互的SQL的查詢語言。
InfluxDB的特性:
為時間序列數(shù)據(jù)專門定制的高性能數(shù)據(jù)存儲。TSM引擎允許高速接收和數(shù)據(jù)壓縮。完全go語言編寫。編譯成一個單一的二進(jìn)制,沒有外部依賴。
簡單,高效寫入和查詢HTTP(S) APIs。插件支持其他數(shù)據(jù)獲取協(xié)議如Graphite、collectd和OpenTSDB。定制的類SQL的查詢語言方便查詢匯總的數(shù)據(jù)。 通過標(biāo)簽為快速查詢和有效查詢進(jìn)行索引,保留政策有效地使失效數(shù)據(jù)自動過期。連續(xù)查詢自動計算聚合數(shù)據(jù),使頻繁查詢效率更高效。
內(nèi)置的web管理界面。雖然開源版本不支持集群服務(wù),但可以通過HAProxy + Influx Relays實現(xiàn)InfluxDB的高可用,這種架構(gòu)已經(jīng)被實現(xiàn)到OpenStack-Ansible Playbook中。此高可用性開源監(jiān)視堆棧的配置可以在這里找到。
參考:官方文檔
2.4. Chronograf/Grafana
Chronograf是管理員用戶界面和平臺可視化引擎。它使你的基礎(chǔ)設(shè)施的監(jiān)視和告警變得易于設(shè)置和維護(hù)。它使用起來很簡單,包括模板和庫,可以讓您快速構(gòu)建儀表板,實現(xiàn)數(shù)據(jù)的實時可視化,并且可以輕松創(chuàng)建告警和自動化規(guī)則。
在TICK套件中,Chronograf可以被開源軟件Grafana所替代,它們的功能類似,但后者更成熟些。Grafana支持Elasticsearch、InfluxDB等多種數(shù)據(jù)源,目前部署時常用Grafana替代Chronograf,此時運維棧變?yōu)門IGK。
Grafana是一個功能齊全的度量儀表盤軟件,支持從多種數(shù)據(jù)源讀取數(shù)據(jù)用圖表顯示,界面美觀,有沖擊力,功能設(shè)計方便實用。多用于可視化基礎(chǔ)實施和應(yīng)用分析的時間序列數(shù)據(jù),也可應(yīng)用在其它領(lǐng)域,包括工業(yè)傳感器、家庭自動化、天氣和過程控制。
Grafana的特點:
功能強大,展示監(jiān)控數(shù)據(jù)就是小菜一碟,支持8種內(nèi)置圖表類型,可為不同類型的數(shù)據(jù)選擇不同類型的圖表進(jìn)行展示;
豐富的數(shù)據(jù)源接口,Elasticsearch、InfluxDB等各種數(shù)據(jù),可通過插件擴展
豐富的API接口,方便自動化程序調(diào)用;
監(jiān)控dashboard 導(dǎo)入、導(dǎo)出,這個功能比較實用,做好一個比較滿意的展示面板,導(dǎo)出后主要修改一下里面的IP等信息,通過導(dǎo)入,其它主機的展示全部搞定。
支持告警,但功能相對較簡單,目前只有g(shù)raph圖表支持告警,也只有Graphite,Prometheus,InfluxDB和OpenTSDB四種數(shù)據(jù)源支持告警。
參考:官方網(wǎng)站
2.5. Kapacitor
Kapacitor是時序數(shù)據(jù)分析、處理引擎。它可以處理來自InfluxDB的流數(shù)據(jù)和批量數(shù)據(jù)。Kapacitor允許插入用戶自定義的邏輯或用戶自定義的函數(shù)來處理基于動態(tài)門限的告警,匹配模式指標(biāo),計算統(tǒng)計異常,并根據(jù)這些告警執(zhí)行特定動作,比如動態(tài)負(fù)載均衡。Kapacitor支持Email,HTTP,TCP,HipChat,OpsGenie,Alerta,Sensu,PagerDuty,Slack等多種方式告警。
Kapacitor的特性:
可以處理流數(shù)據(jù)和批量數(shù)據(jù);
按計劃從InfluxDB查詢數(shù)據(jù),或通過line協(xié)議從InfluxDB接收數(shù)據(jù);
使用InfluxQL對數(shù)據(jù)做各種轉(zhuǎn)換;
將轉(zhuǎn)換后的數(shù)據(jù)存回InfluxDB;
添加用戶自定義函數(shù)檢測異常;
與HipChat, OpsGenie, Alerta, Sensu, PagerDuty, Slack等集成。
參考:官方文檔
3. 資源清單
3.1. 測試環(huán)境
| 組件 | 版本 | 主機 | CPU | 內(nèi)存 | 磁盤 | |
|---|---|---|---|---|---|---|
| InfluxDB | 1.7.9 | 10.10.10.1 | RHEL7 | |||
| Telegraf | 1.13.3 | 10.10.10.1 | RHEL7 | |||
| Grafana | 6.6.1 | 10.10.10.1 | RHEL7 | |||
| Kapacitor | 1.5.4 | 10.10.10.1 | RHEL7 |
3.2. 生產(chǎn)環(huán)境
4. 安裝與配置
在工作中,為了方便管理,建議大家使用RPM/DNF/DEB的方式安裝
4.1. 安裝與配置InfluxDB
-
下載與安裝:
$ yum install -y https://dl.influxdata.com/influxdb/releases/influxdb-1.7.9.x86_64.rpm
-
配置文件:
/etc/influxdb/influxdb.conf,請修改以下幾個地方,其他的默認(rèn)配置就好,如果修改到其他的位置,一定注意修改權(quán)限,因為systemctl默認(rèn)的啟動用戶是influxdb。[meta] # 數(shù)據(jù)庫的元數(shù)據(jù),相當(dāng)于配置文件 dir = "/var/lib/influxdb/meta" . . [data] # 數(shù)據(jù)存儲的位置,建議放到獨立的高性能磁盤上 dir = "/var/lib/influxdb/data" # 類似于mysql的binlog,會被頻繁的讀寫,建議放到獨立的高性能磁盤上 wal-dir = "/var/lib/influxdb/wal"注意:如果出現(xiàn)不能啟動的情況,請查看/var/log/messages,或者使用
journalctl -u influxdb。 -
啟動服務(wù)并且開機自動運行
$ systemctl start influxdb && systemctl enable influxdb -
測試:
~]# influx Connected to http://localhost:8086 version 1.7.9 InfluxDB shell version: 1.7.9 > show databases; name: databases name ---- _internal
4.2. 安裝與配置Telegraf
-
下載與安裝:
$ yum install -y https://dl.influxdata.com/telegraf/releases/telegraf-1.13.3-1.x86_64.rpm 配置文件位置:
/etc/telegraf/telegraf.conf,里面的配置文件默認(rèn)收集cpu,disk的信息,并寫入influxdb,如果有其他的需求,請各位自行修改。-
啟動服務(wù)并且開機自動運行
$ systemctl start telegraf && systemctl enable telegraf -
測試
~]# influx Connected to http://localhost:8086 version 1.7.9 InfluxDB shell version: 1.7.9 > show databases; name: databases name ---- _internal telegraf > use telegraf Using database telegraf > show measurements name: measurements name ---- cpu disk diskio kernel mem processes swap system > select * from cpu; name: cpu time cpu host usage_guest usage_guest_nice usage_idle usage_iowait usage_irq usage_nice usage_softirq usage_steal usage_system usage_user ---- --- ---- ----------- ---------------- ---------- ------------ --------- ---------- ------------- ----------- ------------ ---------- 1581663700000000000 cpu-total ip-10-0-2-159.cn-northwest-1.compute.internal 0 0 67.41741741741244 0.15015015015012734 0 0 0 0 0.3003003003002458 32.13213213212678 1581663700000000000 cpu0 ip-10-0-2-159.cn-northwest-1.compute.internal 0 0 62.662662662666214 0.2002002002002003 0 0 0.10010010010010238 0 0.4004004004004184 36.63663663663769
4.3. 安裝與配置Grafana
-
下載與安裝:
$ yum install -y https://dl.grafana.com/oss/release/grafana-6.6.1-1.x86_64.rpm 配置文件位置:
/etc/grafana/grafana.ini-
啟動服務(wù)并且開機自動運行
$ systemctl start grafana-server && systemctl enable grafana-server 登錄Web控制臺:
http://你的IP:3000,默認(rèn)的用戶名/密碼是admin/admin,第一次登錄需要修改密碼,然后進(jìn)入向?qū)?code>add data source,選擇InfluxDB,URLhttp://localhost:8086,Databasetelegraf,點擊Save & Test,出現(xiàn)Data source is working表示成功,點擊back回到數(shù)據(jù)源的配置點擊左側(cè)菜單欄的
+符號Create,點擊Import,Grafana.com Dashboard的位置輸入1138,在隨便點擊一下空白處,下面的Influx選擇咱們剛才配置的Influxdb,點擊Import來看看效果吧


-
我們發(fā)現(xiàn)網(wǎng)絡(luò)的部分是沒有數(shù)據(jù)的,因為我們沒有加載網(wǎng)絡(luò)監(jiān)控的配置。我們繼續(xù)編輯
/etc/telegraf/telegraf.conf文件,修改下面的配置并重啟服務(wù)。[[inputs.net]] ## By default, telegraf gathers stats from any up interface (excluding loopback) ## Setting interfaces will tell it to gather these explicit interfaces, ## regardless of status. ## interfaces = ["eth0"] ## ## On linux systems telegraf also collects protocol stats. ## Setting ignore_protocol_stats to true will skip reporting of protocol metrics. ## # ignore_protocol_stats = false ## 這個時候我們再看,發(fā)現(xiàn)網(wǎng)絡(luò)流量已經(jīng)可以監(jiān)控了

- 參考官方文檔
4.4. 安裝與配置Kapacitor
-
下載與安裝:
$ yum install https://dl.influxdata.com/kapacitor/releases/kapacitor-1.5.4-1.x86_64.rpm 配置文件位置:
/etc/, 如果沒有特殊的需求,不需要配置任何的參數(shù)-
啟動服務(wù)并且開機自動運行
$ service kapacitor start && chkconfig kapacitor on -
創(chuàng)建規(guī)則
cpu_alert.tickdbrp "telegraf"."autogen" stream // Select just the cpu measurement from our example database. |from() .measurement('cpu') |alert() .crit(lambda: int("usage_idle") < 70) // Whenever we get an alert write it to a file. .log('/tmp/alerts.log') 加載規(guī)則
kapacitor define cpu_alert -tick cpu_alert.tick-
查看規(guī)則
$ kapacitor list tasks ID Type Status Executing Databases and Retention Policies cpu_alert stream disabled false ["telegraf"."autogen"] $ kapacitor show cpu_alert ID: cpu_alert Error: Template: Type: stream Status: disabled Executing: false 啟用規(guī)則
kapacitor enable cpu_alert
5. 總結(jié)
InfluxData是以InfluxDB出名的,個人感覺InfluxDB在時序數(shù)據(jù)庫角度是超越Prometheus的,穩(wěn)定性非常強,且占用資源非常少,而且http寫入的方式也讓數(shù)據(jù)庫的兼容性非常好。
但是InfluxDB的社區(qū)版并不支持集群,這就讓他在生產(chǎn)系統(tǒng)上上線成為了最大的障礙,花錢總是讓那個老板肉疼的一件事。
Telegraf作為Agent和Influx的結(jié)合還是非常完美的,但是Telegraf的社區(qū)并不活躍,在這個開源軟件活躍的時代,光靠公司的力量想從頭維護(hù)一款軟件是非常困難的,最好提供統(tǒng)一的接口或者廣泛的兼容性,或者有個好靠山:)。
Chronograf本次沒有涉及,從軟件選擇的時候就舍棄了,因為他只可以和InfluxDB兼容,不像Grafana兼容性廣泛,在生產(chǎn)上使用的機會不多。
Kapacitor的用戶體現(xiàn)并不是很好,也許是沒有買商用版的原因,報警規(guī)則非常的繁瑣,報警的消息模板也非常不友好。感覺還不如Grafana自帶的規(guī)則好用。
Grafana目前真的挑不出毛病,硬要說的話,就是報警規(guī)則需要自己創(chuàng)建,讓一般用戶上手有點困難。
微信公眾號 云原生技術(shù)課堂
專題講座
2020 CKA考試視頻 真題講解 https://www.bilibili.com/video/BV167411K7hp
2020 CKA考試指南 https://www.bilibili.com/video/BV1sa4y1479B/
2020年 5月CKA考試真題 https://mp.weixin.qq.com/s/W9V4cpYeBhodol6AYtbxIA