容器監控平臺概覽
1. 監控的意義和目的
監控是管理基礎設施的核心工具。沒有監控,我們將無法了解系統環境、進行診斷故障、制定容量計劃,最糟的就是,故障發生了也不會被發現。
從技術角度來看,監控是衡量和管理技術系統的工具和流程。監控將系統和應用程序生成的指標轉換為對應的業務價值。監控系統需要在基于容器的微服務中自動且快速地識別生命周期,并持續地提供實時的監控檢測。
在上一節中,我們已經使用WeaveScope搭建了一個容器監控管理系統,并帶有一些基本的監控功能。但它對于自定義數據獲取、自動告警、細化監控指標和展示的時候,生態、功能性和擴展性都有欠缺,系統及需求復雜時難以滿足我們的定制化的監控需求。這時,我們就需要圍繞Premetheus,配合其生態及相關工具,配置我們的監控平臺。
2. Prometheus
Prometheus 的靈感來自 Google 的 Borgmon, 是由前 Google 工程師從 2012 年開始在 Soundcloud以開源軟件的形式進行研發的系統監控和告警工具包,自此以后,許多公司和組織都采用了 Prometheus 作為監控告警工具。Prometheus 的開發者和用戶社區非?;钴S,它現在是一個獨立的開源項目,可以獨立于任何公司進行維護。
Prometheus 已被全球眾多企業廣泛使用,以滿足上面提到的復雜的監控需求,當然,它也可以用來監控屬于傳統架構的資源。
Prometheus 的整體架構以及生態系統組件如下圖所示:
2.1 基本原理
Prometheus 專注于現在正在發生的事情,而不是追蹤數周或數月前的數據。Prometheus 通常不用于長期數據保留,默認保存 15 天的時間序列數據。它有這樣一個前提,即大多數監控查詢和警報都是從最近的數據中生成的。
Prometheus的基本原理是通過HTTP協議周期性抓取被監控組件的狀態,任意組件只要提供對應的HTTP接口就可以接入監控。不需要任何SDK或者其他的集成過程。
輸出被監控組件信息的HTTP接口被叫做exporter 。常用的組件大部分都有exporter可以直接使用,比如Nginx、MySQL、Linux系統信息等等。
大致工作流程如下:
-
Prometheus定時去目標上抓取指標監控數據,抓取目標需要暴露一個http服務的接口給它定時抓取。對于不能直接抓取的目標,Prometheus支持這些應用服務主動推送監控指標到PushGateway,而后Prometheus定時去這些網關上抓取數據。
-
Prometheus在本地存儲保存抓取的數據,并按規則進行過濾和整理數據。
-
Prometheus支持很多方式的圖表可視化,例如Grafana、自帶的Promdash以及自身提供的模版引擎等等。Prometheus還提供HTTP API的查詢方式,自定義所需要的輸出。
2.2 Prometheus 的優勢
Prometheus 的主要優勢有:
- 由指標名稱和和鍵/值對標簽標識的時間序列數據組成的多維數據模型;
- 強大的查詢語言 PromQL;
- 不依賴分布式存儲;單個服務節點具有自治能力;
- 時間序列數據是服務端通過 HTTP 協議主動拉取獲得的;
- 也可以通過中間網關來推送時間序列數據;
- 可以通過靜態配置文件或服務發現來獲取監控目標;
- 支持多種類型的圖表和儀表盤。
3. Prometheus 的組件與生態
3.1 cAdvisor
Prometheus 支持了多種方法來監控 Docker,推薦的方法是使用 Google 的 cAdvisor 工具。cAdvisor是Google開源的一款用于展示和分析容器運行狀態的可視化工具。通過在主機上運行cAdvisor用戶可以輕松的獲取到當前主機上容器的運行統計信息,并以圖表的形式向用戶展示。
cAdvisor是一個簡單易用的工具,用戶不用再登錄到服務器中即可以可視化圖表的形式查看主機上所有容器的運行狀態。cAdvisor 作為 Docker 容器運行,它可以對宿主機上的資源及容器進行實時監控和性能數據采集,包括CPU使用情況、內存使用情況、網絡吞吐量及文件系統使用情況。
cAdvisor默認只保存幾分鐘分鐘的監控數據,Prometheus 支持通過它導出指標,并將數據傳輸到存儲系統中。
3.2 Grafana
Prometheus本身的界面比較簡潔,為了給 Prometheus 添加一個功能更全面的可視化界面,我們可以與開源儀表板工具 Grafana 集成。
Grafana 接受來自不同數據源的數據,提供可視化儀表板。它支持多種數據源。
Tips:
數據可視化既是一門非常強大的分析和解釋技術。我們在查看可視化圖像時,往往會從隨機無關聯的數據中找到有價值的聯系,而數據的顆粒度或分辨率、表示數據的方式以及數據的規??赡軙M一步加劇這種飛躍。
理想的可視化應該能夠清晰地顯示數據,避免不重要的數據堆砌,突出重點。
3.3 Alertmanager
Prometheus 服務器沒有內置警報工具,而是將警報從 Prometheus 服務器推送到 Alertmanager警報管理器的單獨服務器。Alertmanager 可以管理、整合和分發各種警報到不同目的地,并能夠防止重復發送。
我們將在 Prometheus 服務器上編寫警報規則 ,這些規則將使用我們收集的指標并在指定的閾值或標準上觸發警報。當指標達到閾值時,會生成一個警報,并將其推送到 Alertmanager。
4. 小結
目前,Prometheus 已成為企業構建容器云架構的首選開源監控工具。下一節我們將進入實戰環節,運用這些工具,搭建一個完整的監控平臺。