新版的 zabbix 已支持通过使用官方模板 Docker by Zabbix agent2 template 很容易实现 Docker 容器监控。模板下载链接和配置步骤可以在 Zabbix 集成页面上找到。
1, 导入官方 Docker 模板
因为要使用官方模板 Docker by Zabbix Agent2 。首先,我们需要确保这个模板在 Zabbix 中是可用的。 Zabbix 5.0 、 5.4 和 6.0 中都提供了该模板。如果你在 配置 -> 模板 中没有找到这个模板,很有可能是你在升级完 Zabbix 版本之后,没有将它导入到你的环境里。请记住, Zabbix 在升级过程中不会修改或导入任何模板,因此我们必须手动导入模板。这样的话,只需要从官方 Zabbix git( 或者直接点击这里 ) 下载并通过使用 配置 -> 模板 页面中的 Import 按钮将其导入到 Zabbix 实例中。
2, 安装并配置 Zabbix Agent2
在开始配置主机之前,我们应该先安装 Zabbix agent2 并按照模板指南来配置。可以按照 Zabbix 网站下载页面中的步骤来安装 Zabbix-agent2 。根据需要,可以灵活使用其他代理部署方法 ( 比如从源文件编译安装代理 ) 。
从软件包中安装 Zabbix agent2 只需要几个简单的步骤 :
安装 Zabbix 仓库包 :
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm
安装 Zabbix agent2 软件包 :
dnf install zabbix-agent2
使用 Zabbix server/proxy 地址来设置 Server 参数。
vi /etc/zabbix/zabbix_agent2.conf
Server=192.168.50.49
3,Zabbix Agent2 的特定插件配置
Zabbix agent2 提供了特定的插件配置参数,通常情况下,与特定插件相关的参数都是可选参数。你可以在 Zabbix 文档中找到相关插件配置参数的完整列表。在新版本的 Zabbix agent2 中,特定插件的参数被定义在位于 /etc/zabbix/zabbix_agent2.d/plugins.d/ 下单独的插件配置文件中,而在旧版本中,它们直接在 zabbix_agent2.conf 文件中定义。
对于 Zabbix agent2 Docker plugin(Docker 监控插件 ) ,我们必须配置 Docker 服务的 unix-socket 文件位置。可以通过下面这个插件参数实现 :
默认安装的 Docker 环境套接字位置是正确的——在这种情况下,你可以不用修改配置文件。
在对 Zabbix agent2 配置文件做了必要的修改后,启动并启用代理:
systemctl enable zabbix-agent2 --now
检查 Zabbix agent2 是否运行 :
tail -f /var/log/zabbix/zabbix_agent2.log
在进入 Zabbix 前端页面之前,我想提醒你注意一下 Docker socket 文件权限—— Zabbix 用户需要有访问 Docker Docker socket 文件的权限。应该将 zabbix 用户添加到 docker 组中,来解决以下错误消息。
[Docker] cannot fetch data: Get http://1.28/info: dial unix /var/run/docker.sock: connect: permission denied
ZBX_NOTSUPPORTED: Cannot fetch data.
可以通过执行以下命令将 zabbix 用户添加到 Docker 组 :
usermod -aG docker zabbix
4, 配置 Docker 主机
导入模板之后,我们需要为 Docker 实例创建一个主机。设置主机名并分配主机组——我将把它分配给 Linux servers 主机组。将 Docker by Zabbix agent 2 模板关联到该主机。因为要使用 Zabbix agent2 模板来采集数据,所以需要在这个主机上添加一个代理接口。接口的地址是运行 Docker 容器的机器地址。单击 Add 按钮完成主机配置。
5,Docker by Zabbix agent 2 template
模板包含一系列常规监控项,用于 Docker 实例通用指标监控,例如:可用镜像数量, Docker 架构信息,容器的总数等等。
除此之外,该模板还使用 LLD( 低级别发现 ) 规则采集容器和特定镜像的信息。一旦 Zabbix 发现了你的容器和镜像,这些 LLD( 低级别发现 ) 规则将通过原型为每个容器和镜像创建监控项、触发器和图形。通过这种方法实现容器和特定镜像的指标监控,例如:容器内存、网络信息、容器状态等等。
6, 验证主机和模板配置
我们可以使用 Zabbix get 命令行工具来尝试轮询代理,以验证代理和主机配置是否正确。如果你还没有安装 Zabbix get ,可以在 Zabbix server 或 Zabbix proxy 主机上这样来安装 :
dnf install zabbix-get
现在我们可以使用 zabbix-get 来验证我们的代理是否能够获得与 docker 相关的指标。执行以下命令:
zabbix_get -s docker-host -k docker.info
使用 -s 参数指定你代理主机的 IP 或主机名 , -k 参数定义了我们希望通过 zabbix-get 轮询代理来获取指标的键值。
zabbix_get -s 192.168.50.141 -k docker.info
{"Id":"SJYT:SATE:7XZE:7GEC:XFUD:KZO5:NYFI:L7M5:4RGO:P2KX:QJFD:TAVY","Containers":2,"ContainersRunning":2,"ContainersPaused":0,"ContainersStopped":0,"Images":2,"Driver":"overlay2","MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"KernelMemoryTCP":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":true,"IPv4Forwarding":true,"BridgeNfIptables":true,"BridgeNfIP6tables":true,"Debug":false,"NFd":39,"OomKillDisable":true,"NGoroutines":43,"LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"5.4.17-2136.300.7.el8uek.x86_64","OperatingSystem":"Oracle Linux Server 8.5","OSVersion":"8.5","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","NCPU":1,"MemTotal":1776848896,"DockerRootDir":"/var/lib/docker","Name":"localhost.localdomain","ExperimentalBuild":false,"ServerVersion":"20.10.14","ClusterStore":"","ClusterAdvertise":"","DefaultRuntime":"runc","LiveRestoreEnabled":false,"InitBinary":"docker-init","SecurityOptions":["name=seccomp,profile=default"],"Warnings":null}
此外,我们还可以使用 LLD( 低级别发现 ) 键值— docker.containers.discovery[false] 来检查 LLD( 低级别发现 ) 的结果。
zabbix_get -s 192.168.50.141 -k docker.containers.discovery[false]
[{"{#ID}":"a1ad32f5ee680937806bba62a1aa37909a8a6663d8d3268db01edb1ac66a49e2","{#NAME}":"/apache-server"},{"{#ID}":"120d59f3c8b416aaeeba50378dee7ae1eb89cb7ffc6cc75afdfedb9bc8cae12e","{#NAME}":"/mysql-server"}]
我们可以看到 Zabbix 将发现并监控两个容器— apache-server and mysql-server 。任何代理的 LLD( 低级别发现 ) 规则或监控项都可以用 zabbix get 进行检查
7, 运行中的 Docker 模板
现在我们已经配置了代理和主机,也应用了 Docker 模板,并验证了一切正常,在前端就能够看到已发现的实体对象。
另外,我们的指标数据也应该收集上来了。我们可以通过查看最新数据来验证数据是否采集正常。
最后,有一些额外的选项能够进一步修改模板和 LLD( 低级别 ) 发现的结果。如果你打开主机的宏并选择继承主机宏,你将看到从 Docker 模板继承了 4 个宏。这些宏用来过滤发现的容器和图像镜像。如果你希望根据自己的需求过滤这些被发现的实体,可以灵活修改这些值。
注意,在模板上容器发现监控项有一个 false 的参数 :
docker.containers.discovery[false] – 只发现正在运行的容器
docker.containers.discovery[true] – 发现所有容器 , 不管是什么状态。
至此,我们成功地导入了模板,安装并配置了 Zabbix agent2 ,创建了一个主机,并应用了 Docker 模板。最终实现了在 Zabbix 中监控 Docker 环境
原文链接 https://mp.weixin.qq.com/s/0EJOJgEdojX0t9e8FgjM-Q