Zabbix 搭建文档
概述
计划使用 docker 搭建 Zabbix 监控系统。
安装 Docker
参考 Ubuntu、Debian 系列安装 Docker
部署 Mariadb-Server
一、建立数据库本地目录
1 2
| mkdir -p ~/zabbix/database/mysql mkdir ~/zabbix/database/conf.d
|
二、运行 Mariadb-Server Docker
1 2 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
新建数据库。
1 2 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 新建好了。
1 2 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,参数会有所不同。
1 2 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
1 2 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(本例使用黑体字体)
1 2
| mkdir ~/zabbix-web-docker-cn rz
|
三、编写 Dockerfile 文件
1 2 3 4 5 6 7 8 9
| cat <<EOF | tee ~/zabbix-web-docker-cn/Dockerfile FROM 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
|
四、构建镜像
1 2 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
|
五、运行镜像
1 2 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最简单解决方案(也适用于其它编码转换)
1 2 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
|