以前使用编译的方式安装实在太麻烦了,而且不方便更新,正好最近重装了服务器系统,所以采用 Docker 的方式部署 Zabbix + Grafana。我用的是宝塔面板,数据库服务是启在宿主机上的,再起一个 MySQL 容器实在太浪费资源,于是我将基于宿主机的数据库安装 Zabbix。
服务器环境
CentOS 7,宝塔面板
前期准备
- 安装好宝塔服务器面板后,需要安装 Docker 运行环境,具体安装方法参考:菜鸟教程
设置 Docker 开机自启
systemctl start docker # 设置开机自动启动 systemctl enable 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-Agent,这里我直接在宿主机上安装的,参考:官方文档
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
优化 Zabbix
安装 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 0 3 * * *"
networks:
default:
driver: bridge
按流程走完8080端口起不来,在哪看日志
看看端口是不是被其他程序占用了
你好,感兴趣投稿吗?我们是zabbix中国官方,欢迎关注:Zbbix开源社区,联系小Z. 你的网站很萌呀。