Zabbixのパフォーマンスチューニング
    & インストール時の注意点




    2010/07/30 @ 第2回ZABBIX-JP勉強会
     ZABBIX-JP 代表 寺島広大 @kodai74
      http://kodai74.blogspot.com




                   1
アジェンダ



• Zabbixのインストールとインストール時の注意点


• とりあえず監視してみる


• Zabbixサーバのチューニングポイント


• パフォーマンス測定




                2
Zabbixインストールと
インストール時の注意点



      3
Zabbixの動作環境
         要設定&チューニング!
                          監視サーバ                監視対象
データベース
   MySQL
 PostgreSQL
   SQLite
   Oracle
                                            SNMPエージェント
              データ保存                    監視
                       Zabbixサーバ

Webインターフェース                                 Zabbixエージェント
 (Apache + PHP)



     表示・設定                 障害通知




                                   パッケージインストール
                  管理者
                                   4
Zabbixサーバのインストール
• CentOS   / RHEL 
    ✓   ZABBIX-JPのyumリポジトリを登録
        # rpm -ivh http://www.zabbix.jp/binaries/relatedpkgs/rhel5/i386/zabbix-jp-
        release-5-3.noarch.rpm

    ✓   yumで一発インストール

        # yum install zabbix zabbix-server zabbix-server-mysql 
        zabbix-web zabbix-web-mysql



• Debian   / Ubuntu 
    ✓   aptで一発インストール

        # apt-get install zabbix zabbix-server




                                        5
Zabbixサーバの設定




• /etc/zabbix/zabbix_server.conf 
    ✓   DBName=データベース名
    ✓   DBUser=データベースユーザ
    ✓   DBPassword=データベースパスワード
    ✓   DBSocket=DBのソケットファイルのパス




                         6
後からハマらないためのMySQL設定
• Zabbixデータベース作成前に/etc/my.cnfを変更
• 文字化け回避のためのエンコード設定

             設定パラメータ                            説明

  default-character-set=utf8            デフォルトエンコードをutf8に設定

                                        SQLクライアントの設定に関わらず、
  skip-character-set-client-handshake
                                        サーバ側のエンコード設定を使用

• データ保存ファイルの設定

     設定パラメータ                               説明

                         単一のデータファイルの肥大化を防ぐために、テーブル
  innodb_file_per_table
                          ごとにデータファイルを作成。DB作成後は変更不可


                                  7
MySQLの起動                           DB作成


• MySQLの起動
   # service mysqld start




• DBと接続用アカウントの作成
   # mysql -uroot
   > create database zabbix;
   > grant all privileges on zabbix.* to zabbix@localhost identified by ‘pass’;



• Zabbixデータベースの初期データのインポート
   # mysql -uroot zabbix < /usr/share/doc/zabbix-server-XXX/schema/mysql.sql
   # mysql -uroot zabbix < /usr/share/doc/zabbix-server-XXX/data/data.sql
   # mysql -uroot zabbix < /usr/share/doc/zabbix-server-XXX/data/images_mysql.sal




                                       8
Zabbixの起動とWebインターフェースの設定


• Zabbixサーバの起動

   # service zabbix-server start




• Apacheの起動
   # service httpd start



• ブラウザでWebインターフェースにアクセス
    ✓ http://zabbix-server-host/zabbix




                                   9
Webインストーラの実行


• インターフェースの

設定ファイルを作成




• インストーラ完了

  ログイン画面

• Zabbixサーバのインストール完了!

                10
Zabbixエージェントのインストール

• CentOS   / RHEL 
    ✓   ZABBIX-JPのyumリポジトリを登録
        # rpm -ivh http://www.zabbix.jp/binaries/relatedpkgs/rhel5/i386/zabbix-jp-
        release-5-3.noarch.rpm

    ✓   yumで一発インストール

        # yum install zabbix zabbix-agent




• Debian   / Ubuntu 
    ✓   aptで一発インストール

        # apt-get install zabbix zabbix-agent



                                        11
Zabbixエージェントの設定&起動




• /etc/zabbix/zabbix_agentd.conf 
    ✓   Server=ZabbixサーバのIPアドレス
    ✓   Hostname=Zabbixサーバに監視対象として登録する時のホスト名
    ✓   ListenIP=ListenするIPアドレス




                            12
Zabbixエージェントの起動


• Zabbixエージェントの起動

  # service zabbix-agent start




• Zabbixエージェント側に監視設定は不要
   ✓ 監視設定はZabbixサーバで集中管理

   ✓ Zabbixエージェントは起動しておくだけ




                                 13
Zabbixのインストールまとめ


• MySQLの設定がキモ!

• ソースからコンパイルする場合はZabbixの詳細を理解し

ておかないといけないが、RPMなら簡単にインストール
• ZABBIX-JPのRPMなら日本語利用にあたって必要な設定が

あらかじめ設定済み。インストール後すぐ使える

• Debian系のパッケージは日本語関連の設定が入っていな

いため、インストール後にPHPの設定を変更する必要あり


                 14
ZABBIX-JP RPMを使ったインストール手順




   http://www.zabbix.jp/documents

                 15
ZABBIX-JPマニュアル



• ZABBIX   インストレーションガイド
    ✓   Configureでインストールする
        手順を解説
    ✓   基本的な設定とカスタマイズ




           http://www.zabbix.jp/documents

                         16
とりあえず監視してみる




     17
テスト環境

• 監視対象をたくさん用意できないので...
  ✓ 2つの監視対象(Zabbixエージェント)を複数登録して監視

  ✓ ネットワーク的に遅延があまりない環境

                    監視サーバ         •Core   2 Duo 1.8GHz 
                                  •メモリ4GB

                                  •Zabbix   1.6.9-2.JP 
              Zabbixサーバ




    Zabbixエージェント            Zabbixエージェント
                    監視対象

                      18
利用するテンプレート

• ZABBIX-JPのTemplate_OS_Linuxを利用

          設定項目              アイテム数   トリガー数   監視間隔

 死活監視                         1       1


 CPU、メモリ、ネットワーク、ディスク         32       8


 プロセス、ポート                     8       5      5分


 その他                          6       2


 合計                          47      16



                       19
ホストの登録
• 同じ監視対象を複数ホストとして登録


           ホスト名          IPアドレス       テンプレート

 test001                 A.A.A.A   Template_OS_Linux

 test002                 A.A.A.A   Template_OS_Linux

 test003                 A.A.A.A   Template_OS_Linux

              ・
              ・
              ・




                    20
確認ポイント(1) - Zabbixサーバの負荷
• Zabbixサーバにもエージェントをインストール、スク

 リーンを作成して負荷状況を確認



ロードアベレージ                 CPU使用率



メモリ使用量                    スワップ



ネットワーク                     I/O


               21
確認ポイント(2) - キュー


• [管理]   [キュー]画面で監視の遅延有無を確認




                 22
確認ポイント(3) - Zabbixサーバの状態

• [レポート]   [Zabbixサーバの状態]画面でホスト、アイ
 テムの登録数を確認




                  23
確認ポイント(4) - 監視データ
• [監視データ]   [最新データ]画面でヒストリを表示して監
視データに遅延がないかを確認




                 24
ホスト追加 - ホスト10/アイテム500

0.2




                25
ホスト追加 - ホスト20/アイテム1000

0.2




                        赤:write I/O

                26
ホスト追加 - ホスト30/アイテム1500

0.2




                27
ホスト追加 - ホスト60/アイテム3000

0.2


                        赤: user time




                28
ホスト追加 - ホスト100/アイテム5000

0.2




             29
ホスト追加 - ホスト200/アイテム10000

0.2
                     赤: user time
                    黄: iowait time




            30
ホスト追加 - ホスト500/アイテム23000

2

                    赤: user time
                   黄: iowait time




           31
キュー - ホスト500/アイテム23000

• 特に遅延は発生していない




                 32
Zabbixのチューニングポイント




        33
その前に...Zabbixサーバの監視のしくみ

• Zabbixサーバのプロセス




                        Zabbixサーバプロセス
                         が複数起動します




                   34
Zabbixサーバのプロセス

• 起動直後のZabbixサーバのログを見ると...




                      役割ごとに処理を担当する
                      プロセスが起動している




                 35
Pollerプロセスの役割


• Zabbixエージェント、SNMPエージェント、シンプル

チェックのポート監視を行う専用のプロセス


データベース   (1) 監視リスト取得                 (2) 監視


                       Zabbixサーバ                 Zabbixエージェント
         (4) データを保存    Pollerプロセス   (3) データを返す   SNMPエージェント




                              36
Pingerプロセスの役割


• Ping監視を行う専用のプロセス


 データベース (1) 監視リスト取得                (2) Ping実行
                                     (fping)

                      Zabbixサーバ
                                                監視対象機器
          (3) 結果を保存   Pingerプロセス




                             37
Zabbixサーバの設定パラメータ(1)

• 監視プロセス数の調整
     設定パラメータ                      説明
                     Zabbixエージェント、SNMPエージェント、シンプル
  StartPollers=5
                       チェックを利用した監視用のプロセス起動数

  StartPingers=1           Ping監視用のプロセス起動数



• Zabbix   1.6
     設定パラメータ                      説明
                     DB書き込み前にメモリキャッシュを行う専用のプロセ
  StartDBSyncers=1
                        ス”DBSyncers”を起動。デフォルト無効



                           38
Zabbixサーバの設定パラメータ(2)

• Zabbix   1.8
        設定パラメータ                         説明

  CacheSize=8M                     監視設定のキャッシュサイズ


  CacheUpdateFrequency=60    監視設定のキャッシュを更新する間隔


  HistoryCacheSize=8M        ヒストリデータのメモリキャッシュサイズ


  TrendCacheSize=4M          トレンドデータのメモリキャッシュサイズ

                              テキスト形式のヒストリデータの
  HistoryTextCacheSize=16M
                                     キャッシュサイズ


                              39
MySQLの設定パラメータ(1)


• InnoDBのメモリ関連のパラメータ

      設定パラメータ                        説明        デフォルト値


                           InnoDBのデータのメモリキャッ
 Innodb_buffer_pool_size                        8MB
                                    シュサイズ


 ✓ デフォルト値が少なすぎる

 ✓ 物理メモリの8割まで割り当ててOKとマニュアルに記載あり

 ✓ ただし、OS、http、Zabbixサーバ用のメモリは残しておいてね




                               40
MySQLの設定パラメータ(2)
• InnoDBのログファイル関連のパラメータ
      設定パラメータ                        説明     デフォルト値
                            更新ログを記録するための
 innodb_log_file_size                            5MB
                                ファイルサイズ

 innodb_log_files_in_group    ログファイルの作成数          2


 ✓ ログファイルはMySQLのアプリケーションログ、ではなくDB書き込み前

  にデータを追記形式で保存しておくところ
 ✓ ログファイルの実体は/var/lib/mysql/ib_logfile*

 ✓ ログファイル設定を変更したら必ず

  MySQL停止        ib_logfile*削除    MySQL起動を行うこと
 ✓ ログファイルは64∼128MB×2もあれば十分。それ以上でもあまり効果

  はない
                                41
MySQL設定の参考書籍

• MySQL   InnoDBのパフォーマンス設定
 ✓ MyISAMに比べるとInnoDBは情報が少ない

 ✓ 参照系クエリのチューニングに比べると、更新系のチューニング情報は

  とても少ない


• 実践ハイパフォーマンスMySQL        第2版
 ✓ InnoDBのパフォーマンスチューニング

  のポイントや内部動作を詳細に解説
 ✓ Zabbixに関わらず、MySQLのチューニング本として

  お勧めです


                     42
その他のMySQLのチューニングポイント



• InnoDBはCPUでスケールしない
 ✓ 少なくともCentOS5    / RHEL5のMySQL 5.0.45ではスケールしない
 ✓ CPUはコア数より速度を優先する方が良い

 ✓ Hyper   Threadingは絶対OFF (過去に問題が出たことあり)


• Googleパッチ、InnoDBプラグイン
 ✓ InnoDBまわりの改善が多数

 ✓ CPU数に応じてスケールするようになっている




                          43
パフォーマンス測定




    44
設定変更前 - ホスト500/アイテム23000

2

                    赤: user time
                   黄: iowait time




           45
MySQLのパラメータ変更
• /etc/my.cnf

              設定パラメータ                          設定値

  innodb_buffer_pool_size                    8MB   1024M


  innodb_log_file_size                        5MB   128M


  innodb_log_files_in_group                    2 (変更なし)



     ✓ Zabbixサーバ停止

     ✓ MySQLサーバ停止

     ✓ rm   -rf /var/lib/mysql/ib_logfile* 
     ✓ MySQLサーバ起動

                                 46
設定変更後 - ホスト500/アイテム23000

2

                    赤: user time
                   黄: iowait time




           47
ホスト追加 - ホスト800/アイテム38000

2

                          赤: user time
                ホスト100台
                          黄: iowait time
                追加時の負荷




           48
ホスト追加 - ホスト900/アイテム42000

2

                    赤: user time
                   黄: iowait time




           49
ホスト追加 - ホスト900/アイテム42000
• キューには溜まっていない




                 50
Zabbixサーバの設定パラメータ(1)
• 監視プロセス数の調整

     設定パラメータ                    説明

 StartPollers               5    20


 StartPingers               1    5


     ✓ Zabbixサーバの再起動




                       51
プロセス変更 - ホスト900/アイテム42000


2




            52
プロセス変更 - ホスト900/アイテム42000
• キューに溜まってしまっている




              53
Zabbixサーバのプロセス
• プロセスの動き
  ✓ Pollerプロセス、Pingerプロセスがそれぞれデータベースをオープ

   ンすることにより、不必要に起動数を増やすとパフォーマンスが落
   ちる
  ✓ 1.8では処理が変更され、パフォーマンスが向上している




                   54
Zabbixサーバの設定パラメータ(1)
• 監視プロセス数の調整


     設定パラメータ                 説明

 StartPollers               20    5

 StartPingers               5    1

 StartDBSyncers             0    1


     ✓ Zabbixサーバの再起動




                       55
DBSyncers - ホスト900/アイテム42000


2




             56
結論
• MySQLのチューニング
   ✓ innodb_buffer_pool_sizeとinnodb_log_file_sizeは必ず修正した

    方が良い
   ✓ I/Oパフォーマンスが向上する




• Zabbixサーバのプロセス
   ✓ キューに溜まっていなければPollerやPingerプロセス数の設定を変

    更しても効果なし。むしろ逆効果の場合もある
   ✓ StartDBSyncersは一定の効果あり




                          57
分散監視機能 (大規模システムの監視)

• Zabbixプロキシ
   ✓   Zabbixサーバに代わって監視を行う専用のサーバ
   ✓   スケールアウトすることにより監視の負荷分散が可能
   ✓   プロキシを使えばより監視対象を増やせる
                              監視設定と監視データの
                                 一元管理


                  Zabbixサーバ
  Zabbixプロキシサーバ               Zabbixプロキシサーバ




                   監視対象


                      58

Zabbixのパフォーマンスチューニング & インストール時の注意点