如何使用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源创计划”,欢迎正在阅读的你也加入,一起分享。

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