iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

在今天的文章中,我們將學習如何在 Kubernetes 叢集中使用 Prometheus 進行基礎的監控。Prometheus 是一個強大的開源監控工具,能夠自動從系統中收集指標數據,並提供告警功能,幫助我們及時發現系統中的問題。這些監控工具對 DevOps 團隊的日常運作非常重要,因為它能即時提供系統運行狀態的反饋,讓團隊能夠快速應對問題。


什麼是 Prometheus?

https://ithelp.ithome.com.tw/upload/images/20241005/20169492nFPCAFeqbA.png
圖片來源

Prometheus 是一個開源的監控系統和時間序列數據庫,它專為收集和查詢應用的監控指標而設計。它的主要特點包括:

  1. 指標收集:Prometheus 會定期從應用程式和服務中抓取指標數據。
  2. 查詢語言:提供強大的查詢語言 PromQL,讓用戶能夠輕鬆地分析和可視化指標數據。
  3. 告警機制:當系統指標超過設定的閾值時,Prometheus 支援自動觸發告警。

Prometheus 在 Kubernetes 環境中特別受歡迎,因為它能夠輕鬆地與容器化應用整合,並且自動發現 Kubernetes 叢集中的服務和 Pod。在深入實踐之前,我們先了解 Prometheus 的一些核心概念:

  • 目標 (Target):Prometheus 會定期抓取目標應用的指標。這些目標可以是應用程式、服務,甚至是 Kubernetes 叢集中的節點。
  • 指標 (Metrics):Prometheus 會定期抓取系統和應用的指標數據。這些數據可以來自系統資源(如 CPU、記憶體)或應用本身。
  • Exporters:應用程式需要通過 Exporter 將其指標數據暴露給 Prometheus。常見的 Exporter 包括 Node Exporter(用於收集系統指標)和 cAdvisor(用於收集容器指標)。

為何監控對 DevOps 很重要?

DevOps 團隊來說,監控系統是保障應用穩定運行和及時響應問題的關鍵。以下是監控如何影響 DevOps 團隊的幾個方面:

  1. 即時可見性:透過監控工具,DevOps 團隊能夠實時掌握應用的運行情況,這包括資源使用情況、服務健康狀態等。這樣,團隊能夠在問題初現時立即作出回應,而不是等到問題擴大後再去處理。
  2. 持續改進:監控數據不僅幫助團隊排查問題,還能為應用性能優化提供依據。通過長期收集和分析指標數據,DevOps 團隊可以持續改進系統的運行效率和穩定性。
  3. 自動化與可擴展性:監控能夠自動觸發告警或擴展操作,讓應用能夠動態應對流量波動,從而實現自動化維運。

監控在 CI/CD 流程中的角色

監控不僅在應用上線後起到關鍵作用,還在 CI/CD 流程中發揮了不可或缺的作用:

  1. 應用佈署後的健康檢查:每次新版本佈署後,Prometheus 都能夠自動監控應用的指標,幫助團隊確認佈署是否成功以及應用是否運行正常。這能減少佈署後的風險,確保應用更新不會導致性能問題或服務中斷。
  2. 變更追蹤與回退:通過監控數據,DevOps 團隊能夠追蹤佈署變更對系統性能和穩定性的影響。如果新佈署的版本引入了問題,團隊可以依據監控數據進行回退,快速恢復到穩定版本。
  3. 提升自動化能力:通過監控數據,DevOps 團隊可以配置自動化的響應操作,例如當負載超過閾值時,自動啟動 Pod 水平擴展 (HPA),確保應用能夠處理更多的流量。

佈署 Prometheus

在 Kubernetes 中,我們可以通過 Helm 來快速佈署 Prometheus

加 Prometheus 的 Helm Repository

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

更新一下

helm repo update

安裝 Prometheus

接下來,使用 Helm 佈署 Prometheus

helm install prometheus prometheus-community/prometheus

這會在 Kubernetes 中啟動 Prometheus 叢集,並且開始自動監控 Kubernetes 內的指標。

https://ithelp.ithome.com.tw/upload/images/20241005/201694925iWe374M92.png

檢查 Prometheus 佈署

使用以下命令檢查 Prometheus 是否成功佈署:

kubectl get pods -l app=prometheus
# 或
kubectl get pods --namespace default -l "app.kubernetes.io/name=prometheus,app.kubernetes.io/instance=prometheus" -o jsonpath="{.items[0].metadata.name}"

這會列出所有 Prometheus 相關的 Pod。當所有 Pod 都處於 Running 狀態時,表示 Prometheus 已經正常運行。


使用 Prometheus 查詢指標數據

佈署完成後,我們可以通過 Prometheus 的 Web 介面來查詢 Kubernetes 叢集中的指標數據。首先,我們需要訪問 Prometheus 的 Web 介面。

查詢 Prometheus pod 名稱

kubectl get pods --namespace default -l "[app.kubernetes.io/name=prometheus,app.kubernetes.io/instance=prometheus](http://app.kubernetes.io/name=prometheus,app.kubernetes.io/instance=prometheus)" -o jsonpath="{.items[0].metadata.name}"[adata.name](http://adata.name/)}"

這裡會得到自己正在執行的Prometheus pod 名稱,例如 prometheus-server-xxx

Prometheus Web UI

將 Prometheus 的 Web UI 開放給外部訪問

kubectl --namespace default port-forward <prometheus-server-xxx> 9090

https://ithelp.ithome.com.tw/upload/images/20241005/20169492LhQK69mfwy.png

這樣,我們可以在本機的 http://localhost:9090http://127.0.0.1:9090 上訪問 Prometheus 的 Web 介面。

https://ithelp.ithome.com.tw/upload/images/20241005/20169492vcxl37rknJ.png

查詢 Kubernetes 指標

在 Prometheus Web 介面的 "Graph" 頁面,我們可以使用 PromQL 來查詢系統指標。例如:

  • 查詢 CPU 使用率:rate(container_cpu_usage_seconds_total[5m])
  • 查詢記憶體使用率:container_memory_usage_bytes

這些指標能夠幫助我們了解 Kubernetes 叢集中應用和節點的運行情況。

模擬高 CPU 使用率的情境

這個命令會啟動一個不斷消耗 CPU 資源的 Pod,來模擬高 CPU 使用

kubectl run cpu-stress --image=busybox --restart=Never -- /bin/sh -c "while true; do :; done"

https://ithelp.ithome.com.tw/upload/images/20241005/20169492NN4MixcHWG.png

停止模擬

要停止這個模擬測試,可以刪除高 CPU 使用的 Pod

kubectl delete pod cpu-stress

使用情境

  1. 實時監控應用健康狀況:Prometheus 讓我們可以實時監控 Kubernetes 叢集中應用的 CPU、記憶體使用率、網路流量等關鍵指標,幫助我們提前發現系統瓶頸並進行優化。
  2. 資源使用優化:透過 Prometheus 收集的指標數據,我們可以分析應用的資源使用情況,從而調整 Pod 的資源限制或自動擴展策略,以更好地利用叢集資源。
  3. 告警與自動化響應:配合 Prometheus 的告警功能,我們可以設定當某些指標超過指定閾值時自動觸發告警,甚至自動執行回應操作(如自動擴展或重新啟動 Pod)。

結語&預告

今天我們學習了如何在 Kubernetes 中使用 Prometheus 來進行基礎的監控,並且了解了 Prometheus 的主要功能和配置方法。透過 Prometheus,我們可以即時掌握系統運行情況,從而更快速地響應問題,並且為未來的應用優化提供依據。

明天,我們將介紹如何使用 Grafana 來可視化 Prometheus 中收集到的數據,幫助我們更直觀地理解和分析系統指標。敬請期待!


參考文件


上一篇
Day20 - 使用 Helm 管理 Kubernetes 的應用佈署
下一篇
Day22 - 使用 Grafana 進行可視化監控
系列文
DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言