使用docker搭建zabbix

概述

再次以前咱們要知道zabbix的主要架構是怎樣的,zabbix有一個server端是最主要的,主要是用來收集agent傳來的數據而後進行處理等一系列操做,固然有server端確定有agent端用來收集數據的,數據爲了能夠圖形化展現給人們看那麼就要有一個web端來展現數據和方便人們用來配置zabbix,接着單單一個server端收集數據可能會形成server端的壓力過大,因此咱們還須要有一個proxy端代替server端去接收數據,來減輕server端的壓力,最後一個是數據庫,咱們要把收集起來的數據存到數據庫中,這裏我選擇的是mysql,總的zabbix分爲下面幾個模塊php

  • zabbix-server
  • zabbix-web
  • zabbix-proxy
  • zabbix-agent
  • mysql

知道了這些以後咱們就要使用docker鏡像去組建這麼一個架構,由於我是隻用來服務器的,因此proxy就不須要了,選用的zabbix是4.0版本,最後咱們須要下面幾個docker鏡像mysql

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.6linux

注:上面的全部鏡像都是不支持arm架構的,因此若是你要用來監控樹莓派,只能在樹莓派上去編譯agentnginx

實驗資源概述

首先我使用的就是一臺阿里雲的服務器是Ubuntu系統安裝了dockerweb

把數據庫先跑起來

由於數據庫是最最基礎的,首先得讓它跑起來才能夠,否則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密碼,最後就是要使用的鏡像的名字sql

把服務端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端口要打開docker

把服務端的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

相關文章
相關標籤/搜索