Zabbix設定ファイルの注意点


Zabbix構築時に、zabbix_server.conf や zabbix_proxy.conf や zabbix_agentd.conf の設定は重要なのですが、意外と日本語での情報が少ないようなのでこれらの設定の中で重要なものにしぼって解説をしたいと思います。

zabbix_server.conf

参考: http://www.zabbix.com/documentation/jp/1.8/manual/processes/zabbix_server

重要度 高 (重大な問題が発生する可能性がある)
  • CacheSize
    • 設定キャッシュサイズ(バイト単位)。ホストとアイテムデータを記憶させる共有メモリサイズ。
    • 足りないとZabbixサーバプロセスがクラッシュします。
    • デフォルト設定値は8MBですが、hostsテーブルとitemsテーブルの中身を保持するための領域なので、これらのテーブルのサイズがどの程度か注意しておくこと。
    • ただ、大きく設定しすぎるとメモリを食いすぎて、起動に時間がかかりすぎます。
  • MaxHousekeeperDelete
    • Housekeeper(ヒストリなどの保持期限が過ぎたデータを削除するプロセス)が、1回削除動作をする際に実行する、1アイテムあたりに削除する最大行数
    • デフォルトでは500行になっているため、1時間に1回Housekeeperが動作する場合、1時間に1アイテムについてヒストリが500行以上溜まるような環境ではDBサイズが単調増加していく。最終的にはディスクが枯渇する可能性があります。
    • 削除すべきものを全て削除したいならば、0 に設定することで無制限に削除してくれます。ただ、DBへの負荷は向上するかもしれません。
  • ProxyConfigFrequency
    • Zabbix Proxyをパッシブモードで使用時に、監視設定情報を更新する間隔
    • デフォルトは3600秒(1時間)。これはつまり、あるホストをProxy経由での監視に切り替えた場合、最悪1時間Proxy経由での監視がされない、ということ。しかもWebUIでProxy経由に切り替えたタイミングでサーバからも監視されなくなるため、監視情報がProxyに伝えられる(最悪1時間)まで、一切の監視がされない状態になる。
    • せめて600秒(10分)間隔くらいが適切だと思います。
    • なお、Zabbix Proxyをアクティブモードで使用時には、zabbix_proxy.confにこれに相当する設定項目があるので、同様に重要。
重要度 中 (何か問題がある場合に設定すると改善する可能性がある)
  • LogSlowQueries
    • 処理に時間が掛かっているクエリを表示してくれる
    • パフォーマンス解析時に調査が楽になるかも
  • StartDiscoverers、StartHTTPPollers、StartIPMIPollers、StartPingers、StartPollersUnreachable、StartPollers、StartTrappers
    • 各監視タイプ別の、監視用のプロセスの数を設定
    • 監視の遅延が発生している場合、これらの監視プロセスが不足している可能性があるので、これらを調整すると効果があるかも
    • ディスカバリ遅延ならばStartDiscoverers、Web監視遅延ならばStartHTTPPollers、IPMI監視遅延ならばStartIPMIPollers、ping監視遅延ならばStartPingers、どんどん監視不能ホストが増加して監視再開が追い付いていない場合にはStartPollersUnreachable、その他のほとんどの監視ならばStartPollers、アクティブチェック監視ならばStartTrappers
  • Timeout
    • 監視のタイムアウト設定
    • よくあるのがユーザパラメータでコマンド実行結果を取得する監視で、ローカルやzabbix_getで値が取得できているのに、Zabbixサーバで監視不能状態になってしまう場合。デフォルトは3秒なので、実行時に3秒以上かかるコマンドだと監視失敗になる。
    • 本来ならば3秒以内に実行できるように改善するべきだけど、他に方法がなければ30秒に変更することで監視可能になることがある。

zabbix_proxy.conf

参考: http://www.zabbix.com/documentation/jp/1.8/manual/processes/zabbix_proxy

重要度 高 (重大な問題が発生する可能性がある)
  • CacheSize
    • 設定キャッシュサイズ(バイト単位)。ホストとアイテムデータを記憶させる共有メモリサイズ。
    • 足りないとZabbix Proxyプロセスがクラッシュします。
    • デフォルト設定値は8MBですが、hostsテーブルとitemsテーブルの中で、そのプロキシに割り当てられている監視情報を保持するための領域なので、これらのテーブルのサイズがどの程度か注意しておくこと。
    • ただ、大きく設定しすぎるとメモリを食いすぎて、起動に時間がかかりすぎます。
  • ConfigFrequency
    • Zabbix Proxyをアクティブモードで使用時に、監視設定情報を更新する間隔
    • デフォルトは3600秒(1時間)。これはつまり、あるホストをProxy経由での監視に切り替えた場合、最悪1時間Proxy経由での監視がされない、ということ。しかもWebUIでProxy経由に切り替えたタイミングでサーバからも監視されなくなるため、監視情報がProxyに伝えられる(最悪1時間)まで、一切の監視がされない状態になる。
    • せめて600秒(10分)間隔くらいが適切だと思います。
    • なお、Zabbix Proxyをパッシブモードで使用時には、zabbix_server.confにこれに相当する設定項目があるので、同様に重要。
  • ProxyOfflineBuffer
    • Zabbixサーバへの接続ができない場合に、プロキシ内のDBにデータを保持する期限。
    • デフォルトだと1時間ですが、この場合1時間以上プロキシ・サーバ間のコネクションがロストすると、データが失われます。
    • 24時間貯めてもそれほど大きくはならないので、mysqlとかそこそこ良いDBを使って、容量があるならもっと増やしても良いよ思います。
重要度 中 (何か問題がある場合に設定すると改善する可能性がある)
  • LogSlowQueries
    • 処理に時間が掛かっているクエリを表示してくれる
    • パフォーマンス解析時に調査が楽になるかも
  • StartDiscoverers、StartHTTPPollers、StartIPMIPollers、StartPingers、StartPollersUnreachable、StartPollers、StartTrappers
    • 各監視タイプ別の、監視用のプロセスの数を設定
    • 監視の遅延が発生している場合、これらの監視プロセスが不足している可能性があるので、これらを調整すると効果があるかも
    • ディスカバリ遅延ならばStartDiscoverers、Web監視遅延ならばStartHTTPPollers、IPMI監視遅延ならばStartIPMIPollers、ping監視遅延ならばStartPingers、どんどん監視不能ホストが増加して監視再開が追い付いていない場合にはStartPollersUnreachable、その他のほとんどの監視ならばStartPollers、アクティブチェック監視ならばStartTrappers
  • Timeout
    • 監視のタイムアウト設定
    • よくあるのがユーザパラメータでコマンド実行結果を取得する監視で、ローカルやzabbix_getで値が取得できているのに、Zabbixサーバで監視不能状態になってしまう場合。デフォルトは3秒なので、実行時に3秒以上かかるコマンドだと監視失敗になる。
    • 本来ならば3秒以内に実行できるように改善するべきだけど、他に方法がなければ30秒に変更することで監視可能になることがある。

zabbix_agentd.conf

参考(Un*x): http://www.zabbix.com/documentation/jp/1.8/manual/processes/zabbix_agentd
参考(Windows): http://www.zabbix.com/documentation/jp/1.8/manual/processes/zabbix_agentd_win

重要度 高 (重大な問題が発生する可能性がある)
  • MaxLinesPerSecond
    • 監視可能な1秒あたりの最大ログ行数を設定する。それ以上のログが出力された場合はログが送信されない。(訂正: コメントで指摘もらいましたが、次回監視時にログ送信が分割されるので、最終的にすべてのログは送信されます。失礼しました)
    • さらに、送信すべきログ行がMaxLinesPerSecondを越えるだけでなく、送信しない行もふくめてMaxLinesPerSecond x 4を越えた場合もこの制限に掛かる。
    • 内部で実際に使用されている計算式は次の通り
      • 「今回監視時の送信対象のログ行数 / アイテムの監視間隔(秒)」がMaxLinesPerSecondを越えると条件に掛かります
      • 「今回監視時の増加ログ行数 / アイテムの監視間隔(秒)」がMaxLinesPerSecond * 4を越えると条件に掛かります。「今回監視時の増加ログ行数」は送信対象のログ行だけでなく、送信対象外のログ行も加算したものになります。
    • デフォルトは100だけど、大丈夫ですか?
重要度 中 (何か問題がある場合に設定すると改善する可能性がある)
  • Hostname
    • ホスト名を入力する
    • ZabbixのWebUIに登録しておく名前と一致させておかないと、アクティブチェックが正常に動作しません。特にログ監視
    • 大文字・小文字を区別するので、気をつけること
  • EnableRemoteCommands
    • リモートコマンドを利用する場合にチェックしておくこと
    • system.run[]やユーザパラメータを使用するならチェックしておくこと
  • RefreshActiveChecks
    • アクティブチェックの監視情報を取得する間隔
    • ログ監視などのアクティブチェックの項目は、設定後、有効になるまで最低限この間隔だけ待つ必要がある
  • StartAgents
    • 監視エージェントのプロセス数
    • ある特定のエージェントで多数の項目を監視していて、そのホストでのみ監視遅延が発生している場合、この数を増加することで改善する場合がある
  • UnsafeUserParameters
    • あまり安全でない文字をユーザパラメータで使用することを許可するオプション。
    • ユーザパラメータで「\」などを使用する場合にこれをチェックしておかないと実行できない。Windowsの場合は比較的、これに引っかかりやすい。
  • Timeout
    • 監視のタイムアウト設定
    • よくあるのがユーザパラメータでコマンド実行結果を取得する監視で、zabbix_getでも値が取得できない場合はこれに引っかかっている可能性がある。デフォルトは3秒。
    • 本来ならば3秒以内に実行できるように改善するべきだけど、他に方法がなければ30秒に変更することで監視可能になることがある。
    • アクティブチェック監視の値をサーバへ送信する際のタイムアウト値にもなっている
    • DBが重い場合、実際にデータ送信できていてもタイムアウトになって結果的に2重にデータ送信してしまうかもしれない。根本的な解決はDBを軽くすべき。