使用docker-compose构建Zabbix 6.0并尝试使用Kubernetes进行监视

首先()

Zabbix 6.0 于2022年2月14日发布。
由于实施了 Kubernetes 监控和 TLS/SSL 证书本地监控功能,因此记录了尝试的内容。

记载的内容

    • Zabbix 6.0 install (docker-compose)

 

    • Kubernetes クラスタへ Zabbix-Agent 設定 (Zabbix helm)

 

    • Zabbix 6.0 での Kubernetes 向け設定テスト (デフォルトにある 2テンプレート適用例)

 

    Zabbix 6.0 での SSL/TLS 証明書監視設定テスト

执行环境

Docker サーバ (Zabbix Docker インストール先)

CentOS Linux release 7.9.2009 (Core)
2vCPU / 4GB Mem
docker : docker-ce 20.10.12

Kubernetes Cluster (監視試験対象用)

kubernetes version : v1.21.6
3 master node, 3 worker node, 2 calico node
kubespray (v2.17.1) での構築クラスタ (詳細)

在中国,原生地将以下内容改写成中文,只需提供一种选择:

安装 Zabbix 6.0(使用 docker-compose)

使用 zabbix-docker 在 Docker 服务器上构建 Zabbix 6.0。

前提:在已经安装了docker-ce的Linux服务器上进行实施。

请使用以下命令下载所需资料。

git clone https://github.com/zabbix/zabbix-docker.git -b 6.0.0
cd zabbix-docker/
curl -L https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` -o ./docker-compose
chmod +x docker-compose

由于进行Kubernetes监视时,缓存大小不足导致服务器崩溃(请增加CacheSize配置参数并记录日志,以便zabbix-server停止),因此请提前提高每个CACHESIZE(所需大小根据环境而定)。

cp -p env_vars/.env_srv env_vars/.env_srv.org
vi env_vars/.env_srv
- # ZBX_CACHESIZE=8M
- # ZBX_HISTORYCACHESIZE=16M
- # ZBX_HISTORYINDEXCACHESIZE=4M
- # ZBX_TRENDCACHESIZE=4M
- # ZBX_TRENDFUNCTIONCACHESIZE=4M
- # ZBX_VALUECACHESIZE=8M
+ ZBX_CACHESIZE=128M
+ ZBX_HISTORYCACHESIZE=128M
+ ZBX_HISTORYINDEXCACHESIZE=128M
+ ZBX_TRENDCACHESIZE=128M
+ ZBX_TRENDFUNCTIONCACHESIZE=128M
+ ZBX_VALUECACHESIZE=128M

使用docker-compose(以下命令)启动

./docker-compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml --profile=full up -d

※由于CentOS版本没有更新,在2022年2月19日进行实施时,即使指定docker-compose_v3_centos_mysql_latest.yaml,也无法找到镜像并启动。

※截至目前 (2022.02.20),mysql版本似乎无法正常运行。

如果不加上–profile=full(或all),则无法运行zabbix-agent,所以请务必加上(过滤错误的问题?)

以下是构建后的状态。 de

# ./docker-compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml ps
NAME                                     COMMAND                  SERVICE                  STATUS              PORTS
zabbix-docker-db_data_pgsql-1            "sh"                     db_data_pgsql            exited (0)          
zabbix-docker-postgres-server-1          "docker-entrypoint.s…"   postgres-server          running             
zabbix-docker-zabbix-agent-1             "/usr/bin/tini -- /u…"   zabbix-agent             running             
zabbix-docker-zabbix-java-gateway-1      "docker-entrypoint.s…"   zabbix-java-gateway      running             
zabbix-docker-zabbix-server-1            "/usr/bin/tini -- /u…"   zabbix-server            running             0.0.0.0:10051->10051/tcp
zabbix-docker-zabbix-snmptraps-1         "/usr/sbin/snmptrapd…"   zabbix-snmptraps         running             0.0.0.0:162->1162/udp
zabbix-docker-zabbix-web-nginx-pgsql-1   "docker-entrypoint.sh"   zabbix-web-nginx-pgsql   running (healthy)   0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp
zabbix-docker-zabbix-web-service-1       "docker-entrypoint.s…"   zabbix-web-service       running  

启动后,请使用浏览器访问(用户名/密码为默认的Admin/Zabbix)。

スクリーンショット 2022-02-19 12.14.48.png

在Zabbix服务器的设置中,将Agent的设置更改为DNS名称为zabbix-agent,然后将连接设置为DNS并进行更新。

スクリーンショット 2022-02-20 15.53.00.png

如果顺利的话,如下所示,ZBX 将变为绿色。

スクリーンショット 2022-02-20 15.55.21.png

以上,Zabbix 6.0 環境準備已經完成。

如果你方便的话,可以参考我们在Zabbix 5.0版本中所提及的其他设置和与Slack的集成(已确认可实施相似操作)。

Zabbix的Helm图表

为了监控Kubernetes,安装Zabbix工具Kubernetes Helm到目标集群中。

先决条件

Kubernetes Helm的先决条件如下所示。

    • Kubernetes cluster 1.18+

 

    • Helm 3.0+

 

    • Zabbix server 6.0+

 

    kube-state-metrics 2.13.2+

这次是在 Kubernetes v1.21.6 的本地环境下进行的。

安装 Helm 3(请参考以下命令)。

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

在Kubernetes中部署Zabbix。

安装Kubernetes Helm(几乎与网站上的REDEME步骤相同)。

cd ~
git clone https://git.zabbix.com/scm/zt/kubernetes-helm.git
cd kubernetes-helm
helm show values . > ./zabbix_values.yaml
kubectl get namespaces

创建要安装的命名空间(在这里,将其设置为示例站点的监控,但可以进行更改)。

kubectl create namespace monitoring
helm install zabbix . --dependency-update -f ./zabbix_values.yaml -n monitoring

以下是输出示例

$ helm install zabbix . --dependency-update -f ./zabbix_values.yaml -n monitoring
W0219 20:41:39.032102 1509337 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
W0219 20:41:39.110818 1509337 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
NAME: zabbix
LAST DEPLOYED: Sat Feb 19 20:41:38 2022
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing zabbix-helm-chrt.

Your release is named zabbix.
Zabbix agent installed:  "zabbix/zabbix-agent2:alpine-trunk"
Zabbix proxy installed:  "zabbix/zabbix-proxy-sqlite3:alpine-trunk"

Annotations:
app.kubernetes.io/name: zabbix-zabbix-helm-chrt
helm.sh/chart: zabbix-helm-chrt-0.0.1
app.kubernetes.io/version: "trunk"
app.kubernetes.io/managed-by: Helm


Service account created: 
    zabbix-service-account

To learn more about the release, try:

  $ helm status zabbix
  $ helm get all zabbix

安装已完成

如果集群中有8个节点,Pod清单将如下所示。

$ kubectl get ds -n monitoring
NAME           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
zabbix-agent   8         8         8       8            8           kubernetes.io/os=linux   2d20h
$ kubectl get deploy -n monitoring
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
zabbix-kube-state-metrics   1/1     1            1           2d20h
zabbix-proxy                1/1     1            1           2d20h
$ kubectl get po -n monitoring
NAME                                       READY   STATUS    RESTARTS   AGE
zabbix-agent-5pngj                         1/1     Running   1          2d20h
zabbix-agent-g6fp8                         1/1     Running   1          2d20h
zabbix-agent-nwwkv                         1/1     Running   1          2d20h
zabbix-agent-rb8j7                         1/1     Running   1          2d20h
zabbix-agent-rgknp                         1/1     Running   1          2d20h
zabbix-agent-tnknw                         1/1     Running   1          2d20h
zabbix-agent-v59n8                         1/1     Running   1          2d20h
zabbix-agent-zlxp9                         1/1     Running   1          2d20h
zabbix-kube-state-metrics-78868498-7ddd4   1/1     Running   2          2d20h
zabbix-proxy-77c577b6d7-zn27x              1/1     Running   1          2d20h
$ kubectl get svc -n monitoring
NAME                            TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)           AGE
zabbix-kube-state-metrics       ClusterIP      10.233.60.196   <none>            8080/TCP          2d20h
zabbix-zabbix-helm-chrt-agent   ClusterIP      10.233.29.90    <none>            10050/TCP         2d20h
zabbix-zabbix-helm-chrt-proxy   ClusterIP      10.233.62.132   <none>            10051:30646/TCP   2d20h

删除方式

如果你想要删除,请使用以下命令进行完全删除(除了命名空间之外)

helm delete zabbix -n monitoring

使用两个默认模板进行针对Kubernetes的配置测试。

有两个模板可用于监视Kubernetes节点(通过HTTP)和监视Kubernetes集群状态(通过HTTP),请执行。
※除此之外,还有其他适用于Kubernetes的模板,将在发现集群监视模板后在创建的主机上使用。

Kubernetes 节点监视.

使用HTTP模板的Kubernetes节点

点击配置>创建主机,以添加集群每个节点的主机 (此处仅列出一个节点)。

在Templates中选择通过HTTP监控Kubernetes节点和其他节点监视设置
在Interfaces > Agent中输入每个节点的IP地址

スクリーンショット 2022-02-23 12.27.57.png

在宏选项卡中,设置下面的宏。

MacroValueDefault{$KUBE.API.ENDPOINT}<scheme>://<host>:<port>/api (ここでは https://192.168.129.21:6443/api)
{$KUBE.API.TOKEN}secret zabbix-service-account 内容結果(下記コマンド)“

在使用Helm安装时,可以从Zabbix创建的secret中获取$KUBE.API.TOKEN。

kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d
スクリーンショット 2022-02-23 12.28.09.png

点击更新按钮以完成设置。

下面是节点注册后(共8个节点)的输出示例。

スクリーンショット 2022-02-23 14.51.24.png

当查看单个节点的最新数据时,可以确认在标签值中有一个名为pod的值。

スクリーンショット 2022-02-23 17.10.08.png

点击其中一个pod,您可以查看以下Pod信息。

スクリーンショット 2022-02-23 17.12.30.png

完成 Kubernetes 节点监视设置。

监视 Kubernetes 组件

使用HTTP模板来查看Kubernetes集群状态

点击配置 > 创建主机来添加用于集群监视的主机

选择通过HTTP来监视Kubernetes集群状态和其他节点监视设置的Templates。
在Interfaces > Agent中输入Kubernetes主节点的1个IP地址。

スクリーンショット 2022-02-23 14.54.32.png

请将宏的值设置如下

MacroValueDefault{$KUBE.API.HOST}API の IP (ここでは 192.168.129.21)
{$KUBE.API.TOKEN}secret zabbix-service-account 内容結果(ノード登録時と同じ)“{$KUBE.API.CERT.EXPIRATION} *160″7″

1 : {$KUBE.API.CERT.EXPIRATION} 是 Kubernetes API 服务器的 HTTP 模板宏, 默认情况下会在证书过期前一周(7天)发送通知,但由于我希望提前得到通知,所以将其设定为两个月前(60天)。如果7天足够的话则无需进行任何设置。

スクリーンショット 2022-02-23 14.56.16.png

在发现后,每个组件会自动在主机上创建。

スクリーンショット 2022-02-23 14.59.15.png

我試著查看 API [節點名稱] 的 Latest Data,發現 TAG VALUES 中顯示了與 Kubernetes API 相關的資料,並且確認了多種資料已被取得。

スクリーンショット 2022-02-23 17.21.07.png

以上即为设置完成。

动作测试

使用应用程序部署应用一个无效的 Image 并测试是否会触发 CrashLoopBackOff 并产生警报。

% kubectl get po -o wide
NAME                                READY   STATUS             RESTARTS   AGE     IP             NODE         NOMINATED NODE   READINESS GATES
nginx-deployment-85f6b894d5-2pl5v   0/1     ImagePullBackOff   0          8m35s   10.233.94.16   k8worker02   <none>           <none>
nginx-deployment-85f6b894d5-7cmr6   0/1     ImagePullBackOff   0          8m35s   10.233.94.14   k8worker02   <none>           <none>
nginx-deployment-85f6b894d5-kxjnq   0/1     ImagePullBackOff   0          8m35s   10.233.75.13   k8worker01   <none>           <none>

过了一段时间(超过10分钟),如下警报输出,确认可以检测到Pod的故障。

スクリーンショット 2022-02-23 14.20.36.png

如果设置了Slack通知,将会输出以下类似的警报。

スクリーンショット 2022-02-23 14.22.44.png

接下来,我们将把{$KUBE.API.CERT.EXPIRATION}设置为360,进行证书过期警报测试并发出测试警报。

スクリーンショット 2022-02-23 16.10.05.png

当反应被触发时(需要一些时间),将会显示以下警报。

スクリーンショット 2022-02-23 16.07.35.png

设定了Slack通知后,将会输出以下类似的警报。

スクリーンショット 2022-02-23 16.08.52.png

以上是Kubernetes监控(部分)测试的结束。

SSL/TLS证书监视配置测试

在Zabbix 6.0中,已实现了SSL / TLS证书监视。

有一个名为Zabbix Agent 2的模板可用于网站认证。

因为在这里无法准备到经济实惠的服务器(Let’Encrypt + Web服务器之类的应该可以搭建,但现在没有),所以我们进行了针对Kubernetes API的配置测试(因为已经包含在Kubernetes模板中了,所以不需要对监视Kubernetes模板的集群进行单独的配置)。

在集群设置中,按照以下方式添加模板。

スクリーンショット 2022-02-23 11.47.20.png

设置宏如下(在这里设置为360天以进行警报测试。默认值是7天,比较短,所以要注意(可以考虑设置为30~60天))。

MacroValueDefault{$CERT.WEBSITE.HOSTNAME}Kubernetes API の IP(この環境では 192.168.129.21)
{$CERT.WEBSITE.PORT}6443443{$CERT.EXPIRY.WARN}3607
スクリーンショット 2022-02-23 16.37.11.png

如果可以追加,就执行添加操作。

スクリーンショット 2022-02-23 16.37.01.png

如果TLS/SSL证书是自签名证书,则会被判定为无效,无效的证书将无法启用到期监控,因此应将其关闭(如果TLS/SSL证书是由认证机构颁发的,则不需要执行此步骤)。

点击目标群集的触发器,将Website certificate by Zabbix agent 2: Cert: SSL certificate is invalid的无效化(禁用)。

スクリーンショット 2022-02-23 16.48.03.png

当设置完成后,将会弹出如下警示的通知。

スクリーンショット 2022-02-23 16.51.00.png

如果你設定了 Slack 的通知,會顯示以下類似的警告。

スクリーンショット 2022-02-23 16.51.33.png

数据可以按照以下方式获取

スクリーンショット 2022-02-23 16.52.17.png

TLS/SSL证书监视的测试已结束。

最后

用docker-compose搭建Zabbix 6.0,并进行功能测试成功。

由于没有充分测试Kubernetes的监视功能,因此需要进行额外验证。

除了已经设置好的触发器之外,可能还需要考虑根据环境添加监视模板等。

2022年6月5日 追記)密码重置

如果您想重置管理员密码,只需按照以下步骤进入DB服务器并设置管理员密码即可。

# ./docker-compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml exec postgres-server bash
bash-5.1# psql -U zabbix -d zabbix
psql (13.6)
Type "help" for help.

zabbix=# update users set passwd=md5(‘リセットするパスワード’) where username='Admin';

请参考

 

广告
将在 10 秒后关闭
bannerAds