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

CentOS 7 源码安装 Zabbix 6.0-LMLPHP

我这里使用的是源码包。

(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 的地址

CentOS 7 源码安装 Zabbix 6.0-LMLPHP

将默认的语言调整为 Chinese(zh_CN) ,点击下一步。

(2)依赖性检查。

主要是检查 php 的插件、配置是否满足要求。如果不满足,最右边的 OK 将显示为 Fail。

CentOS 7 源码安装 Zabbix 6.0-LMLPHP

(3)配置数据库连接信息。

CentOS 7 源码安装 Zabbix 6.0-LMLPHP

因为我们的演示环境 Zabbix Server 和数据库是在一台主机上部署,所以,这里 Database host 设置的是 127.0.0.1。生成环境建议分开部署。

(4)设置 Zabbix Server 信息

CentOS 7 源码安装 Zabbix 6.0-LMLPHP

(5)检查配置是否正确。

CentOS 7 源码安装 Zabbix 6.0-LMLPHP

(6)安装页面

CentOS 7 源码安装 Zabbix 6.0-LMLPHP

  

进入Zabbix的登录界面,默认的用户名为Admin,密码为zabbix,管理员权限。

CentOS 7 源码安装 Zabbix 6.0-LMLPHP

登录成功后的页面如下所示:

CentOS 7 源码安装 Zabbix 6.0-LMLPHP

安装 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
03-23 15:13