2011年2月28日月曜日

Zabbix 1.6と1.8のパフォーマンス

第2回のZABBIX-JP勉強会で1.6のパフォーマンス測定の話をしたのですが(資料はこちらからダウンロードできます)、同じ条件下で1.8のパフォーマンスも測定してみました。

測定条件

  • ホスト: 900
  • 有効アイテム数: 42300/5分間隔
  • 有効トリガー数: 14400

使ったハードウェアの詳細スペックなどは上記の資料を参照してください。

上記の設定で監視を行うと、Zabbix 1.6.9では以下の負荷状況でした。

  • Zabbix 1.6.9 - ロードアベレージ
  • Zabbix 1.6.9 - CPU使用率

CPU Utilizationのグラフでは青色がidle timeなので、定常的にCPU使用率が50%を上回っていることになります。グラフでは分かりませんが、ほとんどはデータを保存するMySQLがCPUを使っています。

同じハードウェアを使ってほぼ同条件の状態でもZabbix 1.8.3だと負荷はかなり下がります。(グラフが切れてしまっていますが、このあともそれほど負荷は変わりませんでした)。

  • Zabbix 1.8.3 - ロードアベレージ
  • Zabbix 1.8.3 - CPU使用率

1.8系になってコードが見直された箇所は大小含めたくさんありますが、この大幅なパフォーマンス向上に最も役立っているのが1.8から追加されたDBキャッシュモジュールや1.8.3から追加されたDBSyncerです。

1.6まではZabbixサーバプロセスが収集したデータを逐次データベースに保存する仕組みになっていたために、Zabbixサーバの監視処理よりもデータベースのI/O方がずっと先にボトルネックになってしまっていました。

DBキャッシュモジュールやDBSyncerは監視の設定と収集データをメモリ上に確保したキャッシュ領域に一度保存し、収集データは定期的にまとめてデータベースに書き込む仕組みになっているため、I/Oボトルネックの解消に役立っているというわけです。

1.8.3でDBSyncerが追加され、1.8系のメモリキャッシュ系の処理の修正が一段落しました。これらの仕組みが追加されたことで内部的に仕様が変更されたり、zabbix_server.confやzabbix_proxy.confの設定パラメータが増えているなど、かなり大幅な修正になっています。

増えているパラメータのほとんどがメモリ上に確保するキャッシュ領域の容量設定なのですが、これらを適切に設定しておかないとZabbixサーバが落ちる可能性があるため注意が必要です。以下に関連する項目を説明しておきます。

  • StartDBSyncers=4

起動するDBSyncerプロセスの数で、ほとんどの場合は4つで十分です。Zabbixプロキシを利用して超大規模なシステムの監視をする場合などは数を増やすとパフォーマンスが上がるかもしれません。私はいまのところ変更する状況にはなったことはないです。

  • CacheSize=8M
  • CacheUpdateFrequency=60

ホストとアイテム設定のメモリキャッシュ設定です。CacheSizeの容量をあらかじめメモリ上に確保するようになっていて、この容量が不足するとZabbixサーバプロセスが落ちます。徐々に監視対象を増やしていっているような環境では注意してください。

アイテム数が数千単位になってくると8Mを超えるため、あらかじめ大きめに設定しておくのが良いです。とはいえGB単位にはならないので、通常は50MBから100M程度に設定しておけば十分です。

また、DBSyncerはCacheUpdateFrequencyの間隔でデータベースからホストとアイテムの設定をメモリ上に読込んで監視します。そのためデフォルトの設定だとWebインターフェースから設定変更を行っても、最大60秒待たないと設定が反映されません。

  • HistoryCacheSize=8M
  • TrendCacheSize=4M
  • HistoryTextCacheSize=16M

これらは収集した監視データをメモリ上にキャッシュしておく容量です。収集した生データのうち数値データをHistoryCacheSizeで指定した領域に、文字データをHistoryTextCacheSizeに、数値データをグラフに使用するトレンドデータ(圧縮データ)に加工したものをTrendCacheSizeに保存します。

これらのメモリキャッシュ領域も不足するとZabbixサーバが落ちます。デフォルト値は少し小さい気がするので、不安な場合はデフォルト値の2から5倍程度の値を設定しておくと良いと思います。特にログ監視で大量にログが出る可能性がある場合などは要注意です。

***

これらのキャッシュ系のパラメータを大きくすればするほどパフォーマンスが改善されるというわけでもないので、必要最低限のメモリを確保するように設定しておけば良いでしょう。

最初のグラフの通り、1.8.3ではDB書き込みのパフォーマンスが大幅に向上しているため、1.6系以前のバージョンを使っている人は1.8にアップグレードすることでかなりのパフォーマンス向上が見込めます。その他にも色々と便利な機能も追加されていますので、これを機に1.8へのアップグレードを検討されてはどうでしょうか。

1.6から1.8へのアップグレードにはDBスキーマのパッチ適用が必要です。手順はZABBIX-JPのドキュメントに掲載されているので、こちらも参考ください。

0 件のコメント: