如何使用Zabbix監控K8s集羣?爲什麼不用Prometheus、Grafana和alertmanager?

文本將探討如何使用Zabbix監控Kubernetes集羣,並瞭解Zabbix生成的指標。
請查看詳細的Zabbix Kubernetes監控配置和部署指南。

目  錄


1. 爲什麼選擇Zabbix監控Kubernetes?

2. Zabbix Helm Chart

3. 安裝Zabbix Helm Chart

4. 添加Proxy

5. 創建額外的主機

在選擇Zabbix作爲Kubernetes監控工具之前,我們問自己:“爲什麼我們選擇使用Zabbix而不是Prometheus、Grafana和alertmanager呢?

畢竟,它們已經成爲雲生態系統中的標準監控工具。我們決定對Zabbix的最低要求是,它在監控Kubernetes和雲原生應用程序方面至少與Prometheus一樣有效。

通過探索,我們得出結論, Zabbix滿足(甚至超過)了這一最低要求。 Zabbix提供與Prometheus、alert manager和Grafana相似的指標和觸發器,因爲它們都使用相同的後端工具來實現這一點。
但是,Zabbix可以在一個產品中完成這一切,同時保持靈活性,並允許您監控幾乎任何可以編寫代碼採集的內容。在應用程序監控方面,Zabbix可以將由Prometheus exporter和端點提供的Prometheus指標轉換。
此外,由於Zabbix可以調用任何HTTP端點,因此它可以監控沒有專用Prometheus端點的應用程序,而Prometheus不能做到這一點。

Zabbix採集Kubernetes API和kube-state-metrics公開的指標監控Kubernetes。Zabbix Helm Chart在集羣中安裝監控組件。Helm Chart包括以Daemonset方式運行的Zabbix Agent,用於監控每個節點上的本地資源和應用程序。還安裝了一臺Zabbix Proxy,用於採集監控數據並將其傳輸到外部的Zabbix Server。

只有Zabbix Proxy需要訪問Zabbix Server,而Zabbix Agent可以將數據發送到與每個Agent安裝在相同命名空間中的Zabbix Proxy。
基於集羣角色,Zabbix可以通過Kubernetes API訪問集羣中的資源。雖然可以修改集羣角色以限制授予Zabbix的權限,但這將導致一些監控項變爲不支持的。我們建議如果希望充分利用Zabbix監控Kubernetes,則保持不變。
Zabbix Helm Chart將kube-state-metrics項目作爲依賴項安裝。您可能已經熟悉這個項目,該項目在Kubernetes組織下生成基於當前Kubernetes資源狀態的Prometheus格式指標。
此外,如果您有使用Prometheus監控集羣的經驗,可能已經安裝了它。如果是這種情況,您可以指向此部署,而不是另外安裝。
在本教程中,我們將通過Zabbix Helm Chart安裝kube-state-metrics。
要獲取有關跳過此步驟的更多信息,請參閱Zabbix Kubernetes Helm Chart中的values文件。

現在我們已經解釋了Zabbix Helm Chart的工作原理,讓我們開始安裝它。在這個示例中,我們將假設您有一個運行中的Zabbix 6.0(或更高版本)實例,可以從要監控的集羣訪問。我在與我們想要監控的集羣不同的集羣中運行一個6.0實例。服務器可通過DNS名稱mdeforest.zabbix.atsgroup.io和非標準端口31103訪問。

我們將首先安裝最新的Zabbix Helm Chart。

建議訪問zabbix.com/integrations/kubernetes,獲取在本教程中可能會提到的任何來源。在那裏,您將找到指向Zabbix Helm Chart和模板的鏈接。在大多數情況下,我們將按照自述文件中概述的步驟進行操作。


使用終端窗口,我將確保活動集羣設置爲要監控的集羣:
  
  
  
kubectl config use-context <cluster context name>

然後,我將Zabbix Chart存儲庫添加到本地Helm存儲庫:
  
  
  
helm repo add zabbix-chart-6.0 https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.0/

如果您使用的是Zabbix 6.2或更高版本,請將此命令中的6.0引用更改爲6.2。

根據您的情況,您需要爲安裝設置一些值。在大多數情況下,您只需要爲Zabbix Agent和Proxy設置一些環境變量。完整的值和環境變量列表可在Helm Chart存儲庫中找到,以及Docker Hub上的Zabbix Agent和Proxy鏡像。

在這種情況下,我正在爲Zabbix Agent設置被動服務器環境變量,以允許任何IP連接。對於Zabbix Proxy,我正在設置它可訪問的服務器主機以及非標準端口。我還在這裏設置了一些與緩存大小相關的變量。這些變量可能取決於您的集羣大小,因此您可能需要調整它們以找到正確的值。
現在,我已經準備好values文件,可以開始安裝chart。因此,我們將使用以下命令。當然,chart路徑可能根據您使用的版本而有所不同。
  
  
  
helm install -f </path/to/values/file> [-n <namespace>] zabbix zabbix-chart-6.0/zabbix-helm-chart
  
  
  

您還可以選擇添加一個命名空間。您必須等到一切都運行正常,使用以下命令來檢查:
  
  
  
watch kubectl get pods
現在,一切都安裝完成,我們準備在Zabbix中設置與集羣關聯的主機。在我們獲取所需的所有信息之前的最後一步是獲取通過使用Helm Chart安裝的服務帳戶創建的令牌。我們將通過運行以下命令獲取創建的服務帳戶的名稱:
  
  
  
kubectl get secret -o jsonpath={.data.token} zabbix service-account | base64 -d

這將獲取爲服務帳戶創建的密鑰,並從中提取令牌,然後通過base64實用程序傳遞給解碼。請務必將該值複製到某個地方,因爲稍後您將需要它。

您還需要Kubernetes API端點。在大多數情況下,您將使用安裝在集羣內部的Zabbix Proxy而不是直接使用Zabbix Server或集羣外部的Zabbix Proxy。如果是這種情況,您可以使用API的服務DNS。
我們應該能夠通過指向https://kubernetes.default.svc.cluster.local:443/api來訪問它。
如果不是這種情況,您可以使用以下命令的輸出:
  
  
  
kubectl cluster-info
現在,讓我們轉到Zabbix UI。我們需要的所有模板都包含在Zabbix 6中。如果由於某種原因找不到它們,可以通過訪問我之前在Zabbix網站上指出的集成頁面下載並導入。

我們將轉到Administration -> Proxies來添加Proxy:
1. 單擊Create Proxy按鈕。因爲這默認是主動Proxy,所以我們只需要指定Proxy名稱。如果您沒有對Helm Chart進行任何更改,則這應該默認爲zabbix-proxy。如果您想以不同的方式命名它,可以在Helm Chart中爲Proxy更改環境變量zbx_hostname。我們現在將其保留爲默認值。輸入此名稱,然後單擊“Add”按鈕。幾分鐘後,Proxy已被看到。
2. 創建一個主機組以放置與Kubernetes相關的主機。例如,我們創建一個名爲Kubernetes的主機組。
3. 轉到配置下的主機頁面,單擊Create Host按鈕。第一個主機將採集與監控Kubernetes節點相關的指標,並且我們將使用Zabbix低級別自動發現來發現節點並創建新主機。
4. 給此主機命名Kubernetes Nodes。我們還將此主機分配給創建的Kubernetes主機組,並關聯模板kubernetes nodes by HTTP。


5. 將“Monitored by proxy”一行更改爲之前創建的Proxy,名爲zabbix-proxy。

6. 單擊Macros選項卡,並選擇“Inherited and host macros”。您應該能夠看到可能設置爲影響集羣中監控內容的所有宏。在這種情況下,我們需要更改前兩個宏。第一個宏{KUBE.API.ENDPOINT.URL}應設置爲Kubernetes API端點。在我們的環境中,設置爲之前提到的內容:default.svc.cluster.local:443/api。接下來,令牌應設置爲從命令行之前檢索到的值。

7. 點擊Add按鈕。幾分鐘後,您應該開始在最新數據頁面上看到數據,以及在主機頁面上表示每個節點的新主機。

現在讓我們創建另一個主機,該主機將代表通過Kubernetes API和kube-state-metrics端點可用的指標。

  1. 再次單擊Create Host按鈕,將此主機命名爲Kubernetes Cluster State,並再次將其添加到Kubernetes組中。

  2. 讓我們再次爲該主機關聯HTTP方式採集數據的模板。同樣,我們將選擇之前創建的Proxy。

  3. 在Macro部分中,將kube.api.url更改爲我們之前使用的相同內容,但這次在末尾省略/api。簡單地:default.svc.cluster.local:443。確保像之前那樣設置令牌。

  4. 假設在安裝Helm Chart時沒有更改任何其他內容,現在我們可以添加該主機。

幾分鐘後,您應該會收到與羣集狀態相關的指標,包括代表每個節點上的kubelet的主機。

下一步是什麼? 現在,您已準備好在Zabbix中開始監控您的Kubernetes集羣!試試看,並在評論中告訴我們您的想法。
歡迎來南京現場交流

延伸閱讀

超詳細Kubernetes集羣搭建Zabbix監控平臺

Kubernetes集羣搭建Zabbix監控平臺

本文分享自微信公衆號 - Zabbix開源社區(china_zabbix)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章