使用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)。
在Zabbix服务器的设置中,将Agent的设置更改为DNS名称为zabbix-agent,然后将连接设置为DNS并进行更新。
如果顺利的话,如下所示,ZBX 将变为绿色。
以上,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地址
在宏选项卡中,设置下面的宏。
<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
点击更新按钮以完成设置。
下面是节点注册后(共8个节点)的输出示例。
当查看单个节点的最新数据时,可以确认在标签值中有一个名为pod的值。
点击其中一个pod,您可以查看以下Pod信息。
完成 Kubernetes 节点监视设置。
监视 Kubernetes 组件
使用HTTP模板来查看Kubernetes集群状态
点击配置 > 创建主机来添加用于集群监视的主机
选择通过HTTP来监视Kubernetes集群状态和其他节点监视设置的Templates。
在Interfaces > Agent中输入Kubernetes主节点的1个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天足够的话则无需进行任何设置。
在发现后,每个组件会自动在主机上创建。
我試著查看 API [節點名稱] 的 Latest Data,發現 TAG VALUES 中顯示了與 Kubernetes API 相關的資料,並且確認了多種資料已被取得。
以上即为设置完成。
动作测试
使用应用程序部署应用一个无效的 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的故障。
如果设置了Slack通知,将会输出以下类似的警报。
接下来,我们将把{$KUBE.API.CERT.EXPIRATION}设置为360,进行证书过期警报测试并发出测试警报。
当反应被触发时(需要一些时间),将会显示以下警报。
设定了Slack通知后,将会输出以下类似的警报。
以上是Kubernetes监控(部分)测试的结束。
SSL/TLS证书监视配置测试
在Zabbix 6.0中,已实现了SSL / TLS证书监视。
有一个名为Zabbix Agent 2的模板可用于网站认证。
因为在这里无法准备到经济实惠的服务器(Let’Encrypt + Web服务器之类的应该可以搭建,但现在没有),所以我们进行了针对Kubernetes API的配置测试(因为已经包含在Kubernetes模板中了,所以不需要对监视Kubernetes模板的集群进行单独的配置)。
在集群设置中,按照以下方式添加模板。
设置宏如下(在这里设置为360天以进行警报测试。默认值是7天,比较短,所以要注意(可以考虑设置为30~60天))。
{$CERT.WEBSITE.PORT}6443443{$CERT.EXPIRY.WARN}3607
如果可以追加,就执行添加操作。
如果TLS/SSL证书是自签名证书,则会被判定为无效,无效的证书将无法启用到期监控,因此应将其关闭(如果TLS/SSL证书是由认证机构颁发的,则不需要执行此步骤)。
点击目标群集的触发器,将Website certificate by Zabbix agent 2: Cert: SSL certificate is invalid的无效化(禁用)。
当设置完成后,将会弹出如下警示的通知。
如果你設定了 Slack 的通知,會顯示以下類似的警告。
数据可以按照以下方式获取
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';
请参考