Zabbix简介
Zabbix 是一款开源的、企业级的分布式监控解决方案,广泛用于网络监控、服务器监控、云服务监控等。以下是 Zabbix 系统中几个关键组件的介绍:
Zabbix Server
Zabbix Server 是整个 Zabbix 监控系统的中央组件,负责接收来自 Zabbix Agent(或 Zabbix Proxy)的数据、触发报警、远程执行命令等功能。它处理所有的配置、统计和操作数据,并且是唯一可以永久保存监控数据的组件。Zabbix Server 支持多种数据库存储后端,如 MySQL、PostgreSQL 等,以便于数据的持久化存储。
Zabbix Proxy
Zabbix Proxy 可以看作是一个轻量级的 Zabbix Server,它可以代替 Zabbix Server 执行部分监控任务。Zabbix Proxy 主要用于分担 Zabbix Server 的负载,尤其是在大规模分布式监控环境中,通过在不同地理位置部署多个 Zabbix Proxy 实例,可以有效减少网络带宽的使用并提高数据收集的效率。Zabbix Proxy 与 Zabbix Server 之间的通信也是加密的,确保数据传输的安全性。
Zabbix Agent
Zabbix Agent 部署在需要被监控的目标机器上,它主动收集本地资源使用情况和应用数据,并将这些数据发送给 Zabbix Server 或响应 Zabbix Server 的请求来提供数据。Zabbix Agent 支持 Linux 和 Windows 操作系统,并允许用户根据自己的需求自定义监控项。
Zabbix Agent2
Zabbix Agent2 是对原始 Zabbix Agent 的升级版本,不仅包含了原 Agent 的所有功能,还新增了多项改进和增强功能。例如,支持更多的监控指标、提高了性能、增强了安全性和稳定性。Zabbix Agent2 支持插件式架构,使得添加新的监控功能变得更加容易。此外,它还提供了更强大的被动和主动检查能力。
更详细的介绍可以查看zabbix官网中文文档:https://www.zabbix.com/documentation/6.0/zh/manual
一、环境准备
1.IP分配:
192.168.10.128:Zabbix-server+Zabbix-agent
192.168.10.129:Zabbix-agent2
2.更新yum源
如果你用的系统还在维护期内,可以跳过这一步。
我使用的系统是CentOS7,现在官方已经停止维护了,所以默认带的yum源是用不了的,可以换成vault源,或者换成如阿里云维护的yum源,这里我换成阿里源(如果没有外网环境,也可以用一个同系统版本的ISO镜像放在内网,做一个内网yum源):
#备份原来的 repo 文件(如果有)
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
#下载阿里云 CentOS 7 源配置到/etc/yum.repos.d/CentOS-Base.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清除缓存并生成新的缓存
yum clean all
yum makecache
#测试安装一个包验证是否正常
yum install -y epel-release
3.安装常用基本依赖和工具
最小化安装的系统缺少很多常用的依赖和命令,需要额外安装:
#安装基本依赖和工具
yum install -y bash-completion net-tools gcc gcc-c++ vim wget telnet tree lrzsz lsof libaio net-snmp-devel libevent-devel libxml2-devel
4.关闭防火墙
CentOS7有两个防火墙,一个是firewalld,一个是selinux。
4.1 firewalld
#firewalld
systemctl status firewalld #查看当前状态
systemctl stop firewalld #关闭firewalld
systemctl disable firewalld #禁止开机自启
systemctl status firewalld #查看当前状态
4.2 selinux
#临时关闭(重启后会恢复)
getenforce #查看当前状态
setenforce 0 #临时关闭
getenforce #查看当前状态
#永久关闭
vim /etc/selinux/config
修改SELINUX=disabled
二、部署zabbix
2.1 部署MySQL8.0
根据zabbix官网的文档,zabbix6.0的MySQL需要8.0.30-8.4.X版本。
2.1.1 下载MySQL源
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
2.1.2 配置MySQL源
yum -y install mysql80-community-release-el7-5.noarch.rpm
2.1.3 安装MySQL相关依赖
# --nogpgcheck跳过GPG验证
yum -y install gcc-c++ mysql-devel net-snmp-devel libevent-devel mariadb-devel --nogpgcheck
不想跳过的同学可以导入key后再安装
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql
2.1.4 安装MySQL并建立zabbix账号和库
(1)下载mysql包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar
(2)创建目录
mkdir -p /data/zabbix/mysql
(3)解压到/data/zabbix/mysql
tar xf mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar -C /data/zabbix/mysql/
(4)安装rpm包
cd /data/zabbix/mysql
rpm -ivh mysql-community-* --force --nodeps
(5)启动和开机自启
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
(6)创建MySQL的zabbix账号和库
#查看默认密码
cat /var/log/mysqld.log |grep password
#连接数据库
mysql -uroot -p
#修改默认root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_password'; #修改为你自己想用的密码,生产环境需注意强度
#创建zabbix库
create database zabbix character set utf8 collate utf8_bin;
#新建不限ip登录的用户
CREATE USER 'zabbix'@'%' IDENTIFIED BY 'your_password'; #修改为你自己想用的密码,生产环境需注意强度
#赋权
GRANT ALL PRIVILEGES ON *.* TO 'zabbix'@'%';
#生效
FLUSH PRIVILEGES;
#退出数据库
exit
2.2 编译安装Zabbix
2.2.1 下载源码包并解压
#下载zabbix6.0
wget http://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.1.tar.gz
#解压到/data/zabbix
tar -zxvf zabbix-6.0.1.tar.gz -C /data/zabbix/
2.2.2 创建账号
#创建zabbix组
groupadd zabbix
#创建zabbix用户
useradd -g zabbix -M -s /sbin/nologin zabbix
2.2.3 编译安装
(1)编译
# 编译(通过“--prefix=/data/zabbix/”指定安装在/data/zabbix/目录下)
# “--enable-agent”可以改成“--enable-agent2”,则编译的是agent2
cd /data/zabbix/zabbix-6.0.1
./configure --prefix=/data/zabbix/ --enable-server --enable-agent --with-net-snmp --with-mysql --with-libxml2
编译完成后会输出编译配置摘要,具体含义可以对着我的注释看,不感兴趣可以跳过。
# ==================================
# Zabbix 编译配置摘要
# ==================================
# 操作系统信息
Detected OS: linux-gnu # 检测到的操作系统类型
Install path: /data/zabbix # 自定义安装路径
Compilation arch: linux # 编译架构为 Linux
# 编译器及编译参数
Compiler: cc # 使用的 C 编译器(通常是 GCC)
Compiler flags: -g -O2 # 编译选项:
# -g: 包含调试信息
# -O2: 优化等级 2
# 库支持路径
Library-specific flags:
database: -I/usr/include/mysql -m64
# MySQL 数据库头文件路径和 64 位编译标志
libXML2: -I/usr/include/libxml2
# libxml2 头文件路径(用于 XML/XPath 预处理)
Net-SNMP: -I/usr/local/include -I/usr/lib64/perl5/CORE -I. -I/usr/include
# Net-SNMP 头文件路径(用于网络设备监控)
# ==================================
# Zabbix Server 功能启用情况
# ==================================
Enable server: yes # 启用 Zabbix Server
Server details:
With database: MySQL # 使用 MySQL 作为后端数据库
WEB Monitoring: no # 不启用 Web 页面内容抓取功能
SNMP: yes # 支持通过 SNMP 协议监控网络设备
IPMI: no # 不支持 IPMI 硬件管理接口
SSH: no # 不支持远程执行 SSH 命令
TLS: no # 不启用加密通信(如 TLS/SSL)
ODBC: no # 不支持通用 ODBC 数据库连接
Linker flags: -L/usr/lib64 -L/usr/lib64/mysql -rdynamic
# 链接器搜索路径和动态链接标志
Libraries: -lmysqlclient -lpthread -ldl -lssl -lcrypto -lresolv -lm -lrt
-lnetsnmp -lz -lpthread -levent -lm -ldl -lresolv -lxml2 -lpcre
# 链接的库列表:
# MySQL, SNMP, XML, PCRE, SSL, 压缩等
Configuration file: /data/zabbix/etc/zabbix_server.conf
# Server 配置文件路径
External scripts: /data/zabbix/share/zabbix/externalscripts
# 外部脚本目录
Alert scripts: /data/zabbix/share/zabbix/alertscripts
# 告警脚本目录
Modules: /data/zabbix/lib/modules
# 插件模块存放路径
# ==================================
# Zabbix Agent 功能启用情况
# ==================================
Enable agent: yes # 启用 Zabbix Agent(客户端)
Agent details:
TLS: no # 不启用 TLS 加密通信
Modbus: no # 不支持 Modbus 工业协议监控
Linker flags: -rdynamic # 动态链接标志
Libraries: -lz -lpthread -lm -ldl -lresolv -lxml2 -lpcre
# 所需库:压缩、线程、正则、XML 解析等
Configuration file: /data/zabbix/etc/zabbix_agentd.conf
# Agent 配置文件路径
Modules: /data/zabbix/lib/modules
# Agent 模块插件路径
# ==================================
# 其他未启用组件
# ==================================
Enable proxy: no # 不启用分布式代理(Proxy)
Enable agent 2: no # 不启用 Go 语言版本的 Agent(Agent 2)
Enable web service: no # 不启用 Web 服务模块(HTTP API)
Enable Java gateway: no # 不启用 Java Gateway(JMX 监控)
LDAP support: no # 不启用 LDAP 用户认证
IPv6 support: no # 不启用 IPv6 网络支持
(2)安装
#编译安装
make install
大量日志打印后make install结束
2.2.4 初始化数据库
zabbix自带了三个sql文件,用于初始化数据库时建表等工作。
(1)授权
#给MySQL授权/data/zabbix/zabbix-6.0.1/database/mysql/目录下文件权限(一般已经有权限,可检查跳过)
#确保 MySQL 有足够的权限读取指定路径下的images.sql文件
chown -R mysql:mysql /data/zabbix/zabbix-6.0.1/database/mysql/images.sql
chmod 644 /data/zabbix/zabbix-6.0.1/database/mysql/images.sql
chown -R mysql:mysql /data/zabbix/zabbix-6.0.1/database/mysql/schema.sql
chmod 644 /data/zabbix/zabbix-6.0.1/database/mysql/schema.sql
chown -R mysql:mysql /data/zabbix/zabbix-6.0.1/database/mysql/data.sql
chmod 644 /data/zabbix/zabbix-6.0.1/database/mysql/data.sql
(2)导入sql文件
#进入MySQL
mysql -uroot -p
#进入zabbix
USE zabbix
#导入数据库架构及数据
SOURCE /data/zabbix/zabbix-6.0.1/database/mysql/schema.sql
SOURCE /data/zabbix/zabbix-6.0.1/database/mysql/images.sql
SOURCE /data/zabbix/zabbix-6.0.1/database/mysql/data.sql
#查看表
SHOW TABLES;
如果能看到一系列表名,说明文件已成功导入。
2.3 部署PHP
2.3.1 安装PHP7.4
由于CentOS7自带PHP版本为5.6,所以需要安装额外的库,也是remi的库
#逐条执行
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum -y install yum-utils
yum-config-manager --disable 'remi-php*' #禁用自带的旧版本源
yum-config-manager --enable 'remi-php74' #启用新安装的新版本源
yum -y install php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-bcmath php-json php-mbstring php-ldap install curl-devl libxml2 libxml2-devel
php -v #查看版本
2.3.2 修改PHP配置文件
#注意带注释的要去掉注释符号
vim /etc/php.ini
修改:
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
vim /etc/php-fpm.d/www.conf
修改:
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
#过滤修改的两个文件,检查是否修改成功
cat /etc/php.ini | grep -E 'post_max_size|max_execution_time|max_input_time'
cat /etc/php-fpm.d/www.conf | grep -E 'listen =|listen.owner|listen.group|listen.mode'
2.4 部署Nginx
2.4.1 安装
yum -y install epel-release
yum -y install nginx
2.4.2 添加zabbix.conf配置文件
vim /etc/nginx/conf.d/zabbix.conf
参考配置文件(如果你的所有路径等都和我一样,那么可以直接复制过去用):
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html/zabbix;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
2.4.3 建立静态页面软链接
ln -s /data/zabbix/zabbix-6.0.1/ui /usr/share/nginx/html/zabbix
2.4.4 授权nginx对/run/php-fpm/www.sock的权限
#新建php-fpm
mkdir -p /run/php-fpm
chown nginx:nginx /run/php-fpm
2.5 配置zabbix日志路径、数据库密码、server地址
#新建文件夹
mkdir /data/zabbix/log
chown -R zabbix:zabbix /data/zabbix/log
#编辑zabbix_server.conf
vim /data/zabbix/etc/zabbix_server.conf
#修改
LogFile=/data/zabbix/log/zabbix_server.log
DBPassword=xxx (替换成本文2.4.1第(6)步配置的数据库zabbix用户密码)
#编辑zabbix_agentd.conf
vim /data/zabbix/etc/zabbix_agentd.conf
#修改
LogFile=/data/zabbix/log/zabbix_agentd.log
Server=127.0.0.1,192.168.10.128 #使用zabbix-server的地址,英文逗号隔开
ServerActive=127.0.0.1,192.168.10.128 #使用zabbix-server的地址,英文逗号隔开
2.6 zabbix添加systemctl管理
/data/zabbix/sbin/zabbix_server
(1)Zabbix-server:
新建zabbix-server.service:
vim /etc/systemd/system/zabbix-server.service
输入内容:
[Unit]
Description=Zabbix Server
After=network.target mysql.service mariadb.service postgresql.service
[Service]
Type=forking
PIDFile=/tmp/zabbix_server.pid
ExecStart=/data/zabbix/sbin/zabbix_server -c /data/zabbix/etc/zabbix_server.conf
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=always
User=zabbix
Group=zabbix
Environment="LD_LIBRARY_PATH=/data/zabbix/lib"
[Install]
WantedBy=multi-user.target
(2)Zabbix-agent:
新建zabbix-agent.service:
vim /etc/systemd/system/zabbix-agent.service
输入内容:
[Unit]
Description=Zabbix Agent
After=network.target
[Service]
Type=forking
PIDFile=/tmp/zabbix_agentd.pid
ExecStart=/data/zabbix/sbin/zabbix_agentd -c /data/zabbix/etc/zabbix_agentd.conf
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=always
User=zabbix
Group=zabbix
Environment="LD_LIBRARY_PATH=/data/zabbix/lib"
[Install]
WantedBy=multi-user.target
(3)重载systemctl配置:
systemctl daemon-reload
2.7 启动服务
2.7.1 启动PHP-FPM
systemctl enable php-fpm
systemctl start php-fpm
#检查www.sock是否存在及权限
ls -l /run/php-fpm/www.sock
2.7.2 启动Zabbix
#开机自启
systemctl enable zabbix-server
systemctl enable zabbix-agent
#启动
systemctl start zabbix-server
systemctl start zabbix-agent
#查看状态
systemctl status zabbix-server
systemctl status zabbix-agent
2.7.3 启动Nginx
systemctl enable nginx
systemctl start nginx
systemctl status nginx
2.7.4 检查所有端口是否正常监听
netstat -tulnp
#-t 表示显示 TCP 端口
#-u 表示显示 UDP 端口
#-l 表示仅显示监听状态的端口
#-n 表示以数字形式显示地址和端口号,而不是尝试解析为域名
#-p 显示哪个进程(Process)正在使用该端口,包括进程的 PID 和名称
三、初始化Zabbix
3.1 在浏览器访问http://192.168.10.128(换成你自己的ip)
(1)选择语言
(2)查看检测是否全部通过
(3)配置数据库信息
(4)配置主机名称和时区信息
(5)检测无误后下一步
(6)配置zabbix.conf.php文件
我的服务器里还有一个账号是007,不小心影响了权限,导致我这里添加失败,所以我下载下来后手动添加这个文件
(7)完成
2.8 登录
默认账密:Admin/zabbix