工业制造其它Zabbix

zabbix对容器和容器云如何做好监控?

zabbix对容器和容器云如何做好监控

参与6

2同行回答

Zabbix_小ZZabbix_小ZZabbix大中华区培训师上海宏时数据系统有限公司
Zabbix 6.0版本及后续版本原生支持对容器和云平台的监控模板显示全部

Zabbix 6.0版本及后续版本原生支持对容器和云平台的监控模板

收起
IT咨询服务 · 2022-10-17
浏览788
lych370lych370联盟成员系统运维工程师个人
新版的 zabbix 已支持通过使用官方模板 Docker by Zabbix agent2 template 很容易实现 Docker 容器监控。模板下载链接和配置步骤可以在 Zabbix 集成页面上找到。1, 导入官方 Docker 模板因为要使用官方模板 Docker by Zabbix Agent2 。首先,我们需要确保这个模板在 Zabbi...显示全部

新版的 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

Option: Server

List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.

Incoming connections will be accepted only from the hosts listed here.

If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally

and '::/0' will allow any IPv4 or IPv6 address.

'0.0.0.0/0' can be used to allow any IPv4 address.

Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com

Mandatory: yes, if StartAgents is not explicitly set to 0

Default:

Server=

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 文件位置。可以通过下面这个插件参数实现 :

Option: Plugins.Docker.Endpoint

Docker API endpoint.

Mandatory: no

Default: unix:///var/run/docker.sock

Plugins.Docker.Endpoint=unix:///var/run/docker.sock

默认安装的 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

收起
银行 · 2022-09-29
浏览869

提问者

jiaoyutwt
系统运维工程师山西省运城市盐湖区

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2022-09-27
  • 关注会员:4 人
  • 问题浏览:1431
  • 最近回答:2022-10-17
  • X社区推广