ZABBIX使用Oracle数据库作为后端

1. 环境准备

1.1 准备安装环境

操作系统:RedHat Enterprise Linux 6.8 x64

ZABBIX:ZABBIX 3.4.6

数据库:Oracle 12c

PHP:PHP7.2

Nginx: Nginx 1.12.2

所需操作系统用户:root zabbix oracle nginx

下文中部分操作需要使用特定操作系统用户,请注意确认操作的系统用户。

1.2 准备编译环境

1.2.1 配置操作系统

使用root用户登录系统,并依次执行如下操作:

关闭SElinux

vim /etc/sysconfig/selinux

enforcing改为disabled,如图所示:

停止防火墙:

chkconfig iptables off
service iptables stop

Copy

重启系统:

reboot

1.2.2 解决依赖关系

使用root用户登录系统,并执行如下操作:

安装所需包,解决编译安装依赖关系:

yum -y groupinstall "Development Tools"
yum -y install vim ftp wget libxml2-devel libpng-devel freetype-devel libjpeg-devel libxml2-devel libpng-devel freetype-devel libjpeg-devel unixODBC* net-snmp* libssh2* OpenIPMI* openjdk*  openldap* libcurl* libxml2* ncurses-devel libevent2
yum -y install libcurl-devel libXpm-devel libjpeg-devel libpng-devel freetype-devel libicu-devel openldap-devel.i686 libmcrypt-devel bzip2-devel openldap-devel.i686

安装五个孤立包(如使用光盘yum源,可能缺少如下包,可按照下列方法安装):

yum install http://mirrors.ustc.edu.cn/centos/6/os/x86_64/Packages/OpenIPMI-devel-2.0.16-14.el6.x86_64.rpm
yum install http://mirrors.ustc.edu.cn/centos/6/os/x86_64/Packages/libssh2-devel-1.4.2-2.el6_7.1.x86_64.rpm
yum install http://mirrors.ustc.edu.cn/centos/6/os/x86_64/Packages/libevent2-devel-2.0.21-2.el6.x86_64.rpm
yum install http://mirrors.ustc.edu.cn/centos/6/os/x86_64/Packages/pcre-devel-7.8-7.el6.x86_64.rpm
yum install http://mirrors.ustc.edu.cn/centos/6/os/x86_64/Packages/libicu-devel-4.2.1-14.el6.x86_64.rpm

1.2.3 下载编译需要的源码包

编译ZABBIX需要:

ZABBIX源代码:

https://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.4.6/zabbix-3.4.6.tar.gz

fping(支持ZABBIX Web监控):

https://github.com/schweikert/fping/archive/v4.0.tar.gz

libssh2:

https://www.libssh2.org/download/libssh2-1.8.0.tar.gz

编译Nginx需要:

Nginx源代码:

https://nginx.org/download/nginx-1.12.2.tar.gz

Pcre源代码:

ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz

Zlib源代码:

https://zlib.net/zlib-1.2.11.tar.gz

Openssl源代码:

https://www.openssl.org/source/openssl-1.1.0g.tar.gz

编译PHP需要:

PHP源代码:

http://cn2.php.net/distributions/php-7.2.1.tar.gz

1.2.4 创建及配置编译用户

创建zabbix用户

useradd zabbix
passwd zabbix

修改用户环境变量:

su – zabbix
vim ~/.bash_profile

加入如下内容:

#ORACLE_HOME请根据实际情况修改
ORACLE_HOME=/database/app/oracle
PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export ORACLE_HOME
export PATH
export LD_LIBRARY_PATH

将下载好的源码包放入/home/zabbix/packages目录,解压备用。

package目录下的包文件应如下图:

2. 配置数据库

2.1 创建数据库

使用oracle用户连接服务器,并运行:

dbca

按照如下组图所示,创建数据库:

密码强度如不符合Oracle要求,会弹出警告框,建议设置符合密码强度要求的密码。
如不想设置高强度密码,按Yes下一步即可。

开始创建数据库,请等待数据库创建完成。

创建监听:

netca

编辑$ORACLE_HOME/network/admin/tnsnames.ora文件

写入如下内容:

#文件内容需要根据实际情况修改

ZABBIX =
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.90.113)(PORT = 1521))
   )
   (CONNECT_DATA =
     (SERVICE_NAME = zabbix.digeekao.local)
   )
 )

创建数据库用户:

请根据实际情况更改密码,用户名等参数。

sqlplus / as sysdba

SQL> alter session set container=zabbix;

Session altered.

SQL> create user zabbix identified by zabbix;

User created.

SQL> grant dba to zabbix;

Grant succeeded.

SQL>exit

2.2 初始化数据库

使用root用户登录服务器,依次执行下列命令初始化数据库:

准备脚本:

cp /home/zabbix/packages/zabbix-3.4.6/database/oracle/*  /home/oracle/

cp -r /home/zabbix/packages/zabbix-3.4.6/misc/images  /home/oracle/

schema.sql脚本中字符类型nvarchar2修改为varchar2

sed -i 's/nvarchar2/varchar2/g'  /home/oracle/schema.sql

修改images.sql中图片的位置:

修改image_dir路径,如下图:

框选部分请根据实际情况修改。

修改权限:

chown -R oracle:oinstall /home/oracle/images
chown -R oracle:oinstall /home/oracle/*.sql

使用oracle用户登录服务器,登录数据库:

sqlplus zabbix/zabbix@zabbix

确认连接无误:

SQL> show con_name;

CON_NAME

------------------------------

ZABBIX

SQL> show user;

USER is "ZABBIX"

SQL>

执行初始化脚本:

SQL>@/home/oracle/schema.sql;
SQL>@/home/oracle/images.sql;
SQL>@/home/oracle/data.sql;
SQL>commit;
注意观察有无报错,如一切正常,则代表数据库初始化完毕。

3. 编译安装ZABBIX Server

切换到zabbix用户,运行以下命令,进入源代码目录:

cd /home/zabbix/packages
tar –xvf libssh2-1.8.0.tar.gz
cd /home/zabbix/packages/zabbix-3.4.6

配置编译参数如下:

./configure \
 --enable-server \
 --with-openipmi \
 --with-ssh2 \
 --with-net-snmp \
 --with-libcurl \
 --with-libxml2 \
 --prefix=/home/zabbix/zabbix-server \
 --with-oracle \
 --with-oracle-lib

如一切正常,应出现如下图提示:

执行编译命令,并安装:

make
make install

4. 编译安装PHP

zabbix用户下执行如下命令:

cd /home/zabbix/packages
tar -xvf php-7.2.1.tar.gz
cd cd /home/zabbix/packages/php-7.2.1

配置编译参数如下:

./configure --prefix=/opt/php7 \
 --with-config-file-path=/opt/php7/etc \
 --with-config-file-scan-dir=/opt/php7/etc/conf.d \
 --enable-bcmath \
 --with-bz2 \
 --with-curl \
 --enable-filter \
 --enable-fpm \
 --with-gd \
 --with-freetype-dir \
 --with-jpeg-dir \
 --with-png-dir \
 --enable-intl \
 --enable-mbstring \
 --enable-mysqlnd \
 --enable-opcache \
 --with-openssl \
 --enable-simplexml \
 --with-sqlite3 \
 --enable-xmlreader \
 --enable-xmlwriter \
 --enable-zip \
 --with-zlib \
 --enable-ctype \
 --with-libxml-dir \
 --enable-sockets \
 --with-gettext \
 --with-ldap \
 --with-oci8=$ORACLE_HOME

如一切正常,应出现如下图提示:

执行编译命令,并安装:

make

#运行make test检测编译是否完整

make test

#使用root用户执行make install

make install

5. 编译安装Nginx

zabbix用户下执行如下命令:

cd /home/zabbix/packages/
tar -xvf pcre-8.41.tar.gz
tar -xvf zlib-1.2.11.tar.gz
tar -xvf openssl-1.1.0g.tar.gz
tar -xvf nginx-1.12.2.tar.gz
cd /home/zabbix/packages/nginx-1.12.2

配置编译参数如下:

./configure \
  --prefix=/opt/nginx \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-pcre=../pcre-8.41 \
  --with-pcre-jit \
  --with-zlib=../zlib-1.2.11 \
  --error-log-path=/var/log/nginx-error.log \
  --http-log-path=/var/log/nginx-access.log \
  --with-openssl=../openssl-1.1.0g

如一切正常,应出现如下图提示:

执行编译命令,并安装:

make

#使用root用户执行make install

make install

6. 安装后配置

6.1 配置ZABBIX Server

编辑/home/zabbix/zabbix-server/etc,修改如下选项:

LogFile=/home/zabbix/zabbix-server/zabbix_server.log
DBName=zabbix.digeekao.local
DBUser=zabbix
DBPassword=zabbix
DBPort=1521
参数部分请按照实际情况填写。

zabbix-server注册为系统服务(可选):

推荐将zabbix-server注册为系统服务并使用chkconfig工具进行控制。

切换到root用户,执行下列命令:

cp /home/zabbix/packages/zabbix-3.4.6/misc/init.d/fedora/core5/zabbix_server /etc/init.d/

修改/etc/init.d/zabbix_server文件:

vi /etc/init.d/zabbix_server

更改zabbix-server可执行文件目录:

#请按照实际情况修改
./home/zabbix/.bash_profile
ZABBIX_BIN="/home/zabbix/zabbix-server/sbin/zabbix_server"

zabbix_server注册为系统服务:

chkconfig --add zabbix_server
chkconfig --list zabbix_server

即可如下命令启动zabbix_server

service zabbix_server start

6.2 配置PHP-FPM

创建php-fpm.conf

cp /opt/php7/etc/php-fpm.conf.default /opt/php7/etc/php-fpm.conf
vi /opt/php7/etc/php-fpm.conf

修改以下配置项目:

error_log = /opt/php7/var/log/php-fpm-error.log
log_level = warning

加入如下配置:

#根据实际情况修改
env[ORACLE_HOME] = /database/app/oracle

创建www.conf:

cp /opt/php7/etc/php-fpm.d/www.conf.default /opt/php7/etc/php-fpm.d/www.conf
vi /opt/php7/etc/php-fpm.d/www.conf

修改以下配置项目:

user = zabbix
group = zabbix
listen = /var/php-fpm.sock
listen.owner = zabbix
listen.group = zabbix
listen.mode = 0660
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 30
php_admin_value[error_log] = /opt/php7/var/log/fpm-php.www-error.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M

php-fpm安装为系统服务(可选):

创建/etc/init.d/php-fpm文件,写入如下内容:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          php-fpm
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-fpm
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO

prefix=/opt
exec_prefix=/opt

php_fpm_BIN=/opt/php7/sbin/php-fpm
php_fpm_CONF=/opt/php7/etc/php-fpm.conf
php_fpm_PID=/opt/php7/var/run/php-fpm.pid


php_opts="--fpm-config $php_fpm_CONF"


wait_for_pid () {
        try=0

        while test $try -lt 35 ; do

                case "$1" in
                        'created')
                        if [ -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;

                        'removed')
                        if [ ! -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
                esac

                echo -n .
                try=`expr $try + 1`
                sleep 1

        done

}


case "$1" in
        start)
                echo -n "Starting php-fpm "

                $php_fpm_BIN $php_opts

                if [ "$?" != 0 ] ; then
                        echo " failed"
                        exit 1
                fi

                wait_for_pid created $php_fpm_PID

                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;

        stop)
                echo -n "Gracefully shutting down php-fpm "

                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi

                kill -QUIT `cat $php_fpm_PID`

                wait_for_pid removed $php_fpm_PID

                if [ -n "$try" ] ; then
                        echo " failed. Use force-quit"
                        exit 1
                else
                        echo " done"
                fi
        ;;

        force-quit)
                echo -n "Terminating php-fpm "

                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi

                kill -TERM `cat $php_fpm_PID`

                wait_for_pid removed $php_fpm_PID

                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;

        restart)
                $0 stop
                $0 start
        ;;

        reload)

                echo -n "Reload service php-fpm "

                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi

                kill -USR2 `cat $php_fpm_PID`

                echo " done"
        ;;

        *)
                echo "Usage: $0 {start|stop|force-quit|restart|reload}"
                exit 1
        ;;

esac
请注意修改脚本中的路径等变量。

6.3 配置Nginx

使用root用户操作

vim /opt/nginx/conf/nginx.conf

修改如下参数:

user  zabbix;
worker_processes  auto;cd make
error_log  logs/error.log info;

events {
   worker_connections  1024;
}

http {
   include       mime.types;
   default_type  application/octet-stream;
   access_log  logs/access.log;
   sendfile        on;
   tcp_nopush     on;
   keepalive_timeout  65;
   include /opt/nginx/conf/conf.d/*.conf;
   gzip  on;
}

其余参数可删除或注释掉。

mkdir /opt/nginx/conf/conf.d
vim /opt/nginx/conf/conf.d/zabbix.conf

写入如下内容:

server {
   listen       80;
   server_name  此处填写服务器域名或IP;
   root   /opt/nginx/html;
   index index.php index.html index.htm;

   location / {
       try_files $uri $uri/ =404;
   }
   error_page 404 /404.html;
   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
       root /opt/nginx/html;
   }

   location ~ \.php$ {
       try_files $uri =404;
       fastcgi_pass unix:/var/php-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PHP_VALUE "post_max_size = 16M
                                memory_limit = 128M
                                max_execution_time = 300
                                date.timezone = Asia/Shanghai";
       include fastcgi_params;
   }
}

nginx安装为系统服务(可选)。
创建/etc/init.d/nginx文件,写入如下内容:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/opt/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE=/opt/nginx/conf/nginx.conf

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
请注意修改脚本中的路径等变量。

6.4 安装ZABBIX前端

复制ZABBIX前端到Nginx网站目录下:

cp -r /home/zabbix/packages/zabbix-3.4.6/frontends/php /opt/nginx/html/zabbix/
chown -R zabbix:zabbix zabbix/

6.5 启动服务

请严格按照下文描述的顺序启动各组件,启动顺序错误可能导致组件报错。

6.5.1启动数据库

oracle用户下执行:

sqlplus / as sysdba
SQL>startup
SQL>alter pluggable database zabbix open;
SQL>exit

6.5.2 启动php-fpm及Nginx

root用户下执行:

service php-fpm start
service nginx start

6.6 配置ZABBIX前端

所有服务启动完毕后,浏览http://IP:port/zabbix

可以看到如下图所示页面:

点击Next step继续:

确认所有条件均满足,点击Next step继续:

填写数据库连接信息,点击Next step继续:

填写ZABBIX Server安装服务器信息,点击Next step继续:

确认设置信息,无误点击Next step继续:

安装完成:

进入登录页面,默认用户名为Admin,密码为zabbix

用户名和密码均区分大小写。

登录后页面如下:

评论

上一篇
下一篇