以前写的 Zabbix 安装教程,使用编译的方式安装实在太麻烦了,而且不方便更新,正好最近重装了服务器系统,所以采用 Docker 的方式部署 Zabbix + Grafana。我用的是宝塔面板,数据库服务是启在宿主机上的,再起一个 MySQL 容器实在太浪费资源,于是我将基于宿主机的数据库安装 Zabbix。
服务器环境
CentOS 7,宝塔面板
前期准备
- 安装好宝塔服务器面板后,需要安装 Docker 运行环境,具体安装方法参考:菜鸟教程
设置 Docker 开机自启
systemctl start docker
# 设置开机自动启动
systemctl enable docker
- 配置 Docker 国内镜像加速
# 编辑 docker 配置文件,没有就新建
vi /etc/docker/daemon.json
# 内容如下
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
# 重启docker加载配置
systemctl restart docker
安装 Zabbix
这里安装的都是 Zabbix 5.0 LTS 版,我使用的是 centos 容器,根据个人习惯选择即可
- 创建 java-gateway 容器,默认 Zabbix 不支持对 java 程序的监控,需要安装
java-gateway
来支持,如果没有需求的话可以不安装
docker run --name zabbix-java-gateway -d -t \
zabbix/zabbix-java-gateway:centos-5.0-latest
- 使用 host 模式创建 Zabbix 服务端容器,与宿主机共用一个网络,Zabbix 服务端会自动创建数据库,无需手动创建,因为手动创建大概率会出问题
docker run --name zabbix-server -d -it \
--net=host \
--restart=always \
-v /etc/localtime:/etc/localtime \
-v /opt/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
-v /opt/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="passwd" \
-e MYSQL_ROOT_PASSWORD="rootpasswd" \
zabbix/zabbix-server-mysql:centos-5.0-latest
参数说明:
MYSQL_DATABASE:数据库名称,不存在会自动创建
MYSQL_USER:数据库用户名
MYSQL_PASSWORD:数据库密码
MYSQL_ROOT_PASSWORD:数据库 root 用户密码,这个很重要不要写错
- 使用 host 模式创建 Zabbix 前端容器
docker run --name zabbix-web -d -it \
--net=host \
--restart=always \
-v /etc/localtime:/etc/localtime \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="passwd" \
-e MYSQL_ROOT_PASSWORD="rootpasswd" \
-e PHP_TZ="Asia/Shanghai" \
zabbix/zabbix-web-nginx-mysql:centos-5.0-latest
- 添加 Host 规则,否则会提示 Zabbix Server 未运行
vi /etc/hosts
# 内容如下
127.0.0.1 zabbix-server
- 安装 zabbix-agnet,这里我直接在宿主机上安装的
参考:https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=centos&os_version=7&db=mysql&ws=nginx
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum clean all
yum install zabbix-agent -y
# 修改配置文件信息,如果监控本机可以不用修改
vi /etc/zabbix/zabbix_agentd.conf
# 启动并设置开机自启
systemctl enable zabbix-agent
systemctl start zabbix-agent
- 浏览器访问
http://ip:8080
即可,默认用户名和密码是:Admin/zabbix
,也可以使用 Nginx 反向代理绑定一个域名
优化 Zabbix
- 安装 python 环境,很多报警媒介都是用 python 写的,如果你要运行 python 的自定义脚本则需安装 python 环境
# 使用 root用户进入zabbix server 容器
docker exec -it --user root zabbix-server /bin/bash
# 下载依赖包
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc* make -y
# 下载 python3 的安装包
yum install wget -y
wget https://www.python.org/ftp/python/3.7.8/Python-3.7.8.tar.xz
tar -Jxvf Python-3.7.8.tar.xz
# 配置安装环境
cd Python-3.7.8
./configure prefix=/usr/local/python3
# 编译安装
make && make install
# 配置软链接(如果已有软链接可以省略)
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
# 添加默认软链接
ln -s /usr/bin/python3 /usr/bin/python
ln -s /usr/bin/pip3 /usr/bin/pip
- 绘制图形中文字符乱码,安装中文字体即可解决
# 复制 Windows 中的微软雅黑字体,在 C:\Windows\Fonts 目录,其他字体也可以
# 将字体文件 ttf 复制到容器中
docker cp ~/msyh.ttf zabbix-web:/usr/share/zabbix/assets/fonts/msyh.ttf
# 进入容器,备份原字体文件并替换新字体
docker exec --user root -it zabbix-web /bin/bash
cd /usr/share/zabbix/assets/fonts/
cp DejaVuSans.ttf DejaVuSans.ttf.bak
mv msyh.ttf DejaVuSans.ttf
安装 Grafana
最后怎么能少了酷酷的 Grafana 监控面板呢,这里同样使用 Docker 方式安装,更新时只需要保留容器中的 /var/lib/grafana/
目录中的内容即可,简单又方便
- 使用 host 模式创建 Grafana 容器,默认监听 3000 端口,可以使用 Nginx 反向代理的绑定域名
docker run -d --net=host --restart=always --name=grafana grafana/grafana
- 其他配置方法见我以前写的文章:Zabbix + Grafana打造炫酷的服务器监控界面
Docker Compose
以上所有操作可以使用 Docoker Compose 实现
version: '3'
services:
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:alpine-5.0-latest
container_name: zabbix-web
hostname: zabbix-web
restart: always
environment:
- TZ=Asia/Shanghai
- DB_SERVER_HOST=127.0.0.1
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=你的数据库密码
- MYSQL_ROOT_PASSWORD=你的数据库root密码
depends_on:
- zabbix-server
network_mode: host
zabbix-server:
image: zabbix/zabbix-server-mysql:alpine-5.0-latest
container_name: zabbix-server
hostname: zabbix-server
restart: always
environment:
- TZ=Asia/Shanghai
- DB_SERVER_HOST=127.0.0.1
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=你的数据库密码
- MYSQL_ROOT_PASSWORD=你的数据库root密码
volumes:
- ./zabbix/alertscripts:/usr/lib/zabbix/alertscripts
- ./zabbix/externalscripts:/usr/lib/zabbix/externalscripts
network_mode: host
grafana:
image: grafana/grafana
container_name: grafana
hostname: grafana
restart: always
environment:
- TZ=Asia/Shanghai
depends_on:
- zabbix-web
- zabbix-server
network_mode: host
# 容器自动更新服务
watchtower:
image: containrrr/watchtower
container_name: watchtower
hostname: watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: -c -s "0 3 * * *"
networks:
default:
driver: bridge
Comments | 3 条评论
博主 禅客
按流程走完8080端口起不来,在哪看日志
博主 Kinoko
@禅客 看看端口是不是被其他程序占用了
博主 yulia
该评论为私密评论