現在位置: ホーム / みらくるブログ / あなたのZabbixは真に最新版であろうか?【MIRACLE ZBX 1.8, 2.0】

あなたのZabbixは真に最新版であろうか?【MIRACLE ZBX 1.8, 2.0】

MIRACLE ZBX (Zabbix) にて、アップデート後にDBスキーマを調整する。(1.8 2.0)

2.2でのアップデートの新機能

Zabbix-2.2.0がリリースされて(2013年11月12日)から1年弱が経過し、当社でも2.2.xのパッケージをリリースしています。
2.2.xにはいろいろと新しい機能がありますが、中でもおもしろいと思うものに、バージョン間のデータベーススキーマ情報の差分を吸収し、自動補正を行う機能があります。

ただし、当社パッケージでは、同じメジャーバージョンからのマイナーアップデートではこの機能が有効に働くようにしていますが、異なるバージョンからのメジャーバージョンアップデートでは働かないようにしてあります。これは、誤ってパッケージアップデートをしてしまった場合に、データベースの内部まで自動的に変更を行わないようにする安全面を考慮してのことです。もし、MIRACLE ZBXにて、2.0.xからアップデートを行い、データベース情報を更新する場合には、下記のように行う必要があります。

# /etc/init.d/zabbix-server updatedb


上記の実装はとてもシンプルに実装されています。

現在稼働しているバージョンが2.2.3ならば、2020003という固有の値をDB内に収めておきます。

次にZabbixサーバ、プロクシが2.2.4へアップデートされたときに、2.2.4の固有の値(2020004)が、以前の値より大きいため、DBの変更が行われ、最後に2020004が書き込まれます。

実は、これは毎回起動時に行わますが値の変化がない場合には何もされないので、実質的にはアップデートされた直後と言った方がわかりやすいのです。
DBへの変更点はバージョンごとにソース内に全てべたに含められていますので、必ずしもマイナーバージョンを一つずつ上げる必要性はなく、2.2.3から2.2.6へとアップデートすることになんら問題はありません。
この実装はあまり難しくないため、src/zabbix_server/server.c : MAIN_ZABBIX_ENTRY() からコールする src/libs/zbxdbupgrade/dbupgrade.c : DBcheck_version() を読んでいただければよく解ると思います。

1.8, 2.0ではどうなっているの?

では、2.2.x以前はどうであったか?というと、そういった機構は全くありませんでした。ですので、最初にDB作成を行ったときに使用したバージョンが 2.0.3であり、その後、順調にアップデートしたとしても、バージョン間のスキーマ情報等は更新されませんので、真に最新版とは言えません。(不具合の あったスキーマ情報は修正されることはありませんでした。)

ただし、このように差がある状態で使用していたとしても、監視が行えなくなるというよ うな問題は発生していませんでした。しかしながら、1.8.xであったインデックスに関する差分は、多少なりともパフォーマンスには影響しますし、新しく アイテムキーが追加されたときは、help_itemsテーブルへの値がないので、監視アイテムを作成するときにリストに上らないといった問題もありま す。

このことについては個人的には問題であると考えていたので、密かに差分を抜きだし、補正用のスクリプト(ただし、SQLファイルですが)を作成してあります。

さらに、現在利用しているDBがどの時点のZabbixで作成されたかを確認するプログラムも用意してあります。
具体的には、下記の作業を行うことにより、アップデートしたバージョンと同等のものを得ることができます。

使用方法

  1. 使用するバージョンに応じて下記からファイルをダウンロードしてください。
    1.8.x用 upgrade_data_for_1.8.tgz

    2.0.x用 upgrade_data_for_2.0.tgz
    (2015/11/30 2.0.16リリースによりアップデートしました)
  2.  

  3. check_db_version を使用するデータベースに合わせてコンパイルします。(同梱されているbuild.shの中を見てください。)
    その後、下記のようにどのバージョンでデータベースが作成されたかを確認します。
  4. $ ./check_db_version_20 -s localhost -u root -p '' -d zabbix
    This version can research up to Zabbix 2.0.13.
    Your db may be built on 2.0.6

    各オプションは次のようになります。
    -s データベースが稼働しているサーバ
    -u データベース接続ユーザ名
    -p -uにて指定したユーザのパスワード
    -d Zabbix用データベース名

     

  5. 2の結果をもとに順次スクリプトを適用します。
  6. $ mysql -u root zabbix < upgrade_2.0.6_to_2.0.7.sql
    $ mysql -u root zabbix < upgrade_2.0.10_to_2.0.11.sql
    $ mysql -u root zabbix < upgrade_2.0.12_to_2.0.13.sql

    ただし、稼働しているMIRACLE ZBXの状況により適用できないこともありますので注意してください。