Zabbix 主要有以下几个组件组成:
Zabbix Server:Zabbix 服务端,是 Zabbix 的核心组件。它负责接收监控数据并触发告警,还负责将监控数据持久化到数据库中。
Zabbix Agent:Zabbix 客户端,部署在被监控设备上,负责采集监控数据,采集后的数据发送给 Zabbix Server 处理。
Zabbix Agent 目前有两个版本:Zabbix agent 和 Zabbix agent 2。前者是 C 语言开发的,几乎支持所有的主流平台。而后者是 Go 开发的,优点包括:能有效降低 TCP 连接的数量;支持更高的并发;易于扩展。目标是替代 Zabbix agent ,目前只支持 Linux 和Windows 两个平台。
Zabbix Proxy:代替 Zabbix Server 接收监控数据并进行预处理,预处理后的数据批量发送给 Zabbix Server,这样可减轻 Zabbix Server 的压力。
Web 页面:可通过 Web 页面来管理和维护被监控设备的配置信息、查看监控数据、配置告警等。
数据库:负责存储被监控设备的配置信息和监控数据。支持的数据库有:MySQL(Percona,MariaDB),Oracle,PostgreSQL,TimescaleDB for PostgreSQL,SQLite。
本文主要包括以下四部分:
1. 安装 Zabbix Server
2. 安装 Web 组件
3. 配置 Zabbix Web 页面
4. 安装 Zabbix Agent
安装 Zabbix Server
部署环境如下表所示。
下面开始安装 Zabbix Server,具体步骤如下。
(1)准备工作
关闭防火墙和 SElinux
# systemctl stop firewalld.service # systemctl disable firewalld.service # setenforce 0 # sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
(2)下载 zabbix 软件包:
下载地址:https://www.zabbix.com/download
我这里使用的是源码包。
(3)解压源码包,建立软链接:
# cd /usr/src/ # wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.2.tar.gz # tar xvf zabbix-6.0.2.tar.gz # ln -s zabbix-6.0.2 zabbix
(4)创建 zabbix 用户:
# groupadd --system zabbix # useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
(5)创建 zabbix 数据库:
这里将 MySQL 作为 zabbix 的后端数据库,我这里使用的是 MySQL 8.0.27 二进制版本。
下面开始安装 MySQL 8.0.27 二进制版本。
# cd /usr/local/ # wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz # tar xvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz # ln -s mysql-8.0.27-linux-glibc2.12-x86_64 mysql
编辑 MySQL 配置文件
# vim /etc/my.cnf [client] socket=/data/mysql/3306/data/mysql.sock [mysqld] #server configuration user=mysql datadir=/data/mysql/3306/data basedir=/usr/local/mysql port=3306 socket=/data/mysql/3306/data/mysql.sock log_timestamps=system log_error=/data/mysql/3306/data/mysqld.err skip_name_resolve #Replication Framework server_id=1 master_info_repository=TABLE relay_log_info_repository=TABLE log_slave_updates=ON log_bin=mysql-bin binlog_format=ROW
创建数据目录,初始化实例,启动实例
# mkdir -p /data/mysql/3306/data/ # /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure # /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
下面创建 zabbix 数据库和用户。
mysql> create database zabbix character set utf8 collate utf8_bin; mysql> create user 'zabbix_admin'@'%' identified with mysql_native_password by 'zabbix_pass'; mysql> grant all privileges on zabbix.* to 'zabbix_admin'@'%';
接着初始化数据。
# cd /usr/src/zabbix/database/mysql/ # mysql -h127.0.0.1 -uzabbix_admin -pzabbix_pass zabbix < schema.sql # mysql -h127.0.0.1 -uzabbix_admin -pzabbix_pass zabbix < images.sql # mysql -h127.0.0.1 -uzabbix_admin -pzabbix_pass zabbix < data.sql
(6)编译安装 Zabbix Server:
# yum install gcc mysql-devel libevent-devel libcurl-devel libxml2-devel net-snmp-devel # cd /usr/src/zabbix # ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/usr/local/mysql/bin/mysql_config --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 # make install
编译时注意:
1. configure 命令中的 --prefix 是安装目录,如果不设置,则默认是 /usr/local。
2. 在 make install 的过程中,如果出现如下错误:
/bin/ld: warning: libcrypto.so.1.1, needed by /usr/local/mysql/lib/libmysqlclient.so, not found (try using -rpath or -rpath-link) /bin/ld: warning: libssl.so.1.1, needed by /usr/local/mysql/lib/libmysqlclient.so, not found (try using -rpath or -rpath-link)
则需要对依赖的两个库做个软链接。具体命令如下:
# find / -name libssl.so.1.1 /usr/local/mysql-8.0.27-linux-glibc2.12-x86_64/lib/private/libssl.so.1.1 # ln -s /usr/local/mysql-8.0.27-linux-glibc2.12-x86_64/lib/private/libssl.so.1.1 /usr/lib64 # ln -s /usr/local/mysql-8.0.27-linux-glibc2.12-x86_64/lib/private/libcrypto.so.1.1 /usr/lib64
编译完成后,我们看看 /usr/local/zabbix/ 目录的内容。
# tree /usr/local/zabbix /usr/local/zabbix ├── bin │ ├── zabbix_get │ ├── zabbix_js │ └── zabbix_sender ├── etc │ ├── zabbix_agentd.conf │ ├── zabbix_agentd.conf.d │ ├── zabbix_server.conf │ └── zabbix_server.conf.d ├── lib │ └── modules ├── sbin │ ├── zabbix_agentd │ └── zabbix_server └── share ├── man │ ├── man1 │ │ ├── zabbix_get.1 │ │ └── zabbix_sender.1 │ └── man8 │ ├── zabbix_agentd.8 │ └── zabbix_server.8 └── zabbix ├── alertscripts └── externalscripts 14 directories, 11 files
其中,
etc 是配置文件目录。
alertscripts 是告警脚本目录。
externalscripts 是外部脚本目录。
(7)修改配置文件
首先修改 Zabbix Server 的配置文件,修改后的配置如下。
# grep -Ev '^$|^#' /usr/local/zabbix/etc/zabbix_server.conf LogFile=/tmp/zabbix_server.log DBHost=127.0.0.1 DBName=zabbix DBUser=zabbix_admin DBPassword=zabbix_pass DBPort=3306 Timeout=4 LogSlowQueries=3000 StatsAllowedIP=127.0.0.1
这里主要修改了连接数据库的相关参数。
其次修改 Zabbix Agent 的配置文件,修改后的配置如下。
# grep -Ev '^$|^#' /usr/local/zabbix/etc/zabbix_agentd.conf LogFile=/tmp/zabbix_agentd.log Server=127.0.0.1 ServerActive=127.0.0.1 Hostname=Zabbix server
这里为什么也要修改 Zabbix Agent 的配置文件呢?因为 Zabbix Server 自身及所在服务器的监控数据也需要 Zabbix Agent 来采集,所以,Zabbix Agent 同样也需要安装并启动。
(8)配置服务管理脚本
针对 Zabbix Server,主要修改三处:1. 设置 zabbix_server 的路径;2. 设置配置文件的路径;3. 启动时指定配置文件。
# vim /usr/src/zabbix/misc/init.d/fedora/core5/zabbix_server ... ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_server" CONFIG_FILE="/usr/local/zabbix/etc/zabbix_server.conf" ... start() { echo -n $"Starting $prog: " daemon $ZABBIX_BIN -c $CONFIG_FILE # cp /usr/src/zabbix/misc/init.d/fedora/core5/zabbix_server /etc/init.d/
针对 Zabbix Agent,同样也是调整这三处的内容。
# vim /usr/src/zabbix/misc/init.d/fedora/core5/zabbix_agentd ... ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_agentd" CONGIG_FILE="/usr/local/zabbix/etc/zabbix_agentd.conf" ... start() { echo -n $"Starting $prog: " daemon $ZABBIX_BIN -c $CONGIG_FILE ... # cp /usr/src/zabbix/misc/init.d/fedora/core5/zabbix_agentd /etc/init.d/
(9)启动 Zabbix Server 和 Zabbix Agent
# service zabbix_server start
# service zabbix_agentd start
启动 Zabbix Server 的过程中,如果提示以下错误,
Starting Zabbix Server: /usr/local/zabbix/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.21: cannot open shared object file: No such file or directory
同样可通过设置软链接来解决。
# ln -s /usr/local/mysql/lib/libmysqlclient.so.21 /usr/lib64
(10)将 Zabbix Server 和 Zabbix Agent 设置为开机自启动。
# chkconfig zabbix_server on
# chkconfig zabbix_agentd on
安装 Web 组件
安装完 Zabbix Server,接下来我们安装 Web 组件。
这里使用的 Web 服务器是 httpd,也可使用 Nginx。
(1)安装 httpd 和 PHP。
方便起见,这里直接通过 yum 安装 httpd 和 PHP。Zabbix 从 5.0 开始,要求 PHP 的版本不低于 7.2。但在 CentOS 7 中,yum 源中默认的是 PHP 5.4.16。所以,这里需要安装额外的 epel 和 webtatic 源。
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm # yum install httpd php72w-cli php72w-common php72w-gd php72w-ldap php72w-mbstring php72w-mysqlnd php72w-xml php72w-bcmath mod_php72w -y
(2)将 Zabbix 源码包中的 PHP 文件复制到 httpd 的根目录下。
# mkdir -p /var/www/html/zabbix # cp -r /usr/src/zabbix/ui/* /var/www/html/zabbix # chown -R apache.apache /var/www/html/
(3)修改 php 的配置文件。
# vim /etc/php.ini max_execution_time = 300 max_input_time = 300 memory_limit = 128M post_max_size = 16M upload_max_filesize = 2M date.timezone = Asia/Shanghai
注意,这里给出的只是最小需求值,可根据实际需要调大。
(4)启动 httpd 服务
# service httpd start
(5)将 httpd 服务设置为开机自启动
# chkconfig httpd on
配置 Zabbix Web 页面
安装完 Web 组件,最后我们开始配置 Zabbix Web 页面。
(1)登录 Zabbix Server Web 首页。
浏览器中输入 http://10.0.0.228/zabbix ,其中,10.0.0.228 是 Zabbix Server 的地址
将默认的语言调整为 Chinese(zh_CN) ,点击下一步。
(2)依赖性检查。
主要是检查 php 的插件、配置是否满足要求。如果不满足,最右边的 OK 将显示为 Fail。
(3)配置数据库连接信息。
因为我们的演示环境 Zabbix Server 和数据库是在一台主机上部署,所以,这里 Database host 设置的是 127.0.0.1。生成环境建议分开部署。
(4)设置 Zabbix Server 信息
(5)检查配置是否正确。
(6)安装页面
进入Zabbix的登录界面,默认的用户名为Admin,密码为zabbix,管理员权限。
登录成功后的页面如下所示:
安装 Zabbix Agent
同样的源码包,在被监控主机(192.168.244.10)上部署。
(1)编译安装 Zabbix Agent:
# groupadd --system zabbix # useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix # cd /usr/src/ # tar xvf zabbix-6.0.2.tar.gz # ln -s zabbix-6.0.2 zabbix # yum install gcc pcre-devel -y # cd zabbix # ./configure --prefix=/usr/local/zabbix --enable-agent # make install
(2)修改配置文件:
# grep -Ev '^$|^#' /usr/local/zabbix/etc/zabbix_agentd.conf LogFile=/tmp/zabbix_agentd.log Server=10.0.0.228 ServerActive=127.0.0.1 Hostname=node1
其中,
Server:被动模式下 Zabbix Server 的地址,在这种模式下,Zabbix Server 发送请求,Agent 才会响应数据。被动模式是 Zabbix Agent 默认的工作模式。
ServerActive:主动模式下 Zabbix Server 的地址,在这种模式下,Agent 会将采集到的数据主动发送给 Zabbix Server。
Hostname:主机名。注意,这里的主机名并不一定要是主机的 hostname,也可以是 IP 或其它有标识性的字符串,只要保证这个配置在 Zabbix Server 监控的主机内全局唯一即可。Hostname 只适用于主动模式,被动模式下无需设置。
(3)配置服务管理脚本:
# vim /usr/src/zabbix/misc/init.d/fedora/core5/zabbix_agentd ... ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_agentd" CONGIG_FILE="/usr/local/zabbix/etc/zabbix_agentd.conf" ... start() { echo -n $"Starting $prog: " daemon $ZABBIX_BIN -c $CONGIG_FILE ... # cp /usr/src/zabbix/misc/init.d/fedora/core5/zabbix_agentd /etc/init.d/
(4)启动 Zabbix Agent:
# service zabbix_agentd start
(5)设置开机自启动:
# chkconfig zabbix_agentd on