概述
性能監控是容器服務必不可少的基礎設施,容器化應用運作于主控端上,我們需要知道該容器的運作情況,包括 CPU使用率、記憶體占用、網絡狀況以及磁盤空間等等一系列資訊。在我的前文
《Docker容器可視化監控中心搭建》之中我們就實踐過Docker容器的可視化監控,在那篇文章中我們是使用了 cAdvisor + influxdb + grafana 技術棧來完成的。然而容器化世界裡向來不會隻有一種方法來實作某項功能,可以說有一百條大路來通到羅馬,是以本文再來探讨另一種稱為 TICK 的技術棧方案來實作Docker容器的性能監控。
基于TICK技術棧實作的Docker容器可視化監控方案架構圖如下所示:
- Telegraf:采用插件機制實作的資料采集服務,可以采集包含Docker容器在内的多種性能資料
- InfluxDB:專門負責存儲時序資料
- Chronograf:基于React.js編寫的性能資料可視化服務
- Kapacitor:提供告警觸發和處理功能
這四個元件組成了性能監控的資料管道:Telegraf負責采集節點上的性能資料,然後放入InfluxDB資料庫進行存儲,Kapacitor通過監聽InfluxDB的性能資料來對異常名額發出告警,而Chronograf用來展示叢集實時的各項性能名額和狀态,提供一個可視化的界面。
下面開始實踐的過程!
部署InfluxDB服務
首先準備好 InfluxDB 配置檔案:
influxdb.conf
mkdir /etc/influxdb
cd /etc/influxdb
touch influxdb.conf
[meta]
dir = "/var/lib/influxdb/meta"
[data]
dir = "/var/lib/influxdb/data"
wal-dir = "/var/lib/influxdb/wal"
然後利用Docker來啟動InfluxDB服務:
docker run -d \
--name influxdb \
-p 8086:8086 \
-v /etc/influxdb/influxdb.conf:/etc/influxdb/influxdb.conf \
-v /var/lib/influxdb:/var/lib/influxdb \
docker.io/influxdb
部署Telegraf服務
Telegraf服務需要部署在需要采集資料的節點上。我們首先來準備Telegraf服務的配置檔案
telegraf.conf
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
debug = false
quiet = false
hostname = "www.codesheep.cn"
omit_hostname = false
[[outputs.influxdb]]
urls = ["http://192.168.31.177:8086"]
database = "telegraf"
username = ""
password = ""
write_consistency = "any"
timeout = "5s"
[[inputs.docker]]
endpoint = "unix:///var/run/docker.sock"
container_names = []
timeout = "5s"
perdevice = true
total = false
[[inputs.cpu]]
[[inputs.system]]
該配置檔案比較簡化,inputs插件是負責資料采集,可以看出來上面的配置說明了我們想采集節點的CPU、System以及Docker容器的各項性能資料;而outputs插件指明了我們将采集到的性能資料放入InfluxDB資料庫進行存儲。
然後同樣利用Docker來啟動Telegraf服務
docker run -d \
--name telegraf \
--network host \
-v /etc/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf \
docker.io/telegraf
Chronograf部署
docker run -d \
--name chronograf \
-p 8888:8888 \
-v /var/lib/chronograf:/var/lib/chronograf \
docker.io/chronograf \
--influxdb-url=http://192.168.31.177:8086
注意從上面的指令我們可以看出,Chronograf服務是需要連接配接到InfluxDB服務中去的,服務啟動以後利用浏覽器通路8888端口可以打開Chronograf的可視化監控界面
Kapacitor部署
docker run -d \
--name kapacitor \
-p 9092:9092 \
-v /var/lib/kapacitor:/var/lib/kapacitor \
docker.io/kapacitor
好了,至此 TICK 元件已經部署完成,我們可以檢視一下主控端上的容器情況,發現服務都已經啟動起來了:
實際試驗
浏覽器打開:
localhost:8888
來通路 Chronograf 提供的可視化界面,後續所有的操作都基于該界面。
- 點選 Chronograf 主界面左側菜單的 Host List,可以看到被監控的節點資訊:
然後我們點選節點名進入後,就可以檢視從該節點上采集到的各項主要名額資料的圖表:
除此之外,我們還可以點選節點上的 Apps 具體監控小類,如
docker
類别,這樣可以得到僅僅與docker相關的性能資料展示:
- 然後我們點選 Chronograf 主界面左側菜單的 Data Explorer,可以看到從InfluxDB那裡獲得的資料表,以及存儲于InfluxDB資料表中的各項具體名額
- 最後我們來看一下如何利用Kapacitor來實作告警功能。
點選 Chronograf 主界面左側菜單的 Alert,可以自定義建立告警規則:
這裡給出一個規則配置示例:我們可以監控某個具體性能名額的變化,如配置一個告警規則等:
後記
作者更多的SpringBt實踐文章在此:
- SpringBoot應用部署于外置Tomcat容器
- ElasticSearch搜尋引擎在SpringBt中的實踐
- 初探Kotlin+SpringBoot聯合程式設計
- Spring Boot日志架構實踐
- SpringBoot優雅編碼之:Lombok加持
如果有興趣,也可以抽點時間看看作者一些關于容器化、微服務化方面的文章: