Zabbix 搭建文档
概述
计划使用 docker 搭建 Zabbix 监控系统。
安装 Docker
参考 Ubuntu、Debian 系列安装 Docker
部署 Mariadb-Server
一、建立数据库本地目录
| 12
 
 | mkdir -p ~/zabbix/database/mysqlmkdir ~/zabbix/database/conf.d
 
 | 
二、运行 Mariadb-Server Docker
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | docker run --name zabbix-db \--restart=always \
 -e MYSQL_ROOT_PASSWORD='mysql_root_password' \
 -e MYSQL_DATABASE=zabbix \
 -e MYSQL_USER=zabbix \
 -e MYSQL_PASSWORD=zabbix \
 -v /home/nero/zabbix/database/mysql:/var/lib/mysql \
 -v /home/nero/zabbix/database/conf.d:/etc/mysql/conf.d \
 -d mariadb
 
 | 
这里会产生一个问题,由于默认的 mariadb 是使用latin1字符集来创建数据库,这时候我们在 Zabbix 录入中文字符的时候会导致出错,故此需要进入 mariadb-docker 内删除新建好的zabbix数据库,再使用utf8新建数据库。
| 12
 3
 
 | $ docker exec -it zabbix-db mysql -uroot -p'mysql_root_password'MariaDB [(none)]> drop database zabbix;
 MariaDB [(none)]> create database zabbix default charset utf8;
 
 | 
此时,数据库已经以 utf8 新建好了。
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | MariaDB [(none)]> show create database zabbix;+----------+-----------------------------------------------------------------+
 | Database | Create Database                                                 |
 +----------+-----------------------------------------------------------------+
 | zabbix   | CREATE DATABASE `zabbix` /*!40100 DEFAULT CHARACTER SET utf8 */ |
 +----------+-----------------------------------------------------------------+
 1 row in set (0.01 sec)
 
 MariaDB [(none)]>quit
 
 | 
2017年07月15日更新
怪自己看文档不仔细,今天扒 zabbix 的部署文档发现,我应该运行 mariadb 容器的时候就要定义数据库字符编码。
Zabbix Documentation 3.2-5 Installation from containers
注意,这里我是使用 mariadb,和 zabbix 官方文档使用是 mysql 的 docker,参数会有所不同。
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | docker run --name zabbix-db \--restart=always \
 -e MYSQL_ROOT_PASSWORD='mysql_root_password' \
 -e MYSQL_DATABASE=zabbix \
 -e MYSQL_USER=zabbix \
 -e MYSQL_PASSWORD=zabbix \
 -v /home/nero/zabbix/database/mysql:/var/lib/mysql \
 -v /home/nero/zabbix/database/conf.d:/etc/mysql/conf.d \
 -d mariadb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
 
 | 
部署 Zabbix-Server-MySQL Docker
| 12
 3
 4
 5
 6
 7
 
 | docker run --name zabbix-server \--link zabbix-db:mysql-server \
 --restart=always \
 -e MYSQL_USER=zabbix \
 -e MYSQL_PASSWORD=zabbix \
 -p 10051:10051 \
 -d zabbix/zabbix-server-mysql
 
 | 
部署 Zabbix-WEB-nginx-MySQL Docerk
由于 Zabbix 图形字体中文显示会产生乱码,故此需要将中文字体放入 Zabbix 的 WEB 目录中,并修改一个 php 文件才可以修正中文乱码问题。
一、下载官方 zabbix-web-nginx-mysql 镜像
docker pull zabbix-web-nginx-mysql
二、上传中文字体 simhei.ttf(本例使用黑体字体)
| 12
 
 | mkdir ~/zabbix-web-docker-cnrz
 
 | 
三、编写 Dockerfile 文件
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | cat <<EOF | tee ~/zabbix-web-docker-cn/DockerfileFROM zabbix/zabbix-web-nginx-mysql
 COPY simhei.ttf /usr/share/zabbix/fonts
 EXPOSE 80/TCP 443/TCP
 WORKDIR /usr/share/zabbix
 RUN sed -i 's/graphfont/simhei/g' ./include/defines.inc.php
 VOLUME ["/etc/ssl/nginx"]
 CMD ["/run_zabbix_component.sh", "frontend", "mysql", "nginx"]
 EOF
 
 | 
四、构建镜像
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 | $ docker build -t nero/zabbix-web-nginx-mysql .
 Sending build context to Docker daemon  9.755MB
 Step 1/7 : FROM zabbix/zabbix-web-nginx-mysql
 ---- 256dc87663d0
 Step 2/7 : COPY simhei.ttf /usr/share/zabbix/fonts
 ---- 5743f1ab270b
 Removing intermediate container 78381e68fbbe
 Step 3/7 : EXPOSE 80/TCP 443/TCP
 ---- Running in 0c6786e828fc
 ---- d24d892858a6
 Removing intermediate container 0c6786e828fc
 Step 4/7 : WORKDIR /usr/share/zabbix
 ---- dc7c79f00b1c
 Removing intermediate container e6975c59dbc8
 Step 5/7 : RUN sed -i 's/graphfont/simhei/g' ./include/defines.inc.php
 ---- Running in 27e5405d3ca7
 ---- 6ca4c53d4b51
 Removing intermediate container 27e5405d3ca7
 Step 6/7 : VOLUME /etc/ssl/nginx
 ---- Running in 8f28060ed68e
 ---- 2b4307bc9c9a
 Removing intermediate container 8f28060ed68e
 Step 7/7 : CMD /run_zabbix_component.sh frontend mysql nginx
 ---- Running in 184feb09f237
 ---- b6da55ae29b6
 Removing intermediate container 184feb09f237
 Successfully built b6da55ae29b6
 Successfully tagged nero/zabbix-web-nginx-mysql:latest
 
 | 
五、运行镜像
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | docker run --name zabbix-web \--link zabbix-db:mysql-server \
 --link zabbix-server:zabbix-server \
 -e MYSQL_USER=zabbix \
 -e MYSQL_PASSWORD=zabbix \
 -e PHP_TZ='Asia/Hong_Kong' \
 -e ZBX_SERVER_NAME='Rslnc monit Server' \
 -p 80:80 \
 --restart=always \
 -d nero/zabbix-web-nginx-mysql
 
 | 
遇到的坑
数据库编码格式导致中文输入字符无法保存
由于之前使用的 docker 创建的 zabbix 数据库默认是以latin1字符编码创建的,故此在问题输入『消息』的时候会报字符编码错误。
那么数据库里面已经有原始数据存在,所以我需要将数据导出,再将数据转换成utf8编码。
参考:# MySQL数据库从GBK转换到UTF-8最简单解决方案(也适用于其它编码转换)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | $ docker exec -it zabbix-db bash
 
 
 
 MariaDB [(none)]> drop database zabbix;
 MariaDB [(none)]> create database zabbix default charset utf8;
 MariaDB [(none)]> use zabbix;
 MariaDB [zabbix]> source /etc/mysql/conf.d/zabbix.sql
 MariaDB [zabbix]> source /etc/mysql/conf.d/zabbix-data.sql
 MariaDB [zabbix]> quit
 
 
 |