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
角色 IP OS Zabbix 版本 Zabbix Server 10.0.0.228 CentOS 7.9 Zabbix 6.0.2 Zabbix Agent 10.0.0.232 CentOS 7.9 Zabbix 6.0.2
下面开始安装 Zabbix Server,具体步骤如下。
关闭防火墙和 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
# useradd mysql
# vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
编辑 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)依赖性检查。
因为我们的演示环境 Zabbix Server 和数据库是在一台主机上部署,所以,这里 Database host 设置的是 127.0.0.1。生成环境建议分开部署。
(4)设置 Zabbix Server 信息
(5)检查配置是否正确。
(6)安装页面
进入Zabbix的登录界面,默认的用户名为Admin,密码为zabbix,管理员权限。
登录成功后的页面如下所示:
同样的源码包,在被监控主机(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