Zabbix 简介

zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
zabbix 由 zabbix server 与可选组件 zabbix agent 两部分组成。
zabbix server 可以通过 SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视。
zabbix agent 需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。

Zabbix的主要特点

  • 安装与配置简单,学习成本低
  • 支持多语言(包括中文)
  • 免费开源
  • 自动发现服务器与网络设备
  • 分布式监视以及 WEB 集中管理功能
  • 可以无 agent 监视
  • 用户安全认证和柔软的授权方式
  • 通过 WEB 界面设置或查看监视结果
  • email 等通知功能

Zabbix主要功能

  • CPU 负荷
  • 内存使用
  • 磁盘使用
  • 网络状况
  • 端口监视
  • 日志监视

安装环境说明

Zabbix 需要 LAMP 或者 LNMP 环境,此处选择 LNMP

操作系统

CentOS 7.6

IP 地址

192.168.10.101

Web 环境

nginx+MySQL+php-fpm

Nginx版本

nginx 1.14

MySQL版本

mysql 8.0

PHP版本

php 7.3

Zabbix版本

zabbix 4.0 LTS

先部署 LNMP 环境,然后再安装 Zabbix

安装 LNMP

安装 MySQL

(1)创建 mysql 用户,mysql 数据目录,日志目录,socket 和 pid 文件存放目录

groupadd -r -g 306 mysql
useradd -r -u 306 -g 306 -s /sbin/nologin -d /data/mysql -c "MySQL Server" mysql
mkdir -pv /data/mysql /var/log/mysql /var/lib/mysql
chown mysql.mysql /data/mysql /var/log/mysql /var/lib/mysql

(2)去官网 https://dev.mysql.com/downloads/mysql/ 下载 MySQL 的二进制安装包,这里下载的是 mysql-8.0.14-linux-glibc2.12-x86_64.tar.xz

tar xf mysql-8.0.14-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
cd /usr/local/ && ln -sv mysql-8.0.14-linux-glibc2.12-x86_64 mysql
chown -R root.root /usr/local/mysql/

(3)初始化 mysql 数据

yum install libaio-devel -y
/usr/local/mysql/bin/mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/data/mysql --user=mysql

(4)设置 mysql 配置文件

cat << EOF | tee /etc/my.cnf
[client]
port=3306
socket=/var/lib/mysql/mysql.sock
[mysqld]
user=mysql
port=3306
socket=/var/lib/mysql/mysql.sock
mysqlx-port=33060
mysqlx-socket=/var/lib/mysql/mysqlx.sock
basedir=/usr/local/mysql
datadir=/data/mysql
innodb-file-per-table=1
skip-name-resolve=1
max-connections=10000
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password
[mysqld_safe]
log-error=/var/log/mysql/mysqld.log
pid-file=/var/lib/mysql/mysqld.pid
EOF

(5)修改 mysqld 启动脚本,使其和上面的配置文件定义相符

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sed -i 's@^basedir=.*@basedir=/usr/local/mysql@' /etc/init.d/mysqld
sed -i 's@^datadir=.*@datadir=/data/mysql@' /etc/init.d/mysqld 
sed -i 's@^mysqld_pid_file_path=.*@mysqld_pid_file_path=/var/lib/mysql/mysqld.pid@' /etc/init.d/mysqld

(6)启动 mysql

ln -sv /usr/local/mysql/bin/* /usr/bin/

chkconfig --add mysqld
chkconfig mysqld on
/etc/init.d/mysqld start

安装 php-fpm

(1)安装编译 php-fpm 依赖包

yum install gcc pcre-devel openssl-devel zlib-devel expat-devel libxml2-devel \
libjpeg-devel libpng-devel openldap-devel gd-devel mariadb-devel -y

(2)创建 www 用户,php-fpm 和 nginx 都以此用户启动

groupadd -r -g 80 www
useradd -r -u 80 -g 80 -s /sbin/nologin -c "Web Service" www

(3)编译安装 php-fpm

去官网下载 http://www.php.net/downloads.php 下载 php 源码包,这里下载的是 php-7.3.1.tar.xz

tar xf php-7.3.1.tar.xz -C /usr/local/src/
cd /usr/local/src/php-7.3.1/

./configure \
--prefix=/usr/local/php \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--with-gd \
--with-ldap \
--with-openssl \
--with-gettext \
--enable-sockets \
--enable-mbstring \
--enable-xml \
--enable-bcmath \
--with-config-file-path=/usr/local/php/etc \
--with-config-file-scan-dir=/usr/local/php/etc/php.d 

make && make install

configure 时出现如下错误

configure: error: Cannot find ldap libraries in /usr/lib.

将 ldap 的相关模块链接到 /usr/lib/ 目录下

ln -sv /usr/lib64/libldap* /usr/lib/

然后重新执行 configure

make 时出现如下错误

//usr/lib64/liblber-2.4.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1

可用如下方法解决,在 Makefile 的 EXTRA_LIBS 字段最后面添加 -llber 即可

sed -i '/^EXTRA_LIBS/s/$/ -llber/' /usr/local/src/php-7.3.1/Makefile

然后执行 make clean ,再重新 make 即可

(4)准备启动脚本和配置文件

cd /usr/local/src/php-7.3.1/
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/

mkdir /usr/local/php/etc/php.d
cp php.ini-production /usr/local/php/etc/php.ini
cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf

(5)启动 php-fpm

ln -sv /usr/local/php/bin/* /usr/bin/
ln -sv /usr/local/php/sbin/* /usr/sbin/

systemctl daemon-reload 
systemctl enable php-fpm.service
systemctl start php-fpm.service

安装 nginx

(1)安装编译 nginx 所依赖的安装包

yum install gcc pcre-devel openssl-devel zlib-devel -y

(2)编译安装 nginx

去官网 http://nginx.org/en/download.html 下载 nginx 源码包,这里下载的是 nginx-1.14.2.tar.gz

tar xf nginx-1.14.2.tar.gz -C /usr/local/src/
cd /usr/local/src/nginx-1.14.2/

./configure \
--prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_dav_module \
--with-http_stub_status_module \
--with-threads \
--with-file-aio \
--with-stream \
--with-pcre 

make && make install

(3)编译好后修改 nginx 配置文件,使其支持 php

vim /usr/local/nginx/conf/nginx.conf

location / {
            root   html;
            index  index.php index.html index.htm;
}
location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
 }

(5)设置启动文件

cat << EOF | tee /usr/lib/systemd/system/nginx.service
[Unit]
Description=Nginx Server
After=network.target
  
[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit

[Install]
WantedBy=multi-user.target
EOF

(5)启动 nginx

ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/

systemctl daemon-reload
systemctl enable nginx.service
systemctl start nginx.service

(6)检测 LNMP 环境

vim /usr/local/nginx/html/test.php

<?php
    $mysqli = new mysqli('localhost', 'root', '');
    if(!$mysqli)  {
        echo"Failure";
    }
    else{
        echo"OK";
    }
    $mysqli->close();
    phpinfo();
?>

在浏览器输入 http://192.168.10.101/test.php ,出现如下界面,则 LNMP 环境配置成功

zabbix必须要容器吗 zabbix客户端必须要安装吗_zabbix必须要容器吗

配置好 LNMP 环境后,然后安装 Zabbix

Zabbix 的安装与配置

安装 Zabbix

这里即安装 zabbix server,也安装了 zabbix agent,同时开启了监控 java 程序的功能

(1)安装编译 zabbix依赖包

yum install gcc java-1.8.0-openjdk-devel mariadb-devel libxml2-devel net-snmp-devel curl-devel libevent-devel -y

(2)创建 zabbix 用户

groupadd -r -g 151 zabbix
useradd -r -u 151 -g 151 -s /sbin/nologin -c "Zabbix Monitoring" zabbix

(3)编译 zabbix

去 zabbix 官网 https://www.zabbix.com/download_sources 下载 zabbix 源码包 ,这里下载的是 zabbix-4.0.3.tar.gz

tar xf zabbix-4.0.3.tar.gz -C /usr/local/src/
cd /usr/local/src/zabbix-4.0.3/

./configure \
--prefix=/usr/local/zabbix \
--enable-server \
--enable-java \
--enable-agent \
--enable-ipv6 \
--with-mysql \
--with-net-snmp \
--with-libcurl \
--with-libxml2

make && make install

如果不需要监控 java 类的服务,则不需要启用 --enable-java 编译选项

如果是安装 zabbix-proxy,只需将编译选项的 --enable-server 替换成换成 --enable-proxy 即可

如果是仅仅安装 zabbix-agent,只需启用 --enable-agent 一个编译选项即可

配置 zabbix server

(1)创建 zabbix 数据库并导入数据

导入次序依次是 schema.sql,images.sql,data.sql(如果是安装的 zabbix proxy,只需要导入 schema.sql)

mysql> CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
mysql> CREATE USER 'zabbix'@'192.168.10.%' IDENTIFIED BY 'centos';
mysql> GRANT ALL ON zabbix.* TO 'zabbix'@'192.168.10.%';
mysql> exit

mysql zabbix < /usr/local/src/zabbix-4.0.3/database/mysql/schema.sql
mysql zabbix < /usr/local/src/zabbix-4.0.3/database/mysql/images.sql
mysql zabbix < /usr/local/src/zabbix-4.0.3/database/mysql/data.sql

(2)修改 zabbix_server 配置文件

vim /usr/local/zabbix/etc/zabbix_server.conf

ListenPort=10051
LogType=file
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=100
DebugLevel=3
PidFile=/usr/local/zabbix/run/zabbix_server.pid
DBHost=192.168.10.101
DBName=zabbix
DBUser=zabbix
DBPassword=centos
#DBSocket=/var/lib/mysql/mysql.sock
DBPort=3306
StartPollers=5
Timeout=15
LogSlowQueries=3000
User=zabbix
Include=/usr/local/zabbix/etc/zabbix_server.conf.d/*.conf

(3)创建 zabbix 日志和 pid 存放目录

mkdir -pv /var/log/zabbix /usr/local/zabbix/run
chown -R zabbix.zabbix /var/log/zabbix /usr/local/zabbix/

(4)准备 zabbix_server 启动脚本

cp /usr/local/src/zabbix-4.0.3/misc/init.d/fedora/core/zabbix_server /etc/init.d/
sed -i 's@BASEDIR=.*@BASEDIR=/usr/local/zabbix@' /etc/init.d/zabbix_server
sed -i 's@PIDFILE=.*@PIDFILE=/usr/local/zabbix/run/zabbix_server.pid@' /etc/init.d/zabbix_server

(5)启动 zabbix_server

chkconfig --add zabbix_server
chkconfig zabbix_server on
/etc/init.d/zabbix_server start

使用 ss -tnl 查看 10051 端口是否处于监听状态,如果在则表示启动成功

配置 zabbix agent

(1)修改 zabbix agent 配置文件

vim /usr/local/zabbix/etc/zabbix_agentd.conf

PidFile=/usr/local/zabbix/run/zabbix_agentd.pid
LogType=file
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=100
DebugLevel=3
EnableRemoteCommands=0
Server=127.0.0.1
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=3
ServerActive=127.0.0.1
Hostname=192.168.10.101
Timeout=15
AllowRoot=0
User=zabbix
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
UnsafeUserParameters=1

(2)准备 zabbix agent 启动脚本

cp /usr/local/src/zabbix-4.0.3/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
sed -i 's@BASEDIR=.*@BASEDIR=/usr/local/zabbix@' /etc/init.d/zabbix_agentd
sed -i 's@PIDFILE=.*@PIDFILE=/usr/local/zabbix/run/zabbix_agentd.pid@' /etc/init.d/zabbix_agentd

(3)启动 zabbix agent

chkconfig --add zabbix_agentd
chkconfig zabbix_agentd on
/etc/init.d/zabbix_agentd start

使用 ss -tnl 查看 10050 端口是否处于监听状态,如在则表示 zabbix agent 启动成功

(4)测试是否能获取数据

ln -sv /usr/local/zabbix/bin/* /usr/bin/
zabbix_get  -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"

有数据显示则表示获取成功

配置 zabbix web

复制 zabbix 的 php 文件到 /usr/local/nginx/html/zabbix/ 目录下

mkdir /usr/local/nginx/html/zabbix
cd /usr/local/src/zabbix-4.0.3/
cp -r frontends/php/* /usr/local/nginx/html/zabbix/

zabbix web安装向导

(1)在浏览器里输入 http://192.168.10.101/zabbix ,进入 zabbix 的安装向导

zabbix必须要容器吗 zabbix客户端必须要安装吗_php_02

(2)点 Next Steup,出现检查安装要求

zabbix必须要容器吗 zabbix客户端必须要安装吗_zabbix必须要容器吗_03

php 的某些参数不符合要求,按上面图中提示的修改即可,然后重启 php-fpm

cat << EOF | tee /usr/local/php/etc/php.d/zabbix.ini
post_max_size = 16M
max_execution_time = 300
max_input_time = 300 
date.timezone = Asia/Shanghai
EOF

systemctl reload php-fpm.service

之后刷新页面,检查失败的信息会消失,继续点 Next Steup

zabbix必须要容器吗 zabbix客户端必须要安装吗_php_04

(3)填入数据库信息后,继续点 Next Steup

zabbix必须要容器吗 zabbix客户端必须要安装吗_mysql_05

(4)配置 zabbix server 后,继续点 Next Steup

zabbix必须要容器吗 zabbix客户端必须要安装吗_zabbix必须要容器吗_06

(5)信息确认,直接点 Next Steup

zabbix必须要容器吗 zabbix客户端必须要安装吗_php_07

点 Download the configuration file 的链接下载此配置文件,然后保存为 /usr/local/nginx/html/zabbix/conf/zabbix.conf.php 文件,然后刷新页面

zabbix必须要容器吗 zabbix客户端必须要安装吗_mysql_08

(6)点击 Finish 即可完成安装

zabbix必须要容器吗 zabbix客户端必须要安装吗_zabbix必须要容器吗_09

默认账号 Admin/zabbix (注意大小写)

添加中文支持

登入后

zabbix必须要容器吗 zabbix客户端必须要安装吗_zabbix必须要容器吗_10

zabbix必须要容器吗 zabbix客户端必须要安装吗_php_11

修改后,字体是变成中文了,但是图形显示却有乱码

zabbix必须要容器吗 zabbix客户端必须要安装吗_zabbix必须要容器吗_12

默认字体对中文支持不好,因此乱码,需要更改字体。

从 Window 上找到相应的字体(C:\Windows\Fonts 目录下,只支持 ttf 后缀的字体),这里选择的楷体常规

zabbix必须要容器吗 zabbix客户端必须要安装吗_nginx_13

复制到 zabbix server 服务器的 /usr/local/nginx/html/zabbix/fonts/ 目录下

ls /usr/local/nginx/html/zabbix/fonts/
DejaVuSans.ttf  simkai.ttf

修改 /usr/local/nginx/html/zabbix/include/defines.inc.php 关于字体的配置,把 DejaVuSans 换成 simkai(65 和 110 行两处均有)

sed -i 's@DejaVuSans@simkai@g' /usr/local/nginx/html/zabbix/include/defines.inc.php

修改好后刷新页面即可显示正常

zabbix必须要容器吗 zabbix客户端必须要安装吗_nginx_14

至此,Zabbix 安装完成