6

使用 Docker 安装 Zabbix 实践

 2 years ago
source link: https://wsgzao.github.io/post/zabbix-docker/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Zabbix 是目前最为主流的开源监控方案之一,前面的文章主要介绍了传统的安装方式,在 Docker 容器出现后我们也拥有更高效的安装方式,这里就主要分享基于 Docker 安装和配置 Zabbix 的相关心得。

使用 Docker 安装 Zabbix 实践

2018 年 10 月 30 日 - 初稿

阅读原文 - https://wsgzao.github.io/post/zabbix-docker/

扩展阅读

Zabbix - https://www.zabbix.com/


https://www.zabbix.com/download
https://www.zabbix.com/documentation

zabbix-server

从容器安装 Zabbix Server 最简单的方式之一,关于数据卷是否需要映射,看实际需求吧

https://hub.docker.com/r/zabbix/zabbix-server-mysql/tags/
https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql/tags/

# install docker-ce
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce
sudo systemctl start docker

# Install mysql, zabbix, nginx in docker
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-p 127.0.0.1:3306:3306 \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin

docker run --name zabbix-server-mysql -t \
--link mysql-server:mysql \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-p 10051:10051 \
-d \
zabbix/zabbix-server-mysql:centos-4.0-latest

docker run --name zabbix-web-nginx-mysql -t \
--link mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-e PHP_TZ="Asia/Singapore" \
-p 80:80 \
-d \
zabbix/zabbix-web-nginx-mysql:centos-4.0-latest


# 做数据映射后的方案

mkdir -p /data/docker/mysql/zabbix/data
mkdir -p /data/docker/zabbix/alertscripts
mkdir -p /data/docker/zabbix/externalscripts

docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-v /data/docker/mysql/zabbix/data:/var/lib/mysql \
-p 127.0.0.1:3306:3306 \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin

docker run --name zabbix-server-mysql -t \
--link mysql-server:mysql \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-v /etc/localtime:/etc/localtime:ro \
-v /data/docker/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
-v /data/docker/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \
-p 10051:10051 \
-d \
zabbix/zabbix-server-mysql:centos-4.0-latest

docker run --name zabbix-web-nginx-mysql -t \
--link mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-e PHP_TZ="Asia/Singapore" \
-p 80:80 \
-d \
zabbix/zabbix-web-nginx-mysql:centos-4.0-latest

zabbix-proxy 和 zabbix-agent 也可以用容器安装,不过 agent 就不推荐容器化了,针对容器本身的监控可以使用 zabbix-docker-monitoring,当然 Prometheus 才是监控容器的利刃。
https://github.com/monitoringartist/zabbix-docker-monitoring

zabbix-docker 官方的 GitHub 站点还包含更详细的 docker compose 配置
https://github.com/zabbix/zabbix-docker

关于 Docker 常用命令可以参考 Docker 从入门到实践
https://wsgzao.github.io/post/docker/

Zabbix 容器化后的配置

容器化的配置和传统方式略有不同,尤其是网络防火墙策略

# 根据 zabbix_server.conf 配置文件内容创建对应的目录和权限 
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
StartPollers=500
StartPingers=50
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
CacheSize=8G
TrendCacheSize=1G
Timeout=15
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000

# Zabbix 容器默认的配置
LogType=console
DBHost=mysql-server
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=3306
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/sbin/fping
Fping6Location=/usr/sbin/fping6
SSHKeyLocation=/var/lib/zabbix/ssh_keys
SSLCertLocation=/var/lib/zabbix/ssl/certs/
SSLKeyLocation=/var/lib/zabbix/ssl/keys/
SSLCALocation=/var/lib/zabbix/ssl/ssl_ca/
LoadModulePath=/var/lib/zabbix/modules/

# 按照规范映射指定卷并做好脚本权限设置
-v /data/docker/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
-v /data/docker/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \

# Zabbix partition optimization
1. disable Housekeeping
2. mysql_partition

https://www.zabbix.org/wiki/Docs/howto/mysql_partition

# 容器内部的调整
apt-get update
apt-get install lrzsz vim cron -y

mysql -uzabbix -pzabbix zabbix < partition.sql

# 设置定时任务
vim /etc/crontab
01 01 * * * root mysql -uzabbix -pzabbix zabbix -e"CALL partition_maintenance_all('zabbix')"

service cron restart

# 在宿主机上配置定时任务的方法
docker exec $(docker ps -aqf "name=mysql-server") mysql -uzabbix -pzabbix zabbix -e"CALL partition_maintenance_all('zabbix')"
  1. 拉取最新镜像
  2. 停止并删除当前运行容器
  3. 用最新镜像重新创建容器
  4. All Done
# 查找当前系统中使用的镜像 
docker images
# 拉取最新镜像
docker pull zabbix/zabbix-web-nginx-mysql
docker pull zabbix/zabbix-server-mysql
# 查找容器 ID
docker ps
# 导出之前的容器配置信息
docker inspect 14fd67405076
# 停止容器
docker stop 14fd67405076
docker kill 14fd67405076
# 删除容器
docker rm 14fd67405076
# 用最新镜像重新创建容器
docker run --name zabbix-server-mysql -t \
--link mysql-server:mysql \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-v /etc/localtime:/etc/localtime:ro \
-v /data/docker/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
-v /data/docker/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \
-p 10051:10051 \
-d \
zabbix/zabbix-server-mysql

docker run --name zabbix-web-nginx-mysql -t \
--link mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-e PHP_TZ="Asia/Singapore" \
-p 80:80 \
-d \
zabbix/zabbix-web-nginx-mysql

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK