使用docker搭建zabbix

作者: bboysoul | 来源:发表于2018-04-22 20:30 被阅读77次

    概述

    再次之前我们要知道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的两种检查方式,一个是主动模式,一个是被动模式,如果是监控主机最好使用被动模式

    欢迎关注Bboysoul的博客www.bboysoul.com
    Have Fun

    相关文章

      网友评论

      • IT人故事会:老铁下次注意格式啊,不太清晰,给点建议对于新手需要的是注释啊

      本文标题:使用docker搭建zabbix

      本文链接:https://www.haomeiwen.com/subject/deotlftx.html