zabbix容器化安装及监控docker应用

一、zabbix agent2 介绍

从Zabbix 4.4之后,官方推出了Zabbix Agent 2,意味着zabbix 不在只是物理机监控的代名词,现在你可以使用Go为Zabbix编写插件,来监控各类应用及微服务。
以下为官方对zabbix agent2的介绍:

Zabbix agent2是新一代Zabbix代理,可以代替Zabbix代理使用。Zabbix agent2已开发为:

  • 减少TCP连接数
  • 具有更大的支票并发
  • 易于通过插件扩展。插件应该能够:
  • 提供仅由几行简单代码组成的琐碎检查
  • 提供由长期运行的脚本和独立的数据收集组成的复杂检查,并定期发送回数据
  • 替代Zabbix代理(因为它支持所有以前的功能)
  • agent2用Go编写(重用了Zabbix代理的一些C代码)。构建Zabbix agent2需要配置的Go版本1.13+环境。

本文主要介绍如何通过zabbix agent2 来监控你的docker应用。


二、zabbix 5.x 安装

1.安装docker 版本不限制,过程参考网络不再赘述。
2.容器化方式安装 zabbix server
  • 安装华为zabbix 5.2 yum源
rpm -ivh //repo.huaweicloud.com/zabbix/zabbix/5.2/rhel/7/x86_64/zabbix-release-5.2-1.el7.noarch.rpm
  • 创建容器网络
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
  • 创建数据库容器
docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --network=zabbix-net \
      -d mysql:8.0 \
      --restart unless-stopped \
      --character-set-server=utf8 --collation-server=utf8_bin \
      --default-authentication-plugin=mysql_native_password
  • 创建 zabbix-java-getway 容器
 docker run --name zabbix-java-gateway -t \
      --network=zabbix-net \
      --restart unless-stopped \
      -d zabbix/zabbix-java-gateway:alpine-5.2-latest
  • 创建 zabbix-server-mysql 容器
docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --network=zabbix-net \
      -p 10051:10051 \
      --restart unless-stopped \
      -d zabbix/zabbix-server-mysql:alpine-5.2-latest
      
# 暴露 10051/TCP端口
  • 创建web前端容器
docker run --name zabbix-web-nginx-mysql -t \
      -e ZBX_SERVER_HOST="zabbix-server-mysql" \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --network=zabbix-net \
      -p 80:8080 \
      --restart unless-stopped \
      -d zabbix/zabbix-web-nginx-mysql:alpine-5.2-latest
#暴露 80端口
3. 登录server ip地址验证安装
# docker ps  四个容器已正常启动
[[email protected] ~]# docker ps 
CONTAINER ID        IMAGE                                             COMMAND                  CREATED             STATUS              PORTS                            NAMES
5dc24c3d05e5        mysql:8.0                                         "docker-entrypoint..."   3 weeks ago         Up 3 weeks          3306/tcp, 33060/tcp              mysql-server
12aa15d78de2        zabbix/zabbix-web-nginx-mysql:alpine-5.0-latest   "docker-entrypoint.sh"   3 weeks ago         Up 3 weeks          8443/tcp, 0.0.0.0:80->8080/tcp   zabbix-web-nginx-mysql
0deae5fc6fc0        zabbix/zabbix-server-mysql:alpine-5.0-latest      "/sbin/tini -- /us..."   3 weeks ago         Up 3 weeks          0.0.0.0:10051->10051/tcp         zabbix-server-mysql
a417d9958ad2        zabbix/zabbix-java-gateway:alpine-5.0-latest      "docker-entrypoint..."   3 weeks ago         Up 3 weeks          10052/tcp                        zabbix-java-gateway

安装方式可参考官方文档:容器化方式安装zabbix server

三、zabbix监控docker应用

1.安装zabbix-agent2
yum install zabbix-aget2

#启动agent2
[[email protected] ~]# ps -ef|grep agent2
zabbix   23184     1  0 Mar30 ?        00:12:40 /usr/sbin/zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf
root     30458 30414  0 14:33 pts/6    00:00:00 grep --color=auto agent2
2.将docker模板链接到zabbix-server主机,并更新。


docker模板监控项如下

3.给/var/run/docker.sock 所有用户可读权限(zabbix用户)

chmod 666 /var/run/docker.sock

4.docker中的应用列表如下

image-20210426134409255

可以看到docker模板已经自动发现了docker中的应用,如下所示

image-20210426134529748

以监控mysql应用为例,其部分监控项如下

5. 添加docker 仪表盘

在仪表盘中添加图形,选择需要展示的监控项

image-20210426153844151

多个图形构成的mysql docker应用的仪表盘


后续可添加告警相关内容,本文不做展开,小伙伴们可自行探索哈。 有不理解的地方可在评论区指出。


欢迎收藏、点赞、提问。关注顶级饮水机管理员,除了管烧热水,有时还做点别的。