Oracle DBをバックエンドにしてZabbixを動かす

目次

Oracle Cloud上のDBをバックエンドにしてZabbix6.2を動かしてみた時のメモ

きっかけ

Oracle CloudにはAlways Freeという素晴らしい制度があり、VMやマネージドなOracleDBを無料で使うことができる。
そこで、無料枠を活用してZabbixを動かして遊ぼうと思っていたが、以前は無料枠のVMのスペックは低く(vCPU2コア、メモリ1GB)DBをVMの外に出さないと動作が厳しそうだった。
現在ではARM64のVMを選ぶことで、CPU4コア、メモリ24GB(!?)のVMを立てられるようになったため、DBをVMの中に入れても余裕で動くが、せっかくなのでOracleDBを使って動かしてみることにした。

注意

  1. ちゃんとまとめていない本当のメモなので、あくまで遊び用途の参考程度のメモ。

  2. Oracle DBは無料枠でAutonomous DatabaseのWorkload type: Transaction Processingを選択したが、NLS_NCHAR_CHARACTERSETがZabbixサポート外のAL16UTF16になった。とりあえず動いているようだが、変なエラーが出る可能性もあるので注意。

  3. 全てのコマンドはrootで実行している。

環境

  • OS: Ubuntu 22.04.1
  • Zabbix 6.2.6
  • Oracle Instant Client 19.17.0.0.0

Oracle Instant Clientのインストール

今回は /opt/oracle の下にインストールする。ライセンスやバージョンに注意。

  • バイナリのダウンロードと展開

    mkdir -p /opt/oracle
    cd /opt/oracle
    wget https://download.oracle.com/otn_software/linux/instantclient/1917000/instantclient-basic-linux.x64-19.17.0.0.0dbru.zip
    wget https://download.oracle.com/otn_software/linux/instantclient/1917000/instantclient-sqlplus-linux.x64-19.17.0.0.0dbru.zip
    wget https://download.oracle.com/otn_software/linux/instantclient/1917000/instantclient-tools-linux.x64-19.17.0.0.0dbru.zip
    wget https://download.oracle.com/otn_software/linux/instantclient/1917000/instantclient-sdk-linux.x64-19.17.0.0.0dbru.zip
    
    apt install -y unzip
    
    unzip instantclient-basic-linux.x64-19.17.0.0.0dbru.zip
    unzip instantclient-sdk-linux.x64-19.17.0.0.0dbru.zip
    unzip instantclient-sqlplus-linux.x64-19.17.0.0.0dbru.zip
    unzip instantclient-tools-linux.x64-19.17.0.0.0dbru.zip
    
    # PHPから使うために必要
    echo /opt/oracle/instantclient_19_17 > /etc/ld.so.conf.d/oracle-instantclient.conf
    ldconfig
    
  • Oracle CloudからダウンロードしたWalletのzipの中身を /opt/oracle/instantclient_19_17/network/admin の下に展開する。

  • 環境変数を設定

    export PATH=/opt/oracle/instantclient_19_17:$PATH
    export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_17:$LD_LIBRARY_PATH
    export ORACLE_HOME=/opt/oracle/instantclient_19_17
    

Zabbixのビルド

Zabbixが配布しているパッケージではOracle DBをバックエンドにできないため、自分でビルドする。

  • リポジトリの追加とソースコードの取得 (普通にZabbixのダウンロードページからtarを持ってきても良いかも)

    cd /root
    wget https://repo.zabbix.com/zabbix/6.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.2-4%2Bubuntu22.04_all.deb
    dpkg -i zabbix-release_6.2-4+ubuntu22.04_all.deb
    apt update
    apt install dpkg-dev
    apt source zabbix
    
  • ビルドのために依存パッケージのインストール

    apt install devscripts equivs
    cd /root/zabbix-6.2.6
    mk-build-deps -i
    
  • ビルド & インストール

    ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --sysconfdir=/etc/zabbix --libdir=/usr/lib/zabbix --enable-ipv6 --with-libpcre2 --with-openssl --with-ldap --with-net-snmp --with-openipmi --with-libcurl --with-unixodbc --with-libxml2 --with-libevent --with-ssh --enable-server --enable-proxy --with-oracle --with-oracle-include=/opt/oracle/instantclient_19_17/sdk/include --with-oracle-lib=/opt/oracle/instantclient_19_17
    make
    make install
    
    # 本当だったらパッケージにまとめて自動でやってもらうやつ
    addgroup --system --quiet zabbix
    adduser --quiet --system --disabled-login --ingroup zabbix --home /var/lib/zabbix/ --no-create-home zabbix
    mkdir -p /var/log/zabbix
    chown -R zabbix:zabbix /var/log/zabbix
    mkdir -p /run/zabbix
    chown -R zabbix:zabbix /run/zabbix
    

初期設定

  • DBに初期データを追加

    これ: https://www.zabbix.com/documentation/current/en/manual/appendix/install/oracle

    cd database/oracle/
    sqlplus ADMIN/(password)@(サービス名)
    
    SQL> @schema.sql
    SQL> @images.sql
    SQL> @data.sql
    

    結構時間がかかる。

  • 設定追加

    これ(上と同じ): https://www.zabbix.com/documentation/current/en/manual/appendix/install/oracle をみて zabbix_server.conf に設定を書く。
    今回はNet service nameで設定した。
    DBHost をデフォルト値にしていると localhost に繋ぎに行こうとするので、 DBHost= をちゃんと記載する。

    DBHost=
    DBName=(DB名)_tp
    DBPassword=(パスワード)
    DBUser=ADMIN
    
  • 起動

    cd /usr/sbin
    # 一瞬でプロンプトが戻る
    ./zabbix_server
    # 起動してるか確認
    tail /var/log/zabbix/zabbix_server.log
    
  • フロントエンド用の色々

    # パッケージ版のフロントエンドを導入 (依存関係のため)
    apt install zabbix-apache-conf
    
    # PHP用のOracleライブラリを入れるために必要なパッケージをインストール
    apt install php-pear php-dev
    
    # oci8のインストール, 途中で何か聞かれるので、 instantclient,/opt/oracle/instantclient_19_17 と回答
    pecl install oci8
    
    echo "extension=oci8.so" > /etc/php/8.1/mods-available/oci8.ini
    ln -s /etc/php/8.1/mods-available/oci8.ini /etc/php/8.1/apache2/conf.d/20-oci8.ini
    systemctl restart apache2
    

    パッケージ版のフロントエンドで動かない場合は、ソースコードからコピーする。

    cp -ra /root/zabbix-6.2.6/ui/* /usr/share/zabbix/
    

おわりに

ここまでの作業でOracle DBをバックエンドにしてZabbixが動いた。

トップ画面

今回はテストということもあり、かなり雑に作業をしてしまったが、debやrpmにまとめても面白そうなので、何かのタイミングで試してみたい。