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 - 投稿数: 4769
Zabbixプロキシには初期データは必要ないので、2.0用の
schema.sqlを利用して、2.0用のデータベースを作成しなお
せば良いと思います。
hajime - 投稿数: 57
TNK様
早速の返信ありがとうございます。
商用環境は、Proxyを介しての監視でログ監視も行っており、
lastlogsize/mtime等のデータも引き継ぎたいと思っております。
というのも、Agent側にログ監視のポインタを持っているのは分かるのですが、
Agentが再起動(OS、プロセス)すると、そのポインタがクリアされるはずです。
そのため、AgentはProxyにlastlogsize/mtime等の情報を取得しに行き、
lastlogsize/mtimeの値は「0」なので、log/logrtキーでヒットするログを
再読み込みしてしまうと思われます。
それを回避したいので、データベースの再作成は避けたいのです。。。
以上、よろしくお願いいたします。
TNK - 投稿数: 4769
lastlogsize/mtime等のデータもマスタのデータは、Zabbixサーバ
のデータベースに保存されています。
Zabbixプロキシで利用するデータベースは、一時的なデータ置き場
でしかありません。
空のデータベースでテーブルさえ用意しておけば、Zabbixプロキシ
起動時にZabbixサーバから自分のプロキシ配下の監視対象に対する
マスタデータを受け取って監視を開始します。
hajime - 投稿数: 57
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 - 投稿数: 4769
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 - 投稿数: 57
TNK様
ご返信&調査ありがとうございます。
ZabbixProxy1.8から2.0へのDBアップデートはNGみたいですね。。。
DBを再作成して、lastlogsize/mtime等必要な情報をinsertするなど
違う方法を検討しようと思います。