基于LNMP的zabbix4.4源码编译安装

杂记

监控系统是产品生命周期中非常重要的一环,监控系统的完善,将决定运维工作是否能高效的开展。

之前在某市GA担任大数据系统维护工作,服务器1000台左右,系统与数据量都比较庞大,导致经常出现故障,维护时间、人力成本都大大增加,接手时竟没有一套完整的监控系统,每天做的就是手动各个数据流的情况,并用表格记录,尽管后续使用脚本巡检,但还是力不从心。后续才搭建了Zabbix监控系统,配合短信报警,大大提高运维效率。

基于LNMP的zabbix4.4源码编译安装

一、监控架构

目前主流的监控系统技术栈,从数据源采集到的数据,通过缓冲队列存储到数据库中,再通过图表展示。监控告警也只占了其中一部分。

基于LNMP的zabbix4.4源码编译安装

Zabbix 基于web页面提供分布式的开源监控系统,可以基于SNMP、IPMI监控硬件;基于Zabbix agent监控各种网络、服务、系统、web、日志、流量等参数

  • 优点:部署方便快捷、可以自动发现注册设备、可以分布式监控、开放式接口
  • 缺点:mysql作为底层数据库,压力较大;需要在监控主机安装agent;对容器不友好

基于LNMP的zabbix4.4源码编译安装

Zabbix 各组件说明

  • Zabbix Web GUI:提供Web界面

  • Zabbix Database:提供数据存储功能,专用于存储配置信息,以及采集到的数据

  • Zabbix Server:接收Agent采集数据的核心组件。

  • Zabbix Agent:部署在被监控主机上,用于采集本地数据。

  • Zabbix Proxy:当被监控节点较多时,用于减轻Server压力的组件,也用于分布式监控系统。由Proxy接收数据后统一发送至Server。

二、LNMP安装

由于Zabbix是基于web界面的监控系统,首先给Zabbix安装LNMP/LAMP

1.关闭防火墙

setenforce 0        #临时关闭SELinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  #永久关闭SELinux(重启生效)

systemctl stop firewalld.service    #临时关闭防火墙

systemctl disable firewalld.service    #永久关闭防火墙

2.Nginx编译安装

yum install gcc gcc-c++ glibc pcre-devel  zlib-devel openssl-devel -y
wget -c http://nginx.org/download/nginx-1.19.1.tar.gz
tar -xzf nginx-1.19.1.tar.gz
cd nginx-1.19.1
useradd www
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install

添加开机启动项

echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

启动nginx

/usr/local/nginx/sbin/nginx

基于LNMP的zabbix4.4源码编译安装

3.mysql编译安装

创建mysql用户

useradd -s /sbin/nologin mysql
mkdir -p /data/mysql 
chown -R mysql:mysql /data/mysql

源码下载

yum install cmake ncurses-devel ncurses –y
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25.tar.gz
wget http://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz  
tar -xzvf  boost_1_59_0.tar.gz 
tar -xzvf  mysql-5.7.25.tar.gz

编译安装

cd mysql-5.7.25

cmake  .   -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=../boost_1_59_0 \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0

安装

make && make install

添加环境变量

echo -e '\n\nexport PATH=/usr/local/mysql/bin:$PATH\n' >> /etc/profile && source /etc/profile

添加启动项

\cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
systemctl enable mysqld

修改配置文件/etc/my.conf

[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
socket = /tmp/mysql.sock
expire_logs_days = 10
max_binlog_size = 100M
slow_query_log = 1
slow_query_log_file = slow-query.log
long-query_time = 2
log-error = error.log
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M 

初始化mysql

mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

启动mysql

systemctl start mysqld

4.php编译安装

下载依赖

yum -y install epel-release
yum install gcc gcc-c++ gcc-g77 make libtool autoconf patch unzip automake libxml2 libxml2-devel ncurses ncurses-devel libtool-ltdl-devel libtool-ltdl libmcrypt libmcrypt-devel libpng libpng-devel libjpeg-devel openssl openssl-devel gd-devel curl curl-devel libxml2 libxml2-devel libicu-devel ncurses ncurses-devel libtool-ltdl-devel libtool-ltdl autoconf automake libaio* sqlite-devel libcurl-devel libxslt libxslt-devel freetype freetype-devel -y

添加用户

groupadd www
useradd -g www www

源码下载

wget http://www.php.net/distributions/php-7.4.8.tar.gz

解压安装

tar -xzvf php-7.4.8.tar.gz

cd php-7.4.8

./configure --prefix=/usr/local/php \
--with-config-file-path=/etc \
--with-fpm-user=www \
--with-fpm-group=www \
--with-curl \
--with-freetype \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-libdir=lib64 \
--with-mysqli \
--with-openssl \
--with-external-pcre \
--with-pdo-mysql \
--with-pdo-sqlite \
--with-pear \
--with-iconv-dir \
--with-ldap \
--with-jpeg \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--with-zip \
--with-bz2 \
--with-mhash \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mysqlnd \
--enable-fpm \
--enable-gd \
--enable-bcmath \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-shared \
--enable-soap \
--enable-intl \
--enable-ftp \
--enable-sockets \
--enable-sysvsem \
--enable-maintainer-zts \
--enable-xml \
--enable-fpm \
--without-gdbm

基于LNMP的zabbix4.4源码编译安装
安装

make && make install

基于LNMP的zabbix4.4源码编译安装


编译错误解决

错误提示一:

configure: error: Package requirements (libzip >= 0.11) were not met: No package 'libzip'

解决方法:

#php 7.4需要libzip的版本在1.2.0及以上,重新编译安装libzip
yum install  cmake cmake3 -y
wget https://libzip.org/download/libzip-1.5.0.tar.gz
tar -zxvf libzip-1.5*
cd libzip-1.5*
mkdir build && cd build && cmake3 .. && make && make install

错误提示二:

基于LNMP的zabbix4.4源码编译安装

解决方法:

wget https://ftp.pcre.org/pub/pcre/pcre2-10.34.tar.gz
tar -xzvf pcre2-10.34.tar.gz
cd pcre2-10.34/
./configure --enable-pcre2-16 \
--enable-pcre2-32 \
--enable-jit \
--enable-jit-sealloc

make && make install
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/

错误提示三:

基于LNMP的zabbix4.4源码编译安装

解决方法:

cp -frp /usr/lib64/libldap* /usr/lib/ # 不复制会编译报错

错误提示四:

基于LNMP的zabbix4.4源码编译安装

解决方法:

由于--enable-mbstring模块需要正则表达式 oniguruma oniguruma-devel 模块

yum install -y  http://mirror.centos.org/centos-7/7.8.2003/cloud/x86_64/openstack-queens/Packages/o/oniguruma-6.7.0-1.el7.x86_64.rpm

yum install -y  http://mirror.centos.org/centos-7/7.8.2003/cloud/x86_64/openstack-queens/Packages/o/oniguruma-devel-6.7.0-1.el7.x86_64.rpm

错误提示五:

基于LNMP的zabbix4.4源码编译安装

提示/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol 'ber_strdup'

解决方法:

vi Makefile在开头是EXTRA_LIBS行尾加上 -llber,存盘退出

基于LNMP的zabbix4.4源码编译安装

安装完成


拷贝配置启动文件

cp php.ini-development /etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod o+x /etc/init.d/php-fpm
ln -s /usr/local/php/bin/php /usr/local/bin
ln -s /usr/local/php/sbin/php-fpm /usr/local/sbin

添加环境变量

vim /etc/profile
        export PATH=$PATH:/usr/local/php/bin
source /etc/profile

php-fpm加入systemctl管理

vim /usr/lib/systemd/system/php-fpm.service

[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
[Install]
WantedBy=multi-user.target

添加开机启动项,并启动php-fpm

systemctl enable php-fpm

systemctl start php-fpm 或者 /usr/local/php/sbin/php-fpm
基于LNMP的zabbix4.4源码编译安装

另外:

php7源码安装的。php-fpm在PHP 5.3.2以后的版本不支持以前的php-fpm (start|restart|stop|reload) 
重启
kill -SIGUSR2  进程ID

5.修改nginx配置文件,支持php,修改如下,其他不用修改

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;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

基于LNMP的zabbix4.4源码编译安装

重启nginx

/usr/local/nginx/sbin/nginx -s reload

添加php测试页面

cat>/usr/local/nginx/html/index.php<<EOF
<?php
 phpinfo();
php?>
EOF

基于LNMP的zabbix4.4源码编译安装

三、Zabbix_Server安装

1.安装依赖(php安装过则忽略)

yum -y install curl curl-devel net-snmp net-snmp-devel perl-DBI libven-devel libevent libevent-devel OpenIPMI OpenIPMI-devel ipmitool freeipmi

2.创建操作系统用户Zabbix

groupadd zabbix

useradd -g zabbix -s /sbin/nologin zabbix

3.下载源码安装包安装

https://www.zabbix.com/cn/download_sources#tab:unsupported

基于LNMP的zabbix4.4源码编译安装

上传解压编译

tar -xzvf zabbix-4.4.10.tar.gz 
cd zabbix-4.4.10/

./configure --prefix=/usr/local/Zabbix --sysconfdir=/usr/local/Zabbix/etc/ --enable-server --enable-agent --with-net-snmp  --with-openipmi --with-libcurl --with-mysql=/usr/local/mysql/bin/mysql_config --with-libxml2 --with-mysqli

make && make install

基于LNMP的zabbix4.4源码编译安装

4.拷贝修改启动文件

ln -s /usr/local/zabbix/sbin/zabbix_* /usr/local/sbin/

cp misc/init.d/tru64/zabbix_server /etc/init.d/zabbix_server
修改启动文件的路径

chmod o+x /etc/init.d/zabbix_server
#路径与编译安装的路径保持一致
vim /etc/rc.d/init.d/zabbix_server

基于LNMP的zabbix4.4源码编译安装

如果未修改会报如下错误

基于LNMP的zabbix4.4源码编译安装

5.配置zabbix数据库

登录mysql数据库

注意新版本不要使用create database zabbix charset=utf8; 不然zabbix会报错

create database zabbix character set utf8 collate utf8_bin;

grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'Huawei12#$';

flush privileges;

6.导入zabbix数据库

进入源码文件夹

cd zabbix-4.4.10

#注意要按顺序导入
mysql -uzabbix -pHuawei12#$ zabbix <database/mysql/schema.sql

mysql -uzabbix -pHuawei12#$ zabbix <database/mysql/images.sql

mysql -uzabbix -pHuawei12#$ zabbix <database/mysql/data.sql

7.修改zabbix配置文件

cd /usr/local/Zabbix/etc

mv zabbix_server.conf zabbix_server.conf.bak

vim zabbix_server.conf

LogFile=/tmp/Zabbix_server.log
DebugLevel=3
#账号密码和第5步中创建的保持一致
DBName=zabbix
DBUser=zabbix
DBPassword=Huawei12#$
DBPort=3306
StartPollers=10
StartTrappers=80
StartPingers=20
StartDiscoverers=15
StartTimers=5
HousekeepingFrequency=1
MaxHousekeeperDelete=500
CacheSize=128M
CacheUpdateFrequency=75
StartDBSyncers=10
HistoryCacheSize=32M
HistoryIndexCacheSize=16M
ValueCacheSize=32M
Timeout=30
UnreachablePeriod=120
LogSlowQueries=3000

8.重启zabbix服务

/etc/init.d/zabbix_server restart

四、初始化zabbix_Server

1.将zabbix php文件拷贝到nginx发布目录

cd zabbix-4.4.10

cp -a frontends/php/* /usr/local/nginx/html/

基于LNMP的zabbix4.4源码编译安装

基于LNMP的zabbix4.4源码编译安装

提示php有报错,修改vim /etc/php.ini根据报错信息更改参数即可


另外如果缺少php模块,

基于LNMP的zabbix4.4源码编译安装

  1. 进入php源码包中,找到需要安装的扩展模块目录。
    cd /root/php-7.4.8/ext/gd

  2. 在扩展模块目录,运行phpize程序。
    /usr/local/php/bin/phpize

  3. 进行编译安装。
    ./configure --with-php-config=/usr/local/php/bin/php-config --with-external-gd --with-jpeg --with-freetype

  4. make && make install

    可以看到gd.so就出来了

基于LNMP的zabbix4.4源码编译安装

然后配置vim /usr/local/php/etc/php.ini,将该模块释放

基于LNMP的zabbix4.4源码编译安装


2.修改完重启php-fpm

kill -SIGUSR2 进程ID

基于LNMP的zabbix4.4源码编译安装

已经显示正常

基于LNMP的zabbix4.4源码编译安装

基于LNMP的zabbix4.4源码编译安装

基于LNMP的zabbix4.4源码编译安装

基于LNMP的zabbix4.4源码编译安装

3.下载配置文件

保存至/usr/local/nginx/html/conf/zabbix.conf.php

基于LNMP的zabbix4.4源码编译安装

基于LNMP的zabbix4.4源码编译安装

默认账号密码 Admin/zabbix

基于LNMP的zabbix4.4源码编译安装

设置为中文

基于LNMP的zabbix4.4源码编译安装

基于LNMP的zabbix4.4源码编译安装

提示报错 无法连接zabbix_server

查看日志,提示无法找到mysql.sock

基于LNMP的zabbix4.4源码编译安装

查看mysql配置文件

基于LNMP的zabbix4.4源码编译安装

路径不一致,做个软连接即可

mkdir /var/lib/mysql

 ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

/etc/rc.d/init.d/mysqld restart

五、配置zabbix_agent

1.客户端添加zabbix用户

useradd zabbix -s /sbin/nologin

2.将zabbix源码包传至其他客户端

tar -zxvf zabbix-4.4.10.tar.gz

cd zabbix-4.4.10

3.编译安装agent

./configure --prefix=/usr/local/zabbix --enable-agent
make && make install

ln -s /usr/local/zabbix/sbin/zabbix_* /usr/local/sbin/

4.修改zabbix_agent配置文件

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

LogFile=/tmp/zabbix_agentd.log
#填写服务器IP
Server=192.168.197.128
#填写服务器IP
ServerActive=192.168.197.128
#填写客户端IP,由于是监控本机所有还是server服务器
#hostname与zabbix中配置的主机名一致,不然会报错(一般写agent的Ip)
Hostname = Zabbix server

5.拷贝启动文件并修改路径

cp misc/init.d/tru64/zabbix_agentd /etc/init.d/zabbix_agentd

chmod o+x /etc/init.d/zabbix_agentd

sed -i 's%/usr/local/sbin/zabbix_agentd%/usr/local/zabbix/sbin/zabbix_agentd%g' /etc/init.d/zabbix_agentd

基于LNMP的zabbix4.4源码编译安装

6.客户端zabbix_agent启动

/etc/init.d/zabbix_agentd start

7.zabbix_server web配置添加agent

基于LNMP的zabbix4.4源码编译安装

基于LNMP的zabbix4.4源码编译安装

基于LNMP的zabbix4.4源码编译安装

基于LNMP的zabbix4.4源码编译安装

显示两个可用,添加正常