斌哥的 Docker 進階指南—監控方案的實現

OneAPM官方技術部落格發表於2016-05-04

過去的一年中,關於 Docker 的話題從未斷過,而如今,從嘗試 Docker 到最終決定使用 Docker 的轉化率依然在逐步升高,關於 Docker 的討論更是有增無減。另一方面,大家的注意力也漸漸從 “Docker 是什麼”轉移到“實踐 Docker”與“監控 Docker”上。

本文轉自劉斌博文 「如何選擇 Docker 監控方案 」 ,文中劉斌從技術的角度深入解釋了 Docker 監控的資料採集原理,介紹了現有開源的監控方案,以及能夠對 Docker 進行監控功能的主流 SaaS 服務工具。

上一篇文章中介紹了 Docker 監控目的及技術基礎,本篇文章將介紹,Docker 監控方案的實現。

Docker 監控方案的實現

  • 自己動手 + 開源軟體
  • SaaS

評價標準

  • 功能

    • 資訊詳細程度

    • 查詢的靈活程度

    • 報警 + API
  • 靈活性

    • 定製
  • 成本

    • 學習、開發

    • 維護

  • 運維

    • 部署複雜程度
  • 高可用

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

自己動手

  • 靈活性強
  • 成本高

這裡的成本包括開發成本,開發成本可能包括招人和培訓,開發時間和填坑時間。開發完了還需要維護成本,而且隨著Docker的升級,可能還需要對metric的採集實現進行升級,以及各種bugfix。

自己動手打造監控方案

  • 採集
  • 儲存
  • 展示
  • 報警(動作)

StatsD 是 Flickr 公司首先提出來的,後來由 Esty 公司發揚光大的一個輕量級的指標採集模組。

簡單來講,StatsD 就是一個簡單的網路守護程式,基於 Node.js 平臺(Esty實現,其實也有其他語言版本),通過 UDP 或者 TCP 方式偵聽各種統計資訊,包括計數器和定時器,可以用來採集作業系統、不同資料庫、中介軟體的資料指標,進行快取、聚合,併傳送到Graphite 等儲存和視覺化系統中。

StatsD 具有以下優點:

  • 簡單

首先安裝部署簡單,且StatsD 協議是基於文字的,可以直接寫入和讀取,方便實現各種客戶端和SDK。

Cloud Insight的探針也是採用這些方式,我們有些SDK也是基於StatsD的,目前有RubyPythonJava的,在 GitHub 上可以看到。

  • 低耦合性

StatsD 守護程式採取 UDP 這種無狀態的協議,收集指標和應用程式本身之間沒有依賴,不會阻塞應用,不管StatsD的狀態是執行中,還是沒在執行,都不會影響應用程式,應用程式也不關心StatsD是否收到資料。

  • 易整合

StatsD非常容易整合其他元件,可以自己編寫採集業務邏輯,傳送到StatsD守護程式即可。也就是說使用者的工作很簡單,只需要按定義好的規則採集資料傳送到Stats,然後用Graphite儲存、展示,通過使用Riemann進行報警。

Tcollector

  • 來源於OpenTSDB

Tcollector 是一個採集指標資料並儲存到OpenTSDB的框架,你可以使用該框架自己編寫採集的業務邏輯。類似StatsD,執行在客戶端,收集本地的metric資訊,推送到OpenTSDB。

Collectd

  • System statistics collection daemon
  • 儲存到RRD
  • 外掛機制(input/output)
  • 簡單報警功能

Collectd即是一個守護程式,也是一個框架,類似StatsD,它效能非常好,採用C語言編寫。Collectd不直接支援從Docker中取資料,但是我們可以自己編寫外掛來採集效能指標資料。

Collectd有強大的外掛機制,已經實現了包括amqp、rrdtool、graphite、http、kafka、redis、mongodb、OpenTSDB以及CSV檔案等在內的各種外掛。

在4.3版本之後還支援簡單的基於閾值檢查的報警機制。

斌哥的 Docker 進階指南—監控方案的實現

cAdvisor是一個用於收集、聚合處理和輸出容器執行指標的守護程式。而且cAdvisor基本算是一個獲取Docker效能資料的標配了吧。

1.

斌哥的 Docker 進階指南—監控方案的實現

一句命令就可以啟動cAdvisor容器,訪問8080埠即可看到效能指標資料。cAdvisor可以通過storage_driver引數將資料存到influxdb,同時也可以將metric輸出為Prometheus的格式,所以很多自定義Docker監控系統都會採取cAdvisor + Prometheus 的組合。

儲存TSDB

  • OpenTSDB
  • Influxdb
  • RRDTool
  • Graphite

關於時序列資料庫,可以看附錄中相關的介紹文章。推薦使用OpenTSDB或者Influxdb,簡單對比一下各自特點如下:

  • OpenTSDB

    • Java & HBase
    • 易擴充套件(叢集功能強大)
    • 機器多,運維稍顯麻煩
  • Influxdb

    • Golang
    • 叢集功能不太成熟
    • 有類SQL的查詢語句
    • 單臺即可工作

這兩者都支援自由模式和多維度,非常適合用於採用tag機制的資料模式建模。 開源視覺化工具

  • Graphite
  • Influxdb + Grafana
  • Prometheus

光有資料是不夠的,raw data沒有任何意義,我們需要良好的視覺化元件來展示資料和資料的內在意義,發揮資料的作用。

我們也可以將資料儲存和展示交給其他開源軟體。

如果你的資料採集和儲存都是自己來完成的,只想使用一個外部的圖形化介面的話,選Grafana應該沒錯,Grafana展現形式非常豐富,配置也很靈活。

斌哥的 Docker 進階指南—監控方案的實現

以上,先到這裡。

下一章,劉斌將為大家介紹 Docker 監控的開原方案,主流 SaaS 服務,及其特點。

超好用的監控軟體 Cloud Insight 不僅能監控 Docker,還能對 Nagios 進行更好的視覺化哦~

閱讀更多技術文章,請訪問 OneAPM 官方部落格

本文轉自 OneAPM 官方部落格

相關文章