1. 程式人生 > >Plural龍源國際客服18669144449sight

Plural龍源國際客服18669144449sight

web 應用 arm 發布 在服務器 節點 時間 實踐 服務 本地

近日,我在 Pluralsight 網絡課程中更新了一節《如何使用 Docker 監控容器化應用程序運行狀況》的教學視頻!本視頻涵蓋了在 Linux 和 Windows 上運行 Docker 容器時監控應用程序所需的全部內容,它將教會您監控容器的整個理論和實踐以及使用行業標準工具 Prometheus 和 Grafana。

在 Docker 中監控應用程序的最主要好處是,開發人員可以在本地運行監控應用棧,並獲得運營團隊在生產中使用的完全相同的指標。

演示應用程序是在 Linux 容器上運行 Java,在 Windows 容器上運行 .NET Framework。我使用獨立的 Docker 引擎(適用於 Mac 和 Windows 的 Docker Desktop,以及 Ubuntu 和Windows Server 上的 Docker Engine)以及運行 Linux 和 Windows 節點的混合 Docker swarm。所以,每個人都可以各取所需。

為容器化應用程序構建監控

應用程序在數百個 Docker 容器中運行時,與其在幾十臺服務器中運行相比,其監控是不同的。您不希望使用 Nagios 或 SCOM 等“經典”監視工具,因為它們不適用於現階段高周轉率以及動態管理的環境。

因此,與在服務器上運行時將數據推送到中央監控服務器的代理不同,您可以從容器和 Docker 服務器公開指標,並運行一個監控組件來輪詢這些指標並存儲結果:

用 Prometheus 和 Grafana 實現容器化應用程序的可視化監控

指標服務器是 Prometheus,它將數據存儲在自己的時間序列數據庫中。然後,為了可視化您的應用程序運行狀況,您可以在 Grafana 中構建一個儀表板,該儀表板可以實時顯示 Prometheus 的關鍵指標,並且可以根據需要顯示。

Prometheus 和 Grafana 是成熟的開源項目,擁有龐大的用戶群,並且為在 Docker 中運行提供了良好的支持。它們都是 CNCF Landscape 的特色,Prometheus 是 CNCF 的授權項目。

它們都是您需要學習的新技術,但是它們的入門都非常簡單。接下來,我將帶您了解這些內容 —— 包括在 Linux 和 Windows 上的 Docker 容器中運行 Prometheus 和 Grafana。

在輕量級的 Docker 容器中運行監控組件意味著您可以在每個環境中運行相同的指標儀表板,從容器中提取指標的體系結構意味著您可以在不同級別的解決方案上獲得一致的視圖。接下來,我將介紹:

應用程序指標 —— 您記錄的自定義指標,這些指標在儀表板中很有用,例如登錄用戶數等。
運行時指標 —— 操作系統或運行時主機已收集的數據,如 We b服務器處理的每秒請求數或內存使用量等。
Docker 指標 —— 來自容器平臺的指標,包括在每個狀態下運行的容器、節點可用性和運行狀況檢查。

用 Prometheus 收集指標

Prometheus 是一個輪詢服務器,它向提供服務指標的 REST API 發出 HTTP 請求(您也可以將數據推送到 Prometheus,但這是一種不太常見的模式)。

您可以直接在服務器上運行 Prometheus,但最好是在 Docker 中運行它 —— 這將使 Prometheus 的設置更加便攜,並且 Prometheus 可以使用 Docker內置的 DNS 服務器來更容易的發現輪詢目標。

Prometheus 是指標服務器的絕佳選擇,因為它具有大多數語言的客戶端庫,Docker 引擎本身可以公開 Prometheus 格式的指標。

我將向您展示如何在 Prometheus 中為容器和 Docker 引擎配置服務發現,無論是在獨立模式還是在集群模式下。

在群集模式下,Docker 支持使用 DNS 查詢進行容器發現,這些查詢為您提供了服務中所有容器的 IP 地址。

向 Prometheus 公開運行時指標

托管應用程序的運行時可能已經在收集指標了,您可以在不更改代碼的情況下從容器中公開它們。

我將向您展示如何在 Docke r鏡像中將指標導出器與應用程序一起打包,這是一個為 Prometheus 提供 “/metrics”API 的實用程序:

用 Prometheus 和 Grafana 實現容器化應用程序的可視化監控

這是在 Docker 中向現有應用程序添加監控的一種簡單且低風險的方法,無需更改應用程序(只需在 Dockerfile 中打包一個第三方的導出器)。舉個例子:

Tomcat 在 Linux 容器中運行 JSP 網站,其導出器為您提供來自 JVM 和 Tomcat Web 服務器的詳細指標。
IIS 在Windows容器中運行 ASP .NET 網站,其導出器為您提供 Windows 性能計數器的指標,包括 .NET 和 IIS 的指標。
這個級別的監控可以告訴您容器的工作情況,這是查看某個地方是否存在瓶頸或某個容器是否有問題的好地方。

向 Prometheus 公開應用程序指標

如果要從容器中提取自定義指標,則需要編寫一些代碼。但是,它很簡單。

我使用適用於 Java 的官方 Prometheus 客戶端庫,以及用於 .NET 的社區 Prometheus 客戶端庫,將自定義指標添加到我的 Web 應用程序中。我記錄了基本內容,例如登錄會話數、添加到購物籃中的商品數量以及下訂單數量。

客戶端庫為 Prometheus 提供 REST API。我將介紹一些托管端點的選項 —— 我更喜歡為應用程序和運行時指標設置單獨的端點,這樣您就可以在不同的計劃上輪詢它們。

應用程序指標可以告訴您容器內部發生了什麽,因此您可以使用它們為業務用戶提供實時的 KPI 數據,或為 IT 用戶提供技術統計信息。

向 Prometheus 公開 Docker 指標

Docker 還可以用 Prometheus 的格式導出指標(這是一個實驗性質的功能,但我將告訴你如何啟用它,以及運行“實驗性質”意味著什麽)。

您可以從 Docker 引擎中獲得一組統計信息,其中包括容器和運行狀況檢查信息,以及服務器詳細信息和使用情況。所有版本的 Docker 都是如此,因此您可以在儀表板中顯示 Docker 平臺的統計信息。開發人員在 Docker Desktop 中看到的詳細信息與運營團隊在 Docker Enterprise 上的生產環境中所看到的詳細信息保持一致。

在群集模式下運行時,管理器節點會產生第二組統計信息,它將告訴您有關群集中節點的詳細信息,以及有關群集性能的底層信息(包括 etcd 和 Raft)。

這是您希望在應用程序儀表板中看到的最終詳細信息。在概述中看到這些細節非常好,因為它可以很容易地在不同的數據集之間進行關聯,並發現問題的根本原因。

如果應用程序指標中登錄用戶的數量突然下降,並且運行時指標中提供的 HTTP 請求數量也下降了,那麽您可以檢查 Docke 指標 —— 可能您的運行狀況檢查都失敗了,這意味著發布失敗了,或者可能有一半的節點已經脫機。在一個地方查看所有這些數據可以為您提供全面的見解。

使用 Grafana 構建儀表板

最後,我要向您展示的是如何在 Grafana 中構建儀表板,使用 PromQL 查詢將所有關鍵應用程序、運行時和 Docker 指標集中到同一個儀表板中:

用 Prometheus 和 Grafana 實現容器化應用程序的可視化監控

Grafana 本身非常簡單易用,我在視頻中介紹了數據源、儀表板和面板。我還向您展示了如何使用您自己的配置打包 Grafana,這樣您就可以構建一個自定義的 Docker鏡像了,該鏡像具有:

配置了您 Prometheus 的數據源;
部署了您應用程序的儀表板;
創建的只讀用戶;
為該只讀用戶設置您應用程序儀表板的主頁;

當您學會了本教學的所有內容,您最終將會得到屬於自己的 Prometheus 和 Grafana 的 Dockerfiles 文件,它們會讓您的監控部署實現自動化,就像你對應用程序鏡像和容器所做的一樣。

Plural龍源國際客服18669144449sight