2014年11月21日、パレスサイドビル(東京・千代田区)にてZabbix Japan主催のイベント「Zabbix Conference Japan 2014」が開催された。近年、日本でもユーザー数を増やし続けているオープンソースのシステム監視ソフトウェア「Zabbix」。本イベントでは、このZabbixの専門家やユーザーが、Zabbixを使った監視ソリューションに関わる知識や経験、成功事例などを共有するために行われる年次イベントで、日本国内では昨年に続き2回目の開催となる。当日は多くの参加者が会場に詰めかけ、日本におけるZabbixの注目度の高さがうかがえた。
Zabbixを実際に日々運用している企業の事例や、Zabbixを使ったシステム管理ソリューションの紹介など、全部で10以上のセッションが開催されたが、本稿ではその中から、Zabbixの生みの親であり、現在はZabbixの開発元であるZabbix SIA社のCEOを務めるアレクセイ・ウラジシェフ氏によるオープニングスピーチの内容をお届けする。
Zabbixの高パフォーマンスを支える実装技術とは?
ウラジシェフ氏はまず、Zabbixで使われている主要な実装技術についての紹介からスピーチを始めた。 「1998年に個人的な動機からシステム監視ソフトウェアの開発を思い立った当初はPerlを使って開発していたが、すぐにパフォーマンスやリソース効率の面で不満を感じ、他の言語へ乗り換えた」
現在のZabbixは、サーバやプロキシ、エージェントといったバックエンドの主要なモジュールはすべてC言語で実装されている。C言語のような低水準の処理系を採用することで、Perlのような高水準言語より高速でリソース使用率が低いプログラムを開発することが可能になった。ただし、開発生産性については高水準言語の方が明らかに勝っているという。
またフロントエンド部分とAPIについては、PHPを使って開発している。PHPは短期間で習得が可能で、あらゆるプラットフォームで実行可能な点がメリットだが、その半面インタープリタ型言語であるが故に実行時エラーが付き物で、これを防ぐには「規律を保って高品質のコードを書く必要がある」とウラジシェフ氏は指摘する。
また、構成データや履歴データを保管するためのバックエンドのデータベースには、MySQLやPostgreSQL、Oracle Database、DB2といった「SQLでデータ操作が可能なリレーショナルデータベースエンジン」を利用する。SQLベースのデータベースエンジンを採用することで、データの一貫性を確実に保てる半面、書き込み処理のスケーラビリティに限界があったり、可用性を担保するために複雑な仕組みが必要になったりといったデメリットも存在するという。
これらの要素技術によって実装されたZabbixは、結果として非常にコンパクトなサイズに収まり(サーバモジュールのバイナリファイルのサイズはわずか1~2Mバイト)、またパフォーマンスに関しては「現在世にあるシステム監視ソフトウェアの中では、最も高いパフォーマンスを誇る」(ウラジシェフ氏)という。
ちなみにZabbixには、パフォーマンスを高めるための独自の内部処理が幾つか盛り込まれている。例えば、サーバやプロキシがデータベースにアクセスする際には、インメモリキャッシュを使ってディスクI/O周りのボトルネックを極小化している。また、大量の書き込みリクエストを少数のI/O命令にまとめて一括処理する「バルクオペレーション」によって、書き込みのディスクI/Oを最適化する仕組みも実装されている。
このような独自技術によって支えられたZabbixは、ウラジシェフ氏によれば「1998年に初めてZabbixを世に出した当時は、極めて優れたプラットフォームだった」という。しかしそれから15年以上が経った現在では、幾つかの点で課題も出てきたという。
「バックエンドではC言語、フロントエンドではPHPと、2つの異なる処理系を使って開発しているため、開発効率や品質管理の面で課題が出てきている。また、15年以上前に記述した古いPHPコードがそのまま残っていたり、PHPで記述したAPIのパフォーマンスに問題が生じたりと、主にこれまでPHPで開発してきたフロントエンド周りやAPIの部分で課題が多く生じている」