概述再次之前我们要知道zabbix的主要架构是怎样的,zabbix有一个server端是最主要的,主要是用来收集agent传来的数据然后进行处理等一系列操作,当然有server端肯定有agent端用来收集数据的,数据为了可以图形化展示给人们看那么就要有一个web端来展示数据和方便人们用来配置zabbix,接着单单一个server端收集数据可能会造成server端的压力过大,所以我们还需要有一个proxy端代替server端去接收数据,来减轻server端的压力,最后一个是数据库,我们要把收集起来的数据存到数据库中,这里我选择的是mysql,总的zabbix分为下面几个模块 - zabbix-server
- zabbix-web
- zabbix-proxy
- zabbix-agent
- mysql
知道了这些之后我们就要使用docker镜像去组建这么一个架构,因为我是只用来服务器的,所以proxy就不需要了,选用的zabbix是4.0版本,最后我们需要下面几个docker镜像 docker pull zabbix/zabbix-server-mysql:alpine-trunk docker pull zabbix/zabbix-web-nginx-mysql:alpine-trunk docker pull zabbix/zabbix-agent:alpine-trunk docker pull mysql:5.6 注:上面的所有镜像都是不支持arm架构的,所以如果你要用来监控树莓派,只能在树莓派上去编译agent
实验资源概述首先我使用的就是一台阿里云的服务器是Ubuntu系统安装了docker
把数据库先跑起来因为数据库是最最基础的,首先得让它跑起来才可以,不然zabbix的数据都放在哪里?首先在本地创建一个zabbix文件夹,以后容器中的所有数据都保存在里面 mkdir zabbix 之后输入下面命令运行容器 docker run --name zabbix-mysql -d -v /root/zabbix/mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="woyaoxuehuilinux" mysql:5.6 解释一下上面参数的意思--name就是指定容器的名字,-d就是把容器放在后台运行,-v就是把容器中的/var/lib/mysql目录和宿主机中的/root/zabbix/mysql-data目录做映射,这样容器删除了文件也不会丢失,-e后面指定的环境变量就是设置mysql密码,最后就是要使用的镜像的名字
把服务端zabbix-server跑起来之后就是zabbix中比较核心的server端了,输入下面命令运行它 docker run --name zabbix-server -p10051:10051 --link zabbix-mysql:mysql -v /root/zabbix/zabbix-server:/var/lib/zabbix -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_USER="root" -e MYSQL_PASSWORD="woyaoxuehuilinux" -d zabbix/zabbix-server-mysql:alpine-trunk 解释一下参数--name就是给容器取个名字,-p就是把宿主机的10051端口和容器中的10051端口映射起来,--link就是把zabbix容器和mysql容器进行关联,防止ip地址变了连接不上,-v就是把容器中的zabbix-server的主目录和宿主机中的/root/zabbix/zabbix-server做映射,防止丢失非结构化的数据,-e参数就是指定数据库的环境变量,比如数据库的地址,因为我们前面做过和mysql容器的关联,所以只要写MySQL的容器名字就好了,之后就是mysql的账号和密码,-d表示让容器跑在后台,最后就是要使用的镜像的名字 最后不要忘记了,因为用的是阿里云主机对应安全组的10051端口要打开
把服务端的zabbix-web跑起来server起来了,接下来就是web端了,输入下面的命令把web端跑起来 docker run --name zabbix-web --link zabbix-mysql:mysql -p80:80 -p443:443 --link zabbix-server:zabbix-server -v /usr/share/zabbix -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_USER="root" -e MYSQL_PASSWORD="woyaoxuehuilinux" -e ZBX_SERVER_HOST="zabbix-server" -e PHP_TZ="Asia/Shanghai" -d zabbix/zabbix-web-nginx-mysql:alpine-trunk 这里我碰到过一个问题,就是我使用-v /zabbix-web:/use/share/zabbix 方式挂载zabbixweb的站点目录的时候,docker自动把容器中的目录/usr/share/zabbix内容全部删除了,我不知道这个是不是镜像的问题,所以导致最后/zabbix-web目录里面也是没有任何东西,但是我使用docker managed volume方式时候,就可以成功搞定,所以我为了解决这个问题就采用了下面的方式,当我使用docker managed volume方式挂载好之后,查看对应的volume目录 docker inspect zabbix-web |grep Source - zabbix docker inspect zabbix-web |grep Source
- "Source": "/var/lib/docker/volumes/2b327a18746700dcfb813b46aefeaddb9e04a526ca575d6a0a68d7097b55b72b/_data",
- "Source": "/var/lib/docker/volumes/57e343972c4eaf4875c5d830fe14d45bd97dbcbc69a105b183617f74916b07aa/_data",
复制代码
接着把volume中的站点目录复制出来 cp -rf /var/lib/docker/volumes/2b327a18746700dcfb813b46aefeaddb9e04a526ca575d6a0a68d7097b55b72b/_data/ /root/zabbix/zabbix-web 之后删除容器 docker stop zabbix-web docker rm zabbix-web 删除保留的volume docker volume prune 之后重新生成容器挂载 docker run --name zabbix-web --link zabbix-mysql:mysql -p80:80 -p443:443 --link zabbix-server:zabbix-server -v /root/zabbix/zabbix-web/:/usr/share/zabbix -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_USER="root" -e MYSQL_PASSWORD="woyaoxuehuilinux" -e ZBX_SERVER_HOST="zabbix-server" -e PHP_TZ="Asia/Shanghai" -d zabbix/zabbix-web-nginx-mysql:alpine-trunk 接着就搞定了问题 我解释一下参数把--name就是给容器指定名字,--link就是把zabbix-web和数据库还有 zabbix-server连接起来,-p就是端口映射,-v就是挂载主机目录到容器/usr/share/zabbix目录中去,-e后面就是指定数据库主机账号还有密码,还有就是指定zabbix-server的主机还有php时区,-d就是把容器放到后台去跑 之后我们访问zabbix的web界面,浏览器输入服务器ip就可以 默认账号Admin密码zabbix
在服务端把zabbix-agent跑起来
最后就是跑agent了 这个比较简单,运行下面命令 docker run --name zabbix-agent --link zabbix-server:zabbix-server -e ZBX_HOSTNAME="Zabbix server" -e ZBX_SERVER_HOST="zabbix-server" -d zabbix/zabbix-agent:alpine-trunk 之后重新运行一下zabbix-server docker run --name zabbix-server -p10051:10051 --link zabbix-mysql:mysql --link zabbix-agent:zabbix-agent -v /root/zabbix/zabbix-server:/var/lib/zabbix -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_USER="root" -e MYSQL_PASSWORD="woyaoxuehuilinux" -d zabbix/zabbix-server-mysql:alpine-trunk 我先说明一下为什么要重新运行zabbix-server,因为我添加了--link zabbix-mysql:mysql,这个是为了避免zabbix-agent容器更换ip之后zabbix-server就找不到zabbix-agent的地址了,而我们配置这个agent的时候,在web界面点配置->主机->Zabbix server->agent代理程序的接口这里DNS名称输入zabbix-agent就好了,连接到这里当然要选择DNS地址端口是10050,上面参数命令就不解释了,太简单易懂了 如果发现连接不上的情况,多看看容器的日志,还有就是zabbix的两种检查方式,一个是主动模式,一个是被动模式,如果是监控主机最好使用被动模式
|