斌哥的 Docker 進(jìn)階指南—監(jiān)控方案的實(shí)現(xiàn)

過(guò)去的一年中,關(guān)于 Docker 的話題從未斷過(guò),而如今,從嘗試 Docker 到最終決定使用 Docker 的轉(zhuǎn)化率依然在逐步升高,關(guān)于 Docker 的討論更是有增無(wú)減。另一方面,大家的注意力也漸漸從 “Docker 是什么”轉(zhuǎn)移到“實(shí)踐 Docker”與“監(jiān)控 Docker”上。

本文轉(zhuǎn)自劉斌博文 「如何選擇 Docker 監(jiān)控方案 」 ,文中劉斌從技術(shù)的角度深入解釋了 Docker 監(jiān)控的數(shù)據(jù)采集原理,介紹了現(xiàn)有開(kāi)源的監(jiān)控方案,以及能夠?qū)?Docker 進(jìn)行監(jiān)控功能的主流 SaaS 服務(wù)工具。

上一篇文章中介紹了 Docker 監(jiān)控目的及技術(shù)基礎(chǔ),本篇文章將介紹,Docker 監(jiān)控方案的實(shí)現(xiàn)。

Docker 監(jiān)控方案的實(shí)現(xiàn)

  • 自己動(dòng)手 + 開(kāi)源軟件
  • SaaS

評(píng)價(jià)標(biāo)準(zhǔn)

  • 功能

    • 信息詳細(xì)程度

    • 查詢的靈活程度

    • 報(bào)警 + API

  • 靈活性

    • 定制
  • 成本

    • 學(xué)習(xí)、開(kāi)發(fā)

    • 維護(hù)

  • 運(yùn)維

    • 部署復(fù)雜程度
  • 高可用

需要考慮的基本要素如上所示,不多述。

自己動(dòng)手

  • 靈活性強(qiáng)
  • 成本高

這里的成本包括開(kāi)發(fā)成本,開(kāi)發(fā)成本可能包括招人和培訓(xùn),開(kāi)發(fā)時(shí)間和填坑時(shí)間。開(kāi)發(fā)完了還需要維護(hù)成本,而且隨著Docker的升級(jí),可能還需要對(duì)metric的采集實(shí)現(xiàn)進(jìn)行升級(jí),以及各種bugfix。

自己動(dòng)手打造監(jiān)控方案

  • 采集
  • 存儲(chǔ)
  • 展示
  • 報(bào)警(動(dòng)作)

StatsD 是 Flickr 公司首先提出來(lái)的,后來(lái)由 Esty 公司發(fā)揚(yáng)光大的一個(gè)輕量級(jí)的指標(biāo)采集模塊。

簡(jiǎn)單來(lái)講,StatsD 就是一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)守護(hù)進(jìn)程,基于 Node.js 平臺(tái)(Esty實(shí)現(xiàn),其實(shí)也有其他語(yǔ)言版本),通過(guò) UDP 或者 TCP 方式偵聽(tīng)各種統(tǒng)計(jì)信息,包括計(jì)數(shù)器和定時(shí)器,可以用來(lái)采集操作系統(tǒng)、不同數(shù)據(jù)庫(kù)、中間件的數(shù)據(jù)指標(biāo),進(jìn)行緩存、聚合,并發(fā)送到Graphite 等存儲(chǔ)和可視化系統(tǒng)中。

StatsD 具有以下優(yōu)點(diǎn):

  • 簡(jiǎn)單

首先安裝部署簡(jiǎn)單,且StatsD 協(xié)議是基于文本的,可以直接寫(xiě)入和讀取,方便實(shí)現(xiàn)各種客戶端和SDK。

Cloud Insight的探針也是采用這些方式,我們有些SDK也是基于StatsD的,目前有Ruby、PythonJava的,在 GitHub 上可以看到。

  • 低耦合性

StatsD 守護(hù)進(jìn)程采取 UDP 這種無(wú)狀態(tài)的協(xié)議,收集指標(biāo)和應(yīng)用程序本身之間沒(méi)有依賴,不會(huì)阻塞應(yīng)用,不管StatsD的狀態(tài)是運(yùn)行中,還是沒(méi)在運(yùn)行,都不會(huì)影響應(yīng)用程序,應(yīng)用程序也不關(guān)心StatsD是否收到數(shù)據(jù)。

  • 易集成

StatsD非常容易整合其他組件,可以自己編寫(xiě)采集業(yè)務(wù)邏輯,發(fā)送到StatsD守護(hù)進(jìn)程即可。也就是說(shuō)用戶的工作很簡(jiǎn)單,只需要按定義好的規(guī)則采集數(shù)據(jù)發(fā)送到Stats,然后用Graphite存儲(chǔ)、展示,通過(guò)使用Riemann進(jìn)行報(bào)警。

Tcollector

  • 來(lái)源于OpenTSDB

Tcollector 是一個(gè)采集指標(biāo)數(shù)據(jù)并保存到OpenTSDB的框架,你可以使用該框架自己編寫(xiě)采集的業(yè)務(wù)邏輯。類似StatsD,運(yùn)行在客戶端,收集本地的metric信息,推送到OpenTSDB。

Collectd

  • System statistics collection daemon
  • 存儲(chǔ)到RRD
  • 插件機(jī)制(input/output)
  • 簡(jiǎn)單報(bào)警功能

Collectd即是一個(gè)守護(hù)進(jìn)程,也是一個(gè)框架,類似StatsD,它性能非常好,采用C語(yǔ)言編寫(xiě)。Collectd不直接支持從Docker中取數(shù)據(jù),但是我們可以自己編寫(xiě)插件來(lái)采集性能指標(biāo)數(shù)據(jù)。

Collectd有強(qiáng)大的插件機(jī)制,已經(jīng)實(shí)現(xiàn)了包括amqp、rrdtool、graphite、http、kafka、redis、mongodb、OpenTSDB以及CSV文件等在內(nèi)的各種插件。

在4.3版本之后還支持簡(jiǎn)單的基于閾值檢查的報(bào)警機(jī)制。

斌哥的 Docker 進(jìn)階指南—監(jiān)控方案的實(shí)現(xiàn)

cAdvisor是一個(gè)用于收集、聚合處理和輸出容器運(yùn)行指標(biāo)的守護(hù)進(jìn)程。而且cAdvisor基本算是一個(gè)獲取Docker性能數(shù)據(jù)的標(biāo)配了吧。

斌哥的 Docker 進(jìn)階指南—監(jiān)控方案的實(shí)現(xiàn)

一句命令就可以啟動(dòng)cAdvisor容器,訪問(wèn)8080端口即可看到性能指標(biāo)數(shù)據(jù)。cAdvisor可以通過(guò)storage_driver參數(shù)將數(shù)據(jù)存到influxdb,同時(shí)也可以將metric輸出為Prometheus的格式,所以很多自定義Docker監(jiān)控系統(tǒng)都會(huì)采取cAdvisor + Prometheus 的組合。

存儲(chǔ)TSDB

  • OpenTSDB
  • Influxdb
  • RRDTool
  • Graphite

關(guān)于時(shí)序列數(shù)據(jù)庫(kù),可以看附錄中相關(guān)的介紹文章。推薦使用OpenTSDB或者Influxdb,簡(jiǎn)單對(duì)比一下各自特點(diǎn)如下:

  • OpenTSDB

    • Java & HBase
    • 易擴(kuò)展(集群功能強(qiáng)大)
    • 機(jī)器多,運(yùn)維稍顯麻煩
  • Influxdb

    • Golang
    • 集群功能不太成熟
    • 有類SQL的查詢語(yǔ)句
    • 單臺(tái)即可工作

這兩者都支持自由模式和多維度,非常適合用于采用tag機(jī)制的數(shù)據(jù)模式建模。
開(kāi)源可視化工具

  • Graphite
  • Influxdb + Grafana
  • Prometheus

光有數(shù)據(jù)是不夠的,raw data沒(méi)有任何意義,我們需要良好的可視化組件來(lái)展示數(shù)據(jù)和數(shù)據(jù)的內(nèi)在意義,發(fā)揮數(shù)據(jù)的作用。

我們也可以將數(shù)據(jù)存儲(chǔ)和展示交給其他開(kāi)源軟件。

如果你的數(shù)據(jù)采集和存儲(chǔ)都是自己來(lái)完成的,只想使用一個(gè)外部的圖形化界面的話,選Grafana應(yīng)該沒(méi)錯(cuò),Grafana展現(xiàn)形式非常豐富,配置也很靈活。

斌哥的 Docker 進(jìn)階指南—監(jiān)控方案的實(shí)現(xiàn)

以上,先到這里。

下一章,劉斌將為大家介紹 Docker 監(jiān)控的開(kāi)原方案,主流 SaaS 服務(wù),及其特點(diǎn)。

超好用的監(jiān)控軟件 Cloud Insight 不僅能監(jiān)控 Docker,還能對(duì) Nagios 進(jìn)行更好的可視化哦~

閱讀更多技術(shù)文章,請(qǐng)?jiān)L問(wèn) OneAPM 官方博客。

本文轉(zhuǎn)自 OneAPM 官方博客

最后編輯于
?著作權(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)容

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