zabbixのパフォーマンスチューニング & インストール時の注意点
DESCRIPTION
2010年7月30日 第2回ZABBIX-JP勉強会TRANSCRIPT
Zabbixのパフォーマンスチューニング& インストール時の注意点
2010/07/30 @ 第2回ZABBIX-JP勉強会ZABBIX-JP 代表 寺島広大 @kodai74
http://kodai74.blogspot.com
1
アジェンダ
• Zabbixのインストールとインストール時の注意点
•とりあえず監視してみる
• Zabbixサーバのチューニングポイント
•パフォーマンス測定
2
Zabbixインストールとインストール時の注意点
3
監視サーバ 監視対象
Zabbixの動作環境
Zabbixサーバ
データベースMySQL
PostgreSQLSQLiteOracle
監視データ保存
障害通知
Webインターフェース(Apache + PHP)
表示・設定
管理者
Zabbixエージェント
SNMPエージェント
4
パッケージインストール
要設定&チューニング!
Zabbixサーバのインストール•CentOS / RHEL
✓ ZABBIX-JPのyumリポジトリを登録
✓ yumで一発インストール
•Debian / Ubuntu ✓ aptで一発インストール
5
# rpm -ivh http://www.zabbix.jp/binaries/relatedpkgs/rhel5/i386/zabbix-jp-release-5-3.noarch.rpm
# yum install zabbix zabbix-server zabbix-server-mysql \zabbix-web zabbix-web-mysql
# apt-get install zabbix zabbix-server
Zabbixサーバの設定
• /etc/zabbix/zabbix_server.conf ✓ DBName=データベース名✓ DBUser=データベースユーザ✓ DBPassword=データベースパスワード✓ DBSocket=DBのソケットファイルのパス
6
後からハマらないためのMySQL設定• Zabbixデータベース作成前に/etc/my.cnfを変更•文字化け回避のためのエンコード設定
•データ保存ファイルの設定
7
設定パラメータ 説明
default-character-set=utf8 デフォルトエンコードをutf8に設定
skip-character-set-client-handshakeSQLクライアントの設定に関わらず、サーバ側のエンコード設定を使用
設定パラメータ 説明
innodb_file_per_table単一のデータファイルの肥大化を防ぐために、テーブルごとにデータファイルを作成。DB作成後は変更不可
MySQLの起動 ⇒ DB作成
•MySQLの起動
•DBと接続用アカウントの作成
• Zabbixデータベースの初期データのインポート
8
# service mysqld start
# mysql -uroot> create database zabbix;> grant all privileges on zabbix.* to zabbix@localhost identified by ‘pass’;
# 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
Zabbixの起動とWebインターフェースの設定
• Zabbixサーバの起動
•Apacheの起動
•ブラウザでWebインターフェースにアクセス✓ http://zabbix-server-host/zabbix
9
# service zabbix-server start
# service httpd start
Webインストーラの実行
•インターフェースの設定ファイルを作成
•インストーラ完了⇒ ログイン画面
• Zabbixサーバのインストール完了!
10
Zabbixエージェントのインストール
•CentOS / RHEL ✓ ZABBIX-JPのyumリポジトリを登録
✓ yumで一発インストール
•Debian / Ubuntu ✓ aptで一発インストール
11
# rpm -ivh http://www.zabbix.jp/binaries/relatedpkgs/rhel5/i386/zabbix-jp-release-5-3.noarch.rpm
# yum install zabbix zabbix-agent
# apt-get install zabbix zabbix-agent
Zabbixエージェントの設定&起動
• /etc/zabbix/zabbix_agentd.conf ✓ Server=ZabbixサーバのIPアドレス✓ Hostname=Zabbixサーバに監視対象として登録する時のホスト名✓ ListenIP=ListenするIPアドレス
12
Zabbixエージェントの起動
• Zabbixエージェントの起動
• Zabbixエージェント側に監視設定は不要✓監視設定はZabbixサーバで集中管理✓ Zabbixエージェントは起動しておくだけ
13
# service zabbix-agent start
Zabbixのインストールまとめ
•MySQLの設定がキモ!•ソースからコンパイルする場合はZabbixの詳細を理解しておかないといけないが、RPMなら簡単にインストール
• ZABBIX-JPのRPMなら日本語利用にあたって必要な設定があらかじめ設定済み。インストール後すぐ使える
•Debian系のパッケージは日本語関連の設定が入っていないため、インストール後にPHPの設定を変更する必要あり
14
ZABBIX-JP RPMを使ったインストール手順
15
http://www.zabbix.jp/documents
ZABBIX-JPマニュアル
• ZABBIX インストレーションガイド✓ Configureでインストールする手順を解説
✓ 基本的な設定とカスタマイズ
16
http://www.zabbix.jp/documents
とりあえず監視してみる
17
監視対象
監視サーバ
テスト環境
•監視対象をたくさん用意できないので...✓ 2つの監視対象(Zabbixエージェント)を複数登録して監視✓ネットワーク的に遅延があまりない環境
18
Zabbixサーバ
Zabbixエージェント Zabbixエージェント
•Core 2 Duo 1.8GHz •メモリ4GB•Zabbix 1.6.9-2.JP
利用するテンプレート
• ZABBIX-JPのTemplate_OS_Linuxを利用
19
設定項目 アイテム数 トリガー数 監視間隔
死活監視 1 1
5分
CPU、メモリ、ネットワーク、ディスク 32 8
5分プロセス、ポート 8 5 5分
その他 6 2
5分
合計 47 16
5分
ホストの登録•同じ監視対象を複数ホストとして登録
20
ホスト名 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
・・・
確認ポイント(1) - Zabbixサーバの負荷• Zabbixサーバにもエージェントをインストール、スクリーンを作成して負荷状況を確認
21
ロードアベレージ
メモリ使用量
ネットワーク
CPU使用率
スワップ
I/O
確認ポイント(2) - キュー
• [管理] ⇒ [キュー]画面で監視の遅延有無を確認
22
確認ポイント(3) - Zabbixサーバの状態
• [レポート] ⇒ [Zabbixサーバの状態]画面でホスト、アイテムの登録数を確認
23
確認ポイント(4) - 監視データ• [監視データ] ⇒ [最新データ]画面でヒストリを表示して監視データに遅延がないかを確認
24
ホスト追加 - ホスト10/アイテム500
25
0.2
ホスト追加 - ホスト20/アイテム1000
26
0.2
赤:write I/O
ホスト追加 - ホスト30/アイテム1500
27
0.2
ホスト追加 - ホスト60/アイテム3000
28
0.2
赤: user time
ホスト追加 - ホスト100/アイテム5000
29
0.2
ホスト追加 - ホスト200/アイテム10000
30
0.2
赤: user time黄: iowait time
ホスト追加 - ホスト500/アイテム23000
31
2
赤: user time黄: iowait time
キュー - ホスト500/アイテム23000
•特に遅延は発生していない
32
Zabbixのチューニングポイント
33
その前に...Zabbixサーバの監視のしくみ
• Zabbixサーバのプロセス
34
Zabbixサーバプロセスが複数起動します
Zabbixサーバのプロセス
•起動直後のZabbixサーバのログを見ると...
35
役割ごとに処理を担当するプロセスが起動している
Pollerプロセスの役割
• Zabbixエージェント、SNMPエージェント、シンプルチェックのポート監視を行う専用のプロセス
36
ZabbixサーバPollerプロセス
データベース (2) 監視(1) 監視リスト取得
ZabbixエージェントSNMPエージェント(3) データを返す(4) データを保存
Pingerプロセスの役割
• Ping監視を行う専用のプロセス
37
ZabbixサーバPingerプロセス
データベース (2) Ping実行(fping)
(1) 監視リスト取得
監視対象機器(3) 結果を保存
Zabbixサーバの設定パラメータ(1)
•監視プロセス数の調整
• Zabbix 1.6
38
設定パラメータ 説明
StartPollers=5Zabbixエージェント、SNMPエージェント、シンプルチェックを利用した監視用のプロセス起動数
StartPingers=1 Ping監視用のプロセス起動数
設定パラメータ 説明
StartDBSyncers=1DB書き込み前にメモリキャッシュを行う専用のプロセ
ス”DBSyncers”を起動。デフォルト無効
Zabbixサーバの設定パラメータ(2)
• Zabbix 1.8
39
設定パラメータ 説明
CacheSize=8M 監視設定のキャッシュサイズ
CacheUpdateFrequency=60 監視設定のキャッシュを更新する間隔
HistoryCacheSize=8M ヒストリデータのメモリキャッシュサイズ
TrendCacheSize=4M トレンドデータのメモリキャッシュサイズ
HistoryTextCacheSize=16Mテキスト形式のヒストリデータの
キャッシュサイズ
MySQLの設定パラメータ(1)
• InnoDBのメモリ関連のパラメータ
✓デフォルト値が少なすぎる✓物理メモリの8割まで割り当ててOKとマニュアルに記載あり✓ただし、OS、http、Zabbixサーバ用のメモリは残しておいてね
40
設定パラメータ 説明 デフォルト値
Innodb_buffer_pool_sizeInnoDBのデータのメモリキャッ
シュサイズ8MB
MySQLの設定パラメータ(2)• InnoDBのログファイル関連のパラメータ
✓ログファイルはMySQLのアプリケーションログ、ではなくDB書き込み前にデータを追記形式で保存しておくところ
✓ログファイルの実体は/var/lib/mysql/ib_logfile*✓ログファイル設定を変更したら必ず
MySQL停止 ⇒ ib_logfile*削除 ⇒ MySQL起動を行うこと✓ログファイルは64~128MB×2もあれば十分。それ以上でもあまり効果はない
41
設定パラメータ 説明 デフォルト値
innodb_log_file_size更新ログを記録するための
ファイルサイズ5MB
innodb_log_files_in_group ログファイルの作成数 2
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
45
2
赤: user time黄: iowait time
MySQLのパラメータ変更• /etc/my.cnf
✓ Zabbixサーバ停止✓MySQLサーバ停止✓ rm -rf /var/lib/mysql/ib_logfile* ✓MySQLサーバ起動
46
設定パラメータ 設定値
innodb_buffer_pool_size 8MB ⇒ 1024M
innodb_log_file_size 5MB ⇒ 128M
innodb_log_files_in_group 2 (変更なし)
設定変更後 - ホスト500/アイテム23000
47
2
赤: user time黄: iowait time
ホスト追加 - ホスト800/アイテム38000
48
2
赤: user time黄: iowait timeホスト100台
追加時の負荷
ホスト追加 - ホスト900/アイテム42000
49
2
赤: user time黄: iowait time
ホスト追加 - ホスト900/アイテム42000
50
•キューには溜まっていない
Zabbixサーバの設定パラメータ(1)•監視プロセス数の調整
✓ Zabbixサーバの再起動
51
設定パラメータ 説明
StartPollers 5 ⇒ 20
StartPingers 1 ⇒ 5
プロセス変更 - ホスト900/アイテム42000
52
2
•キューに溜まってしまっている
プロセス変更 - ホスト900/アイテム42000
53
Zabbixサーバのプロセス•プロセスの動き
✓ Pollerプロセス、Pingerプロセスがそれぞれデータベースをオープンすることにより、不必要に起動数を増やすとパフォーマンスが落ちる
✓ 1.8では処理が変更され、パフォーマンスが向上している
54
Zabbixサーバの設定パラメータ(1)•監視プロセス数の調整
✓ Zabbixサーバの再起動
55
設定パラメータ 説明
StartPollers 20 ⇒ 5
StartPingers 5 ⇒ 1
StartDBSyncers 0 ⇒ 1
DBSyncers - ホスト900/アイテム42000
56
2
結論•MySQLのチューニング
✓ innodb_buffer_pool_sizeとinnodb_log_file_sizeは必ず修正した方が良い
✓ I/Oパフォーマンスが向上する
• Zabbixサーバのプロセス✓キューに溜まっていなければPollerやPingerプロセス数の設定を変更しても効果なし。むしろ逆効果の場合もある
✓ StartDBSyncersは一定の効果あり
57
監視対象
分散監視機能 (大規模システムの監視)
• Zabbixプロキシ✓ Zabbixサーバに代わって監視を行う専用のサーバ✓ スケールアウトすることにより監視の負荷分散が可能✓ プロキシを使えばより監視対象を増やせる
58
ZabbixサーバZabbixプロキシサーバ Zabbixプロキシサーバ
監視設定と監視データの一元管理