zabbix-server:核心服务器、接收监控数据、转发数据
zabbix-agent:部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server
zabbix-UI:zabbix美化的图形操作平台,基于PHP开发了这个web平台页面
zabbix-proxy:分布式监控系统
1.部署yum仓库
https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/
#安装zabbix.repo仓库文件
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
#修改zabbix仓库软件源为清华源:
sed -i 's#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
sudo sed -i.bak 's/http:\/\/.*.ubuntu.com/http:\/\/mirrors.aliyun.com/g' /etc/apt/solrces.list #ubuntu修改软件源为阿里云命令
#安装zabbix-server服务端以及数据库
#zabbix-server-mysql 以mysql作为存储开发的zabbix.server服务端程序
#zabbix-web-mysql php核心程序,zabbix-UI页面,也是以mysql为存储
#zabbix-agent 采集客户端的核心程序
#mariadb-server 安装mysql服务端程序
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
#启动mysql,且创建用户,待会儿用于和zabbix链接,以及创建zabbix库,存储数据。
#启动mariadb数据库,设置开机启动
systemctl start mariadb && systemctl enable mariadb
#设置mariadb数据库,创建zabbix库,存储监控数据,且创建账号
mysqladmin password lushao
mysql -uroot -plushao -e 'create datebase zabbix character set utf8 collate utf8_bin;'
#创建用户账号,zabbix密码是123456,给予权限是,zabbix这个用户对于zabbix这个库下的所有表都是最大权限
mysql -uroot -plushao -e "grant all privlleges on zabbix.* to zabbix@localhost identified by 'lushao';"
#查看库是否建好了
mysql -uroot -pushao -e "show databases;"
#导入zabbix服务端的数据库内容
#用zcat直接读取gz压缩包的数据,且管道符交给mysql命令往zabbix库中导入数据
zcat /usr/share/doc/zabbix-server-mysql-4.0.42/create.sql.gz | mysql -uroot -plushao zabbix
#技巧,查找命令来自于哪个软件包,便于你去安装
PS:yum provides zcat
yum install gzip -y
#修改zabbix-server服务端配置文件,指明子的ip,便于agent去链接
#找出这个文件中以大写和小写开头的行,也就是找出有内容的行,去掉#开头的注释(grep "^[a-Z]" /etc/zabbix/zabbix_server.conf)
#配置文件不能写中文
grep "^[a-Z]" /etc/zabbix/zabbix_server.conf #改成cat > /etc/zabbix/zabbix_server.conf <<'EOF'(覆盖zabbix_server.conf配置文件内容)
LogFile=/var/log/zabbix/zabibix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabibix_server.pid
SocketDir=/var/run/zabbix
DBHost=localhost #指明mysql的地址 zabbix-server mysql
DBName=zabbix #数据库名字
DBUser=zabbix #数据库的链接用户
DBPassword=lushao #数据库的密码
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts #存放自定义监控项脚本的目录
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
EOF
#服务端配置文件写好了,启动zabbix服务端,且开机自启
systemctl start zabbix-server && systemctl enable zabbix-server
#检查zabbix-server的端口是否运行 10051
netstat -tunlp|grep zabbix
至此,zabbix-server服务端以及zabbix-UI就安装好了,但是zabbix图形化平台还不能访问,还得基于LNMP、LAMP,区别在于web前端到底是nginx去代理,还是apache去代理,zabbix不同版本不一样,zabbix4.0只支持apache版本
apache配置
#修改时区,改为中国,因为你得让apache支持中文
vim /etc/httpd/conf.d/zabbix.conf
#将时区修改为:php_value date.timezone Asia/shanghai
#启动80端口
systemctl start httpd
安装zabbix-web-mysql时,该程序封装了php程序和httpd程序
访问zabbix-UI前端web平台
zabbix-server服务器IP/zabbix #比如192.168.1.12/zabbix
#zabbix默认前端账号密码
账号:Admin
密码:zabbix
#修改zabbix-server时区,ntpdate
sudo cp /usr/share/zoneinfo/Asia/shanghai /etc/localtimedate -R
#修改zabbix-UI字符乱码,下载字体,修改zabbix的字体支持
yum install wqy-microhei-fonts -y
#拷贝字体给zabbix用,覆盖zabbix-UI图形字体
cp /usr/share/fonts/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf
zabbix:物理机、硬件设备的监控用的比较多;
Prometheus:docker容器,Kubernetes监控企业用的比较多;
PS有的监控不全面,也可以搭配zabbix和prometheus一起使用。
zabbix:LTS版本和标准版本
LTS更稳定,1.5年发布一次,更适用大型企业环境;
标准版能更早体验新功能,6个月发布一次。
windows不能安装zabbix-server,不支持作为服务器,但是可以安装zabbix-agent。
通过VMware克隆虚拟机
#修改虚拟机IP地址
sudo vim /etc/netplan/00-installer-config.yaml
#检查IP地址
ip add
#安装中文字体
sudo yum -y install language-pack-zh-hans
#查找文件
sudo find / name "zabbix.conf".php
修改计算机名
#分别在4台服务器上执行
sudo hostnamectl set-hostname db01 #数据库服务器
sudo hostnamectl set-hostname zabbix01
sudo hostnamectl set-hostname zabbix02
sudo hostnamectl set-hostname zabbix03
添加docker软件源,安装docker
#更新一下仓库
sudo yum update
#安装组件
sudo yum install -y yum-transport-https ca-certificates curl software-properties-common
#添加key
curl -fsSL https://download.docker.com/linux/centos/gpg | sudo yum-key add -
#添加阿里云的docker源
sudo add-yum-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/centos $(lsb_release -cs) stable"
#安装
sudo apt -y install docker-ce docker-ce-cli containerd.io
#查看版本
sudo docker version
#配置163镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors":["http://hub.mirror.c.163.com"]
}
EOF
#把用户添加到docker组
sudo usermod -aG docker lushao
#应用配置并重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker && sudo systemctl enable docker
#创建专用于zabbix组件容器的网络
sudu docker network create --subnet 172.20.0.0/16 --ip--range 172.20.240.0/20 zabbix-net
#安装MySQL数据库
sudo mkdir /date/ -p
sudo docker run --name mysql8-server -t \
-e MYSQL_DATABASE="zabbix" \ #创建zabbix数据库
-e MYSQL_USER="zabbix" \ #创建zabbix数据库用户名
-e MYSQL_PASSWORD="123456" \ #使用这个密码
-e MYSQL_ROOT_PASSWORD="123456" \ #设置root的密码为123456
--network=zabbix-net \
-v /etc/localtime:/etc/localtime:ro \ #把本地的时区以只读形式挂载到docker里面
-v /data/zabbix/mysql8/data:/var/lib/mysql \ #把mysql文件持久化到本地的文件夹下
-d mysql:8.0 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_bin \ #使用utf8mb4的字符集来启动
--default-authentication-plugin=mysql_native_password #以这个为默认的认证插件
启动zabbix server实例,并将其关联到已创建的MySQL server:
注意:数据库zabbix的用户密码为123456,root用户密码为123456,请根据实际修改
sudo docker run --name zabbix-server -t \
-e DB_SERVER_HOST="mysql8-server" \ #配置数据库的地址
-e MYSQL_DATABASE="zabbix" \ #使用数据的名字
-e MYSQL_USER="zabbix" \ #创建zabbix数据库用户名
-e MYSQL_PASSWORD="123456" \ #使用这个密码
-e MYSQL_ROOT_PASSWORD="123456" \ #设置root的密码为123456
-v /data/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \ #把docker容器的目录持久化到本地的目录
--network=zabbix-net \
-v /etc/localtime:/etc/localtime:ro \ #把本地的时区以只读形式挂载到docker里面
-p 10051:10051 \
--restart unless-stopped \
--d zabbix/zabbix-server-mysql:latest
#zabbix server实例将10051/TCP 端口暴露给主机
启动zabbix Web界面,并将其关联到已创建的MySQL server和zabbix server
sudo docker run --name zabbix-web -t \
-e ZBX_SERVER_HOST="zabbix-server" \ #Zabbix服务器主机名
-e DB_SERVER_HOST="mysql8-server" \ #数据库的主机名
-e PHP_TZ="Asia/Shanghai" \ #使用默认的时区是上海
-e MYSQL_DATABASE="zabbix" \ #使用数据库的名称是zabbix
-e MYSQL_USER="zabbix" \ #创建zabbix数据库用户名
-e MYSQL_PASSWORD="123456" \ #使用这个密码
-e MYSQL_ROOT_PASSWORD="123456" \ #设置root的密码为123456
--network=zabbix-net \
-v /etc/localtime:/etc/localtime:ro \ #把本地的时区以只读形式挂载到docker里面
-p 80:8080 \
--restart unless-stopped \
--d zabbix/zabbix-server-mysql:latest
#zabbix server实例将10051/TCP 端口暴露给主机
启动zabbix agent界面,并将其关联到已创建的zabbix server
sudo docker run --name zabbix-agent2 -t \
-e ZBX_SERVER_HOST="zabbix-server" \ #Zabbix服务器主机名
-e ZBX_SERVER_PORT="10051" \ #数据库的主机名
--network=zabbix-net \
-v /etc/localtime:/etc/localtime:ro \ #把本地的时区以只读形式挂载到docker里面
--restart unless-stopped \
--d zabbix/zabbix-server-mysql:latest
#检查
sudo docker logs -f mysql8-server
sudo docker logs -f zabbix-server
sudo docker ps
#没有问题后,浏览器访问zabbix地址,docker运行的zabbix不需要在web端初始化,直接访问即可
#修改zabbix-UI字符乱码,下载字体,修改zabbix的字体支持
yum install wqy-microhei-fonts -y
#拷贝字体给zabbix用,覆盖zabbix-UI图形字体
sudo docker cp /usr/share/fonts/truetype/wqy/wqy-microhei.ttc zabbix-web:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf
#修改zabbix-server时区,ntpdate
sudo cp /usr/share/zoneinfo/Asia/shanghai /etc/localtime
#创建用于存放zabbix数据库的目录
sudo mkdir /date/zabbix -p
cd /data/zabbix/
#新建docker-compose.yaml文件
sudo vim docker-comepose.yaml
#输入:set paste 然后按i键,进入插入模式,填入以下内容
version:3.1
services:
zabbix-mysql8: #mysql容器参数说明
image: mysql:8.0
container_name: zabbix-mysql8
# docker安全验证
security_opt:
- seccomp:unconfined
restart: a]ways
command:[mysqld,--character-set-server=utf8mb4--collation-server=utf8mb4_bin,--default-authentication-plugin=mysql_native_password]
restart: always
networks :
- zabbix_net
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=123456 #root密码
volumes:- /etc/localtime:/etc/localtime:ro
#- ./mysql8/conf:/etc/mysql/conf.d
- ./mysql8/data:/var/lib/mysql
zabbix-server01: #zabbix-server01容器参数说明
image: zabbix/zabbix-server-mysql: latest
container_name: zabbix-server0l
restart: always
networks :
- zabbix_net
depends_on:
- zabbix-mysql8
ports:
- 10051:10051
environment:
- ZBX_LISTENPORT=10051 #zabbix-server监听端口
- ZBX_NODEADDRESSPORT=10051 #当前zabbixHA端口
- DB_SERVER_HOST=zabbix-mysql8 #mysql主机名
- MYSQL_DATABASE=zabbix
- MYSOL_USER=zabbix
- MYSQL_PASSWORD=123456
- MYSQL ROOT_PASSWORD=123456
- ZBX_AUTOHANOOENAME=fqdn #当前zabbixHA节点名- ZBX_AUTONODEADDRESS=fqdn #当前zabbixHA地址
- ZBX_STARTREPORTWRITERS=2 #zabbix-server进程数- ZBX_TIMEOUT=30 #超时时间
- ZBX_UNREACHABLEPERIOO=120 #不可达的总时长
volumes:
- /etc/localtime:/etc/localtime:ro
- ./zabbix-server01/alertscripts:/usr/lib/zabbix/alertscriptszabbix-server02: #zabbix-server02容器参数说明
image: zabbix/zabbix-server-mysql: latest
container_name: zabbix-server02
restart: always
networks :
- zabbix_net
depends_on:
- zabbix-mysql8
ports:
- 20051:20051
environment:
- ZBX_LISTENPORT=20051 #zabbix-server监听端口
- ZBX_NODEADDRESSPORT=20051 #当前zabbixHA端口
- DB_SERVER_HOST=zabbix-mysql8 #mysql主机名
- MYSQL_DATABASE=zabbix
- MYSOL_USER=zabbix
- MYSQL_PASSWORD=123456
- MYSQL ROOT_PASSWORD=123456
- ZBX_AUTOHANOOENAME=fqdn #当前zabbixHA节点名- ZBX_AUTONODEADDRESS=fqdn #当前zabbixHA地址
- ZBX_STARTREPORTWRITERS=2 #zabbix-server进程数- ZBX_TIMEOUT=30 #超时时间
- ZBX_UNREACHABLEPERIOO=120 #不可达的总时长
volumes:
- /etc/localtime:/etc/localtime:ro
- ./zabbix-server02/alertscripts:/usr/lib/zabbix/alertscriptszabbix-server03: #zabbix-server03容器参数说明
image: zabbix/zabbix-server-mysql: latest
container_name: zabbix-server03
restart: always
networks :
- zabbix_net
depends_on:
- zabbix-mysql8
ports:
- 30051:30051
environment:
- ZBX_LISTENPORT=30051 #zabbix-server监听端口
- ZBX_NODEADDRESSPORT=30051 #当前zabbixHA端口
- DB_SERVER_HOST=zabbix-mysql8 #mysql主机名
- MYSQL_DATABASE=zabbix
- MYSOL_USER=zabbix
- MYSQL_PASSWORD=123456
- MYSQL ROOT_PASSWORD=123456
- ZBX_AUTOHANOOENAME=fqdn #当前zabbixHA节点名- ZBX_AUTONODEADDRESS=fqdn #当前zabbixHA地址
- ZBX_STARTREPORTWRITERS=2 #zabbix-server进程数- ZBX_TIMEOUT=30 #超时时间
- ZBX_UNREACHABLEPERIOO=120 #不可达的总时长
volumes:
- /etc/localtime:/etc/localtime:ro
- ./zabbix-server03/alertscripts:/usr/lib/zabbix/alertscriptszabbix-agent2: #zabbix-agent容器参数说明
image: zabbix/zabbix-agent2:latest
container_name: zabbix-agent2
restart:always
networks:
- zabbix_net
environment:
- ZBX_HOSTNAME=zabbix server #zabbixagent主机名,默认zabbix server
- ZBX_SERVER_HOST=zabbix-server01 #第一个zabbix server
- ZBX_SERVER_PORT=10051 #第一个zabbix server的端口
- ZBX_ACTIVESERVERS=zabbix-server02:20051,zabbix-server03:30051 #主动模式下zabbix server,会自动添加zabbix-server01,所以不需要单独配置01
- ZBX_PASSIVESERVERS=zabbix-server02,zabbix-server03 #被动模式下zabbix server,会自动添加zabbix-server01,所以不需要单独配置01volumes:
- /etc/localtime:/etc/localtime:ro
zabbix-web: #zabbix-web容器参数说明
image: zabbix/zabbix-web-nginx-mysql:latest
container_name: zabbix-web
restart: always
networks:
- zabbix_net
depends_on:
- zabbix-mysql8
ports:
- 80:8080
environment:
- DB_SERVER_HOST=zabbix-mysql8 #mysql主机
- MYSQL_USER=zabbix #mysql用户名
- MYSQL_PASSWORD=123456 #mysql密码
- ZBX_TIMEOUT=30 #超时时间
- ZBX_UNREACHABLEPERIOD=120 #不可达时间
- PHP_TZ=Asia/Shanghai #时区
volumes:
- /etc/localtime:/etc/localtime:ronetworks:
zabbix_net:
driver: bridge#然后按ESC键,输入:wq保存退出
docker-compose后台运行zabbix
sudo docker-compose up -d
#检查日志
sudo docker logs -f 容器name或容器id
sudo docker ps
sudo docker logs -f zabbix-server
#修改zabbix-UI字符乱码,下载字体,修改zabbix的字体支持
yum install wqy-microhei-fonts -y
#拷贝字体给zabbix用,覆盖zabbix-UI图形字体
sudo docker cp /usr/share/fonts/truetype/wqy/wqy-microhei.ttc zabbix-web:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf
#修改zabbix-server时区,ntpdate
sudo cp /usr/share/zoneinfo/Asia/shanghai /etc/localtime
测试:将zabbix-server03主服务器停止后,系统自动将zabbix-server02设置为主服务器,表示高可用自动切换没有问题,可以通过仪表板查看到相关信息。
#停止zabbix主服务器
docker stop zabbix-server03