自宅で稼働中の統合監視ツール Zabbix は、ずっと旧バージョンの 1.4 系を使っていた。ZABBIX-JP サイトで公開されている RPM を見ると 1.4.x → 1.6.x の段階でパッケージ構成が大幅に変わっているために躊躇し、「精神的に余裕のあるときにやろう」 とアップグレードを先延ばしにしていたのだ。
しかし安定版は随分前に 1.6 系に移り、1.8 系の開発も進んでいる。「そのうちね」 と言っているうちに時流から取り残されてしまうので、一気に最新の 1.8 系にアップグレードすることにした。精神的な余裕は、作って作れないこともない。
ありがちな話だが、Zabbix をアップグレードする際は DB のテーブルに変更が加わるため、1.4.x → 1.8.x のように間のバージョンを飛ばせないらしい。そこで今回はまず 1.4.6 から 1.6.8 にアップグレードし、改めて 1.8.1 を目指す。
幸い ZABBIX-JP サイトでアップグレードの手順が公開されているので、このドキュメントを参考に進める。今回の作業の流れは次の通り。
- Zabbix 1.4.6 の DB をバックアップ。
- Zabbix を 1.4.6 → 1.6.8 にアップグレード。
- 一部クライアントの Zabbix エージェントを 1.4.6 → 1.8.1 にアップグレード。
また我が家の Zabbix サーバーの環境は、次の通り。環境が異なる場合は、適宜読み変えていただきたい。
- マシン: VMware ESXi 4.0 上の仮想マシン
- OS: CentOS 5.4 (x86)
- 現行 Zabbix: ZABBIX-JP 提供バイナリ (1.4.6-1)
- DB: MySQL
1. Zabbix 1.4.6 の DB をバックアップ
まずはヤバい事態が発生した場合に備え、事前に DB のデータをバックアップしておく。我が家の Zabbix 用 DB は LVM 領域に置いてあり、実稼働中の Zabbix サーバーの停止時間は極力短くしたかったので、LVM のスナップショットを作成してディレクトリを丸ごとコピーした。
2. Zabbix を 1.4.6 → 1.6.8 にアップグレード
ZABBIX-JP のダウンロード・ページから、CentOS 5 用の Zabbix 1.6.8-2 関連パッケージをダウンロードし、次のように作業する。
zabbix-1.4.6-1.el5.JP
zabbix-agent-1.4.6-1.el5.JP
# /etc/init.d/zabbix stop ← Zabbix を停止
# /etc/init.d/zabbix-agent stop ← Zabbix エージェントを停止
# rpm -e zabbix zabbix-agent ← 既存パッケージをアンインストール
# rpm -ivh \ ← 必要なパッケージのみインストール
zabbix-1.6.8-2.el5.JP.i386.rpm \
zabbix-agent-1.6.8-2.el5.JP.i386.rpm \
zabbix-server-1.6.8-2.el5.JP.i386.rpm \
zabbix-server-mysql-1.6.8-2.el5.JP.i386.rpm \
zabbix-web-1.6.8-2.el5.JP.i386.rpm \
zabbix-web-mysql-1.6.8-2.el5.JP.i386.rpm
# cd /usr/share/doc/zabbix-server-1.6.8/dbpatches/1.6/mysql/
# mysql -uroot -p<PASSWORD> <DBNAME> < patch.sql ← DB にパッチを適用
DB へのパッチ適用が完了したら、/etc/zabbix 以下の設定ファイルを修正する。1.6 系では、基本的には 1.4 系の設定ファイルが流用できるが、Zabbix エージェント用の zabbix_agentd.conf で "ListenIP" をコメントアウトしたデフォルトの状態では Zabbix エージェント経由の値を取得できず ("Simple check" 等、Zabbix エージェントを経由しない値は OK)、任意の IP アドレスを指定する必要があった。複数の NIC や IP エイリアス等、複数の IP アドレス経由で監視する場合は "0.0.0.0" と指定すればいい。移行ドキュメントにある zabbix.conf.php 云々の作業は、僕の環境では必要なかった。
設定ファイルの修正が終わったら、Zabbix と Zabbix エージェントを起動し、Web インターフェイスにアクセスしてみる。
# /etc/init.d/zabbix-agent start ← Zabbix エージェントを起動
Web インターフェイスにログインすると、JavaScript が多用されていて、Screens も操作方法が変わっていることに気が付く。今まで Web インターフェイスへのアクセスに何となく使っていた Google Chrome ではメニュー周りの JavaScript が正しく動作せず、最初は不具合かと思ったが、Firefox 3.6 や IE 8 では問題なかった。今後は Firefox か IE を使うとしよう。
移行ドキュメントにあるように、デフォルトだと値を取得できないアイテム "Number of running processes zabbix_server" の値は、"proc.num[zabbix_server_mysql]" に修正した。
これで Zabbix サーバーのアップグレードは完了。1.4.6 の Maps で縦に並べてあったアイコンが微妙にずれていたのはとりあえず無視して、次に進む。
3. 一部クライアントの Zabbix エージェントを 1.4.6 → 1.8.1 にアップグレード
本来はこの段階では必要ない作業だが、全クライアントのアップグレードは Zabbix サーバーが 1.8 系になってからじっくり行うとして、試しに 1台だけアップグレードしてみる。「間を飛ばしてアップグレードできない」 のは DB の話で Zabbix エージェントは無関係なので、一気に行ってしまう。
1.8 系はまだ安定版ではないせいか、ここで控え目に配布されている。現時点の最新版 1.8.1-1 のうち対象マシンに適したパッケージをダウンロードし、次のように作業する。
zabbix-agent-1.4.6-1.el5.JP
# /etc/init.d/zabbix-agent stop ← Zabbix エージェントを停止
# rpm -e zabbix-agent ← Zabbix エージェントをアンインストール
# rpm -ivh \ ← 必要なパッケージのみインストール
zabbix-1.8.1-1.el5.JP.i386.rpm \
zabbix-agent-1.8.1-1.el5.JP.i386.rpm
1.4 系と 1.6 系の設定ファイルはそれほど違わないが、1.8 系では書式が大幅に変わっている。こう言うのがアップグレードの面倒なところだが、仕方がない。ただし最低限必要な部分に関してはほとんど同じなので、以下の箇所のみ編集して Zabbix エージェントを起動した。
# mv zabbix_agentd.conf zabbix_agentd.conf.old ← 旧設定ファイルをリネーム
# mv zabbix_agentd.conf.rpmnew zabbix_agentd.conf ← 新設定ファイルをリネーム
# vi zabbix_agentd.conf
--- snip ---
Server=<IP_ADDRESS_OF_ZABBIXSERVER>
Hostname=<HOSTNAME>
ListenIP=<IP_ADDRESS> ← 監視 IP アドレスが複数ある場合は "0.0.0.0" を指定
--- snip ---
# /etc/init.d/zabbix-agent start ← Zabbix エージェントを起動
# chkconfig --list zabbix-agent ← 自動起動設定を確認
# chkconfig zabbix-agent on ← 自動起動が無効になっている場合は自動起動設定
設定ファイルの "ListenIP" に気を付ければ、我が家の環境でそれまで監視していた値は、問題なく取得できている。やはりこの手のツールは、サーバーとクライアントのバージョンが違っても (クライアントの方が新しくても)、正常にデータをやり取りできることが重要だ。
さて、あとは Zabbix サーバーを 1.8 系に移行して、他のクライアントを 1台ずつ片づけて・・・、と考えながら Screens のグラフを眺めていると、1台だけ Zabbix エージェントを 1.8.1 にしたマシンの HDD 空き容量の単位がおかしいことに気が付いた。正しい値は GB のはずなのに、TB になっている。Zabbix サーバーと同時に Zabbix エージェントが 1.6.8 になった監視サーバーでは正常なので、1.8 系で何かが変わったに違いない。
調べてみると、ここでも話題になっているように、1.6 系までは KB 単位で取得していた HDD 空き容量が、1.8 系からは B (バイト) 単位に変更されている。1.6 系までは KB の取得値に1024 をかけて B 単位に補正していたので、生のデータが既に B 単位の 1.8 系では、無駄に 1024 倍されてしまうと言うわけだ。空き容量を % 表示するグラフに影響はないが、実際の値を表示するグラフでは、該当マシンの移行前と移行後で値が 1024 倍の開きがあるので、整合が取れなくなってしまう。
空き容量をバイト単位で表示し続ける必要があって Zabbix エージェントを 1.8 系にアップグレードする場合は、事前に乗数をなし (または 1) に切り替え、急いで全 Zabbix エージェントをアップグレードするようにした方がよさそうだ。単位が 1024 倍になってしまったデータのグラフは、データ保管期間中はずっと巨大な山がそびえ立ち、Zabbix エージェントのアップグレード後に正常なデータに戻っても山の左右の正常なデータが霞んだままだが、事前に乗数をなしにしてあれば、1/1024 の深い谷ができるものの、Zabbix エージェントのアップグレード後に元に戻る。
Zabbix エージェントを 1.8 系にアップグレードするたびに、DB 上で該当マシンのそれ以前の HDD 空き容量データを修正するのは現実的ではないし、反逆精神を発揮して Zabbix のソースを修正して使い続けるのも無駄なエネルギーに思えるので、ここは 「今後は B 単位なんだ」 と素直に従った方がいいだろう。業務レポート等で Zabbix サーバーの Screens を使っていて、「アップグレードしたら単位が変わっちゃいました」 と笑って済ませられないケースでは、しばらくはグラフをレタッチして改竄する必要があるかもしれないが・・・(苦笑)。
値が突然 1024倍に
想定外の事態に怯むことなく、次は Zabbix サーバーを 1.8 系にアップグレードする。