Prometheus 和 Grafana 是當今 Kubernetes 生態系統中最常用的開源監控和可視化工具。Prometheus 用於收集和儲存來自各種來源的監控資料,而 Grafana 用於將這些資料可視化,幫助運維人員快速了解系統狀況。
下圖是 prometheus.io 所提供的架構圖:
這張圖展示了 Prometheus 監控系統的整體架構,說明了各個組件之間的交互關係以及資料流的走向。
Prometheus Server 是系統的核心,負責資料檢索和儲存,而 Alertmanager 和 Grafana 則負責告警處理和資料可視化。這樣的架構確保了系統運維的可觀測性和自動化告警能力。
Kube Prometheus Stack 是一個集成的開源解決方案,專門用於在 Kubernetes Cluster 中實現全面的監控和告警管理。它包括 Prometheus、Grafana、Alertmanager 以及其他相關工具,通過 Prometheus Operator 來簡化這些組件的部署和運維管理。以下將詳細說明如何使用 Kube Prometheus Stack 來設定和管理 Kubernetes Cluster 的監控系統。
首先,通過 Helm 添加 prometheus-community
的 Helm Chart 儲存庫:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
為了更好地管理 Kube Prometheus Stack,可以創建一個專用的命名空間,例如 monitoring
:
kubectl create namespace monitoring
使用以下命令來安裝 Kube Prometheus Stack 到 monitoring
命名空間:
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --namespace monitoring
這將自動部署 Prometheus、Grafana、Alertmanager 和 Prometheus Operator 等組件。
執行正確後的訊息如下:
NAME: prometheus
LAST DEPLOYED: Mon Aug 12 14:40:21 2024
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
NOTES:
kube-prometheus-stack has been installed. Check its status by running:
kubectl --namespace monitoring get pods -l "release=prometheus"
Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
要讓外部能夠存取Grafana,你需要對Grafana的服務進行一些設定。以下是基本步驟:
安裝 kube-prometheus-stack
之後,Grafana 的服務通常會設定為 ClusterIP,這意味著它只能在 Cluster 內部存取。你需要將其更改為 NodePort
或 LoadBalancer
。
你可以通過以下命令來修改服務類型:
kubectl -n monitoring edit svc prometheus-grafana
在打開的編輯器中,將 type
從 ClusterIP
更改為 NodePort
或 LoadBalancer
。例如:
spec:
type: NodePort
保存並退出編輯器。
如果選擇了 NodePort
,可以使用以下命令來檢查已分配的端口號:
kubectl -n monitoring get svc prometheus-grafana
這會顯示 NodePort
的端口號,通常是在 30000-32767 範圍內的隨機端口。
如果使用 NodePort
,可以通過以下URL格式存取 Grafana:
http://<Node_IP>:<NodePort>
<Node_IP>
是 Cluster 中任何一個節點的 IP 地址,<NodePort>
是上一步檢查到的端口號。
如果使用 LoadBalancer
,則需要查找分配給 LoadBalancer 的外部 IP 地址,然後通過該 IP 存取。
預設情況下,Grafana 的用戶名是 admin
,初始密碼也設為 prom-operator
。可以在首次登錄時更改這個密碼。
這樣設定完成後,你應該可以從外部網絡存取你的 Grafana 了。
Grafana 預裝了多個 Kubernetes 監控儀表板,這些儀表板直接從 Prometheus 中提取資料並可視化顯示。這些儀表板涵蓋了 Cluster 健康狀態、Pod 性能、節點資源利用率等關鍵指標。你可以根據需要自定義或創建新的儀表板來滿足特定需求。
Prometheus Operator 是 Kube Prometheus Stack 的核心,它簡化了 Prometheus Cluster的部署和管理。通過 Operator,你可以:
Kube Prometheus Stack 包含了許多預定義的告警規則,這些規則涵蓋了常見的監控需求,如Cluster健康狀況、節點資源使用、Pod 可用性等。
你可以根據具體需求添加自定義的告警規則。這些規則可以通過 PrometheusRule
這個自定義資源來定義。例如:
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: custom-alert-rules
namespace: monitoring
spec:
groups:
- name: example
rules:
- alert: HighMemoryUsage
expr: sum(container_memory_usage_bytes) by (pod) / sum(container_spec_memory_limit_bytes) by (pod) > 0.9
for: 10m
labels:
severity: critical
annotations:
summary: "Pod {{ $labels.pod }} is using more than 90% of its memory limit"
這個告警規則會在 Pod 的記憶體使用超過 90% 並持續 10 分鐘時觸發一個嚴重級別的告警。
Kube Prometheus Stack 提供了 Kubernetes Cluster 監控的全套解決方案。通過 Prometheus、Grafana 和 Prometheus Operator 的緊密集成,你可以實現高效的監控、告警和可視化,確保 Kubernetes Cluster 的健康和穩定運行。這個工具適合希望對 Cluster 進行深度監控並需要靈活設定告警和儀表板的運維團隊。