斌哥的 Docker 進階指南—監控方案的實現
過去的一年中,關於 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的,目前有Ruby、Python和Java的,在 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版本之後還支援簡單的基於閾值檢查的報警機制。
cAdvisor是一個用於收集、聚合處理和輸出容器執行指標的守護程式。而且cAdvisor基本算是一個獲取Docker效能資料的標配了吧。
1.
一句命令就可以啟動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 監控的開原方案,主流 SaaS 服務,及其特點。
超好用的監控軟體 Cloud Insight 不僅能監控 Docker,還能對 Nagios 進行更好的視覺化哦~
閱讀更多技術文章,請訪問 OneAPM 官方部落格。
本文轉自 OneAPM 官方部落格
相關文章
- 斌哥的 Docker 進階指南Docker
- docker監控方案Docker
- Docker 快速實現 【JMeter + InfluxDB + Grafana】 監控方案DockerJMeterUXGrafana
- Docker容器的自動化監控實現Docker
- Zabbix監控使用進階
- Docker進階-容器監控cAdvisor+InfluxDB+GranfanaDockerUX
- Docker 監控實戰Docker
- Docker——11——Docker的監控——(待發)Docker
- 前端監控進階篇 — Sentry 監控 Next.js 專案實踐前端JS
- 演進實錄|不同階段的企業如何搭建監控體系?
- Java實現ZooKeeper的zNode監控Java
- TiDB監控實現--存活監控TiDB
- 6.prometheus監控--監控dockerPrometheusDocker
- Docker監控PrometheusDockerPrometheus
- Sentinel進化指南:dashbaord改造,叢集流控,監控持久化持久化
- 利用API介面進行競品價格監控的綜合指南API
- 虛擬網路監控進階之路-DeepFlow
- OpenTelemetry 實戰:gRPC 監控的實現原理RPC
- 賦能安防監控|嵌入式ARM核心板實現的NVR方案VR
- Docker進階與實踐之三:Docker映象Docker
- Redis監控方案Redis
- 遠端影片監控實現的條件
- 使用 Sysdig 監控您的Docker容器Docker
- IT監控(進階篇):運維監控系統手把手部署教學運維
- Mysql監控快速指南MySql
- 【Redis實戰專題】「效能監控系列」全方位探索Redis的效能監控以及最佳化指南Redis
- 對table的操作進行監控
- Kubernetes監控實踐(2):可行監控方案之Prometheus和SensuPrometheus
- 鬥魚 Juno 監控中心的設計與實現
- Splunk實現與Hadoop的整合與監控Hadoop
- 【JVM進階之路】八:效能監控工具-命令列篇JVM命令列
- UI 進階之拖拽排序的實現UI排序
- 如何監控docker容器內的服務程式Docker
- 一種對雲主機進行效能監控的監控系統及其監控方法
- 夜鶯監控使用指南
- Git 進階指南Git
- Docker進階與實踐之四:Docker映象倉庫Docker
- Docker進階與實踐之二:NamespaceDockernamespace