ZabbixProxyの1.8から2.0へのアップグレードについて

いつもお世話になっております。

現在、ZabbixServer、Proxyのバージョンを1.8から2.0にアップグレードする計画を立てております。

Server、Proxyは商用環境にて稼動しており、ヒストリデータ等を残しつつバージョンアップをしたいと考えております。

【環境】
□ZabbixServer
 OS:CentOS5.10
 DB:MySQL5.5
 ZBXVer:zabbix-1.8.19-1.el5 ⇒ zabbix-2.0.15-1.el5

□ZabbixProxy
 OS:CentOS5.10
 DB:MySQL5.5
 ZBXVer:zabbix-1.8.19-1.el5 ⇒ zabbix-2.0.15-1.el5

バージョンアップの方法としてはServer、Proxy共に同様で
①DBのバックアップ
②Zabbix停止
③rpm -Uvhにてパッケージアップデート
④/usr/share/doc/zabbix-xxxx-mysql-2.0.15/upgrades/dbpatches/2.0/mysql 配下で
 ./upgrade -uxxxx zabbix を実行

という手順です。

ZabbixServerは問題なくアップグレードも完了し、Server/Agentプロセスを起動することが出来ます。
いざZabbixProxyのアップグレードを実行すると、以下のようなエラーが出力されます。

[root@proxy mysql]# ./upgrade -uroot zabbix
WARNING: backup your database before performing upgrade

This is an UNSUPPORTED Zabbix upgrade script from 1.8 to 2.0 for MySQL
It does the following things:
1. Updates indexes that might require changes;
2. Patches the database from 1.8 schema to 2.0 schema;
3. Adds 'Disabled' and 'Debug' usergroup if any missing;
4. Checks for hosts not belonging to any group and adds them to one if any found.

Usage: pass required MySQL parameters to this script (like database, user, password etc).

Continue ? (y/n) y
Patching the database
ERROR 1062 (23000) at line 223: Duplicate entry '0' for key 'PRIMARY'
Failed to patch Zabbix database. Restore from backup

上記の通りですが、ERROR内容を調べても???だったので、
解消方法をご教授いただけるとありがたいです。

以上、よろしくお願いいたします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

Zabbixプロキシには初期データは必要ないので、2.0用の
schema.sqlを利用して、2.0用のデータベースを作成しなお
せば良いと思います。

ユーザー hajime の写真

TNK様
早速の返信ありがとうございます。

商用環境は、Proxyを介しての監視でログ監視も行っており、
lastlogsize/mtime等のデータも引き継ぎたいと思っております。

というのも、Agent側にログ監視のポインタを持っているのは分かるのですが、
Agentが再起動(OS、プロセス)すると、そのポインタがクリアされるはずです。
そのため、AgentはProxyにlastlogsize/mtime等の情報を取得しに行き、
lastlogsize/mtimeの値は「0」なので、log/logrtキーでヒットするログを
再読み込みしてしまうと思われます。

それを回避したいので、データベースの再作成は避けたいのです。。。

以上、よろしくお願いいたします。

ユーザー TNK の写真

lastlogsize/mtime等のデータもマスタのデータは、Zabbixサーバ
のデータベースに保存されています。
Zabbixプロキシで利用するデータベースは、一時的なデータ置き場
でしかありません。

空のデータベースでテーブルさえ用意しておけば、Zabbixプロキシ
起動時にZabbixサーバから自分のプロキシ配下の監視対象に対する
マスタデータを受け取って監視を開始します。

ユーザー hajime の写真

TNK様

ご返信ありがとうございます。

Zabbixプロキシで利用するデータベースは、一時的なデータ置き場とのことでしたが、
実際、ZabbixProxyで監視している、ログで試した結果、
※ヒストリにすでに溜まった後の結果です

【proxy側】
mysql> select key_,lastlogsize,mtime from items where itemid='22264';
+----------------------------------+-------------+------------+
| key_ | lastlogsize | mtime |
+----------------------------------+-------------+------------+
| logrt["/tmp/test.log.*",,UTF-8,] | 270 | 1447223208 |
+---------------------------------

【server側】
mysql> select key_,lastlogsize,mtime from items where itemid='22264';
+----------------------------------+-------------+-------+
| key_ | lastlogsize | mtime |
+----------------------------------+-------------+-------+
| logrt["/tmp/test.log.*",,UTF-8,] | 0 | 0 |
+----------------------------------+-------------+-------+
1 row in set (0.00 sec)

という結果になりました。
こちらはZabbix1.8での環境でためしましたが、
Zabbix2.0で変更となったのでしょうか?

以上、よろしくお願いいたします。

ユーザー TNK の写真

lastlogsizeの件は、私の認識違いであったようです。

以前、ソースを追いかけたときには、プロキシ経由でもlog[]のア
イテムを受信したときにデータベースに反映していたと思ったので
すが、短時間でしか確認できていないので違うかもしれませんが、
Zabbixプロキシ側が更新されて、Zabbixサーバ側でlog[]の値自体
は受信して履歴データとしてはデータベースに反映された後でも、
Zabbixサーバ側のitemsテーブルのlastlogsizeは更新されていない
ようです。
# Zabbix 2.0.15の環境を新規に構築して確認。

バグ情報も検索してみましたが、Zabbixサーバで直接監視していた
サーバをZabbixプロキシ経由にして、またZabbixサーバ直にしてと
切り替えた時に、lastlogsizeが反映されていないという報告があ
がっているようです。

Zabbix 3.0では修正されるようなのですが、未確認です。

ZBX-3662
lastlogsize is not sent from server to proxy
https://support.zabbix.com/browse/ZBX-3662

ZBXNEXT-444
Improvement processing of event logs when Agent start and stop (value "lastlogsize" optimization)
https://support.zabbix.com/browse/ZBXNEXT-444

ユーザー hajime の写真

TNK様

ご返信&調査ありがとうございます。

ZabbixProxy1.8から2.0へのDBアップデートはNGみたいですね。。。

DBを再作成して、lastlogsize/mtime等必要な情報をinsertするなど
違う方法を検討しようと思います。