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のドキュメントに掲載されているので、こちらも参考ください。

2010年11月22日月曜日

MacBook Air 11インチを購入しました


MacBook Air 11インチモデルを購入しました。Apple Storeで以下のカスタマイズを行っています。
  • CPU: 1.6GHz
  • メモリ: 4GB
  • SSD: 128MB
  • USキーボード
もともとはMacBook Pro 13インチを常に持ち歩いてメインマシンとして使っていました。おそらく同じパターンで乗り換えを検討している人も多いだろうということで、実際に数日使ってみた感想を書いておきます。

良い点

  • とにかく軽い。MacBook Pro 13インチは2kg程度あるので、約半分の重さは持ち歩く際にかなり変わってきます。加えてMacBook AirはACアダプタも小さくて軽いので、両方持ち歩いている人はACアダプタ分も軽量化できます。
  • パフォーマンスはとてもよいです。私は基本的にオフィス用途とLinux関連のソフトウェア検証/開発を行っていますが、CPUパワーが必要ではない環境だとSSD効果もあって逆に1つ1つの操作は反応が良いかもしれません。
  • バッテリーは公称通り4〜5時間程度もっています。テキスト入力など軽い操作を行っているときは上部のバッテリーアイコンには残り時間が5:30とか6:30と出るときもあります。E-Mobileを使うと2〜3時間程度になりますが、思っていたよりも十分実用に耐えそうです。
  • USBポートが両側に別れているのは使いやすいです。MacBook Proのようにポートが2つ並んでいるためにUSB機器が干渉することがありません。

不満点

  • キーボードが打ちづらい。キーピッチはMacBook Pro 13インチと同じなのですが、ストロークがとても浅いのでキー入力の感覚はかなり変わります。慣れれば気にならないかもしれませんが日々のメインマシンとして使うにはつらそうです。
  • 液晶がグレードダウン。MacBook Proと比べると液晶のコントラストが低くて暗いように感じます。全体に色が淡い感じになったイメージです。MacBook Proとは異なる形式のパネルを使っているという情報もあるのでそのためでしょうか。
  • ディスク容量が小さい。これはSSDなので仕方がないですね。富士通からMacBook Airに搭載されているものと同タイプのSSDが販売されることも決まっているようなので、数年後にはより大容量のSSDに交換できるようになっていることを期待しています。

いくつか不満な所はありますが、パフォーマンスはMacBook Proとそれほど変わらず薄く軽くなっているわけですから、トータルで見るとオススメです。私の場合は普段使いにはキーボードとディスプレイを外付けするようにして上記の不満点はカバーするようにしています。

その他、MacBook Airについていくつか使ってみて分かった情報を書いておきます。
  • VMware FusionをインストールしてLinuxを動作させています。パフォーマンスにも問題なく、十分実用に耐えます
  • 会社では21インチのディスプレイにつないで使っています。グラフィックまわりはもたつくことなく表示できています
  • 会社でモニターに接続するためにminiDisplayPort-DVIアダプタを購入しました。純正品3,400円するのですが、楽天のRoydsで購入すると1,420円+送料210円で購入できました。安いので粗悪品かもしれないと心配していたのですが、見た目も悪くなく特に問題なく利用できています。

サードパーティ製品企業に対しても極秘に開発されていたのか、MacBook Air用のケースはほとんどない状態か、あっても高価だったりして気軽に購入できるものがありません。ヨドバシカメラを探してみたところELECOMのアクセサリケースBMA-B5がサイズ的にちょうど良さそうだったので購入しました。



入り口がぴったりすぎて入れるときに傷をつけてしまいそうだったので、普段はファスナーを全開にして使用しています。少し使用していれば緩んできて良い具合になっています。価格も5〜600円程度なのでとあえず傷防止のケースを探している人にはオススメです。


アップル (2010-10-21)
売り上げランキング: 10481


エレコム B5ノートPC対応 アクセサリーケース BMA-B5
エレコム
売り上げランキング: 15813

2010年8月18日水曜日

Zabbixでfpingを使うときの注意点

Zabbixサーバの設定ファイルzabbix_server.confにはSourceIPというオプションがあり、これを設定しておくとエージェントやSNMP、シンプルチェックなどのポーリング監視の際に利用するソースIPを設定できるようになっています。

この設定を利用した場合、pingを利用した監視(icmppingやicmppingsec)の場合にはfpingの-Sオプションを利用するようになっています。ところが-SオプションはDebian/Ubuntuに含まれているfpingには存在するのですが、標準のfpingやFedoraに含まれるfpingパッケージ、FrdoraパッケージをRHEL/CentOS用にリビルドしたepelリポジトリのパッケージには存在していません。

そのため、SourceIPオプションを利用した場合はfpingの返り値が「3」(そんなオプションはない!というエラーメッセージのリターンコード)になってしまい、Zabbixの画面上では必ずping監視が失敗してしまいます。

  • Fedora(epelパッケージ)のfpingオプション
Usage: /usr/sbin/fping [options] [targets...]
   -a         show targets that are alive
   -A         show targets by address
   -b n       amount of ping data to send, in bytes (default 68)
   -B f       set exponential backoff factor to f
   -c n       count of pings to send to each target (default 1)
   -C n       same as -c, report results in verbose format
   -e         show elapsed time on return packets
   -f file    read list of targets from a file ( - means stdin) (only if no -g specified)
   -g         generate target list (only if no -f specified)
                (specify the start and end IP in the target list, or supply a IP netmask)
                (ex. /usr/sbin/fping -g 192.168.1.0 192.168.1.255 or /usr/sbin/fping -g 192.168.1.0/24)
   -i n       interval between sending ping packets (in millisec) (default 25)
   -l         loop sending pings forever
   -m         ping multiple interfaces on target host
   -n         show targets by name (-d is equivalent)
   -p n       interval between ping packets to one target (in millisec)
                (in looping and counting modes, default 1000)
   -q         quiet (don't show per-target/per-ping results)
   -Q n       same as -q, but show summary every n seconds
   -r n       number of retries (default 3)
   -s         print final stats
   -t n       individual target initial timeout (in millisec) (default 500)
   -u         show targets that are unreachable
   -v         show version
   targets    list of targets to check (if no -f specified)
  • Ubuntuのfpingオプション
Usage: fping [options] [targets...]
   -a         show targets that are alive
   -A         show targets by address
   -b n       amount of ping data to send, in bytes (default 68)
   -B f       set exponential backoff factor to f
   -c n       count of pings to send to each target (default 1)
   -C n       same as -c, report results in verbose format
   -e         show elapsed time on return packets
   -f file    read list of targets from a file ( - means stdin) (only if no -g specified)
   -g         generate target list (only if no -f specified)
                (specify the start and end IP in the target list, or supply a IP netmask)
                (ex. fping -g 192.168.1.0 192.168.1.255 or fping -g 192.168.1.0/24)
   -i n       interval between sending ping packets (in millisec) (default 25)
   -l         loop sending pings forever
   -m         ping multiple interfaces on target host
   -n         show targets by name (-d is equivalent)
   -p n       interval between ping packets to one target (in millisec)
                (in looping and counting modes, default 1000)
   -q         quiet (don't show per-target/per-ping results)
   -Q n       same as -q, but show summary every n seconds
   -r n       number of retries (default 3)
   -s         print final stats
   -S addr    set source address
   -t n       individual target initial timeout (in millisec) (default 500)
   -T n       set select timeout (default 10)
   -u         show targets that are unreachable
   -v         show version
   targets    list of targets to check (if no -f specified)

また、監視対象ホストのIPアドレスがIPv4とIPv6混在の場合に、IPv6ホストへのPingが失敗する問題もあります。これも同様にDebianパッチで修正されていました。詳細はZABBIX-JPフォーラムへの投稿を参照してください。

ということで、Debianからパッチを持ってきてZABBIX-JP版のRPMに含めてリリースをするようにしました。

Fedoraには標準でZabbixパッケージが含まれているのですが、そのままインストールするとfpingは-Sオプションに対応していないので注意が必要です。

同様にDAGリポジトリなどで公開されているfpingパッケージを利用する場合でも、-Sオプションが利用できるパッチが適用されているかを確認してから使った方が良いです。

そもそも本家のfping自体、2002年からアップデートされていないんですね。利用ユーザもそれなりに多いだろうソフトウェアなのに、各ディストリビューションにはフォークに近いような形で含まれているのはオープンソースの考え方からすると残念な感じがします。

何か理由があるのかもしれませんが、本家にはパッチが反映されないんですかね。

参考情報:

2010年5月22日土曜日

AndroidのZabbixクライアントを試してみた

AndroidにはZabbixクライアントアプリケーションがあるらしいというWebの情報は以前から知っていたのですが、私はAndroid端末を持っていないので試すことができませんでした。今回@BlueSkyDetectorさんからお借りすることができましたのでインストールしてみたのでレポートしておきます。

AndroidマーケットでZabbixと検索すると「Zabbix」と「Zabbix on the go」の2つのアプリが出てきたので、両方ともダウンロードしてインストールしてみました。



Zabbix

まずは「Zabbix」の方から。起動した画面はとてもシンプルです。

「Options」をタッチすると基本的な設定を行う画面が開きます。

「API URL」からWebインターフェースのapi_jsonrpc.phpのURLを、「Username」「Password」にAPIアクセスを許可したユーザのアカウントとパスワードを設定すれば完了です。設定の作りとしては1つのZabbixサーバのクライアントにしかなれないようです。

ホーム画面に戻って「Active Triggers」をタッチするとトリガーの一覧が表示されます。ただこれは現在「障害」の状態になっているトリガーではなく、どうやら設定が有効の状態になっているトリガーの一覧のようです。

テンプレートのトリガー設定まで表示されてしまっているので、あまり使う場面が想像できないのですが、まだ開発途中なのでしょうか。各トリガーの設定をタッチしても何も起こらなかったので、ここから設定が変更できるというわけでもなさそうです。

ホーム画面に戻って、今度はHostsをタッチすると設定されているサーバの一覧が表示されました。

「Zabbix server」をタッチすると、設定されているアイテムの最新データが一覧で表示されます。ZabbixのWebインターフェースから「最新データ」を表示したような感じです。

いまのところ機能としてはこれだけのようです。まだまだ開発途中といった印象でした。

Zabbix on the go

続いて「Zabbix on the go」を起動してみます。起動するとポップアップでZabbixサーバの設定がないことが表示され、設定の追加を促されます。

Zabbixサーバの設定追加画面。こちらはWebインターフェースにアクセスする場合と同じURL(api_jsonrpc.phpまでは含めない)を設定して、アカウントとパスワードを入れれば設定できました。試していないですが、複数のZabbixサーバにも対応しているようです。

設定が完了するとホーム画面に登録したZabbixサーバが表示され、右側に△!マークが出ています。

Zabbixサーバ名をタッチすると下側に現在障害の状態になっているトリガーのリストがスライド表示されました。障害が発生しているかどうかが分かりやすくて良い感じです。

この状態でトリガーのリストをタッチすると「Items」と「Triggers」のタブがある新規画面が開くのですが、エラーが出て先に進むことができませんでした。Zabbixサーバ側のバージョンの問題かと思い1.8.1のサーバに接続してみたのですが変化なしでした。

この画面からより詳細な情報を見れそうな感じなのですが使えずに残念です。開発者のサイトでは他にも以下のことができると解説されています。

  • バックグラウンドで動作させて障害発生時にアラート通知
  • SSL自己証明書を使ったhttps通信をサポート

現時点ではZabbix on the goの方が開発は進んでいて、障害の有無をAndroidから手軽に確認する程度であれば使えると思います。障害の詳細を見たりグラフの表示までできる機能はない(エラーで見れないだけかもしれませんが)ので、結局はブラウザからWebインターフェース経由で確認したり、メールで通知を受けとる必要が出てくるでしょう。まだ両方とも企業のシステムで実用的とはいえないですが、今後に期待したいところです。

ところで、今回初めてAndroidを使ったのですが、iPhoneと違って標準ではスクリーンショットを取る機能がないようでした。結局いつも使っているMacBook Pro(Snow Leopard)にAndroid SDKを入れて、Dalvic Debug Monitor(ddms)からスクリーンショットを取りました。

最初ddms自体が起動しなかったのですが、色々なサイトを参考にして私の環境ではddmsを開いて以下のように修正することで起動できました。

os_opts="-XstartOnFirstThread"
  ↓
os_opts="-XstartOnFirstThread"

私のMacBook Proは64ビットカーネルで起動するようにしているので、32ビットカーネルの場合は"-d32"を追加する必要があるかもしれません。

2010年5月11日火曜日

日経Linux 2010/6月号に「1万円で作る鉄壁のWebサーバ」を執筆しました

2010/5/8日発売の日経Linux第1特集「ケース別最適サーバ自作術」 のPart3に「1万円で作る鉄壁のWebサーバ」を執筆しました。

CentOS 5.4を使ってCMSを使ったセキュアなWebサーバを作るをコンセプトに、インストールから初期設定、ssh、ntp、sudoの活用方法、apache/php、drupal、postfix、logwatch、munin、awstats、バックアップまでを解説してます。

題材としてはとても基本的なことの集まりですが、できるだけシンプルかつセキュアになるように、運用もふまえた設定方法を解説しているつもりです。Linuxを使ったWebサーバを公開しようと考えている人や、今の時期ですとサーバ構築・運用管理を勉強している新人エンジニアにも参考にしていただける内容になっていますので、ご参考ください。