連載
» 2013年10月01日 18時00分 UPDATE

クラウド&DevOps時代の運用をZabbixで(2):DevOps実践に有用なZabbixの機能〜開発と運用を近づける監視 (1/2)

ますますクラウド化が進む環境において、システムにはより迅速な対応が求められるようになっています。変化の早いシステムを適切に運用していくためにはどうすればいいのでしょうか? この記事では、クラウドやDevOpsを前提としたITシステムの「運用」に求められることを整理し、そういった運用に対して、オープンソースの統合監視ツール「Zabbix」がどのように有効活用できるかを紹介します。

[池田大輔(TIS株式会社),@IT]

 第1回目の「クラウド&DevOps時代に求められる運用とは〜Zabbixが有効な理由」では、クラウドを使ったDevOps実践に対してZabbixが多くの有用な機能を備えていることを紹介しました。第2回、第3回では、具体的にどのようにそれらの機能を活用できるか、

  1. 開発と運用を近づけるための監視
  2. 自動化機能による運用作業の削減

という2つの視点に基づいて、例を挙げながら解説します。

 第2回となる本記事ではまず、開発と運用を近づけるためのZabbixの機能について紹介します。なお、本連載の内容は、Zabbix2.2 評価版の情報に基づいています(Zabbix 2.2の最新リリース版では一部仕様が異なる場合があります。最新の情報はZabbixの公式マニュアルを参照してください)。

見る人の役割によって異なる監視項目

 Zabbixは非常に豊富な監視機能を備えています。これらを活用することで、運用者にとってだけでなく、開発者にとっても有用な情報を集約できます。

 具体的な対応例として、とあるWebアプリケーションの運用場面を想定してみましょう。運用中にWebアプリケーションのレスポンスが遅くなっていることが検知されました。この時、運用者、開発者はそれぞれどういったポイントを確認するでしょうか?

運用者はこう見る

 運用者は、一例として、サーバやネットワークの状態などインフラ層の負荷状況を探りにかかることが考えられます。例えば、

  • ネットワークI/Oの負荷が上昇していないか?
  • CPU処理負荷が上昇していないか?
  • ディスクI/Oがボトルネックになっていないか?
  • サーバで利用可能なメモリ量が不足していないか?

 これらの情報はZabbixの場合、Zabbix Agentによるリソース監視で対応可能です。それぞれ、以下のような監視アイテムを設定することで監視が可能となっています。

■表 Zabbix Agentによるリソース監視アイテム例

分類 アイテム設定 概要
CPU関連 system.cpu.load[,]
- cpu:all、percpuのいずれかを選択(allは全CPUの合計、percpuは1コア平均)
- mode:1分平均、5分平均、15分平均のいずれかを選択(avg1,avg5,avg15)
CPUロードアベレージ監視。
- system.cpu.util[,,]
- cpu:allもしくは監視したいCPU番号を選択
- type:取得したい値のタイプを選択(user,system,idleなど)
- mode:1分平均、5分平均、15分平均のいずれかを選択(avg1,avg5,avg15)
CPU使用率監視。
監視結果は%単位で管理。
(※Windowsはtypeがsystemのみサポート)
Memory関連 vm.memory.size[]
- mode:total,buffers,free,used,available,pavailableなど、監視したいメモリ種別を選択
メモリに関する情報の監視。
(※Windowsはtotal,cached,free,used,pused,available,pavailableのみサポート)
- proc.mem[,,,]
- name:プロセス名指定(/proc/番号/statusに表示されるNameを指定)
- user:プロセス起動ユーザー指定
- mode:同じプロセス名が存在する場合の対応を指定(sum,avg,max,minから選択)
- cmdline:プロセスの実行引数によるフィルタリング指定(/proc/番号/cmdlineを元にフィルタリング)
プロセスごとのメモリ使用量の監視。
(※Windows未対応。proc_infoなど別手段で実施)
Network関連 net.if.(in|out|total)[if,]
- if:インターフェイス名指定(eth0,eth1など)
- mode:監視種別を指定(bytes,packets,errors,droppedのいずれかを選択)
NICへの入力データ量(in)出力データ量(out)入出力データ量(total)の監視。
Disk関連 vfs.dev.(read|write)[device,,]
- device:デバイス名指定(/data,/など)
- type:監視種別を指定(sectors,operations,sps,opsなどから選択)
- mode:1分平均、5分平均、15分平均のいずれかを選択(avg1,avg5,avg15)
デバイスからの読み込み量(read)、書き込み量(write)の監視。
(※Windows未対応。perf_counterなど別手段で実施)
Windows関連 proc_info[,,]
- process:プロセス名指定(zabbix_agentd.exeなど)
- attribure:監視したい属性指定(メモリ使用量を監視したい場合は「wkset」を指定)
- type:同じプロセス名が存在する場合の対応を指定(sum,avg,max,minから選択)
各プロセスごとの属性情報(メモリ使用量、CPU使用時間など)を監視
- perf_counter[counter,]
- counter:パフォーマンスカウンタ名指定
- interval:カウンタ情報から平均値を算出する間隔
Windowsのパフォーマンスカウンタ値の監視

開発者はこう見る

 一方開発者は、パフォーマンス低下時にどういったポイントを疑うでしょうか。

  • どのページへのアクセスが遅いのか?
  • DBへのクエリ実行時にロックやロールバックなどが頻発していないか?
  • アプリケーションログに不審な情報が表示されていないか?

 もちろん他にも多くの事柄が考えられますが、やはりこうしたアプリケーション開発視点の項目が中心となることが考えられます。これらの項目をZabbixで監視し、開発者にとっても有用な情報として提示するにはどうすればいいでしょうか?

アプリケーション監視の例

 ZabbixのWeb監視機能とDB監視機能を例に、開発者にとって有用な情報を収集する方法を紹介します。

Web監視機能

 「どのページへのアクセスが遅くなっているのか?」を知るためには、ZabbixのWeb監視機能が有効です。ZabbixのWeb監視機能は、ページごとに応答時間、レスポンスコード、指定文字列が正しく表示されているかなどを監視できます。単一ページの監視だけでなく、シナリオとしてステップ実行することも可能です。

 具体的な設定方法は、過去の記事「Web監視機能を利用する」を参照してください。

 Web監視の結果は、以下の画面1のように、ステップごとにどのような状況であるかがグラフィカルに表示されます。このように監視結果を視覚化することで、「どのページへのアクセスに時間がかかっているのか」などを一目で確認できます。

zabbix02_scr01.png 画面1 Web監視結果

Zabbix 2.2の最新ポイント

 ここで、Zabbixの最新バージョンである2.2で新しく実装された最新の機能や改善点を紹介しておきましょう。

 Zabbix 2.2では、シナリオ設定画面において、経由するHTTPプロキシを設定できます。これまでは、Zabbix起動ユーザーの環境変数にプロキシ設定を加えておく必要がありました。この機能により、画面上から設定を行えるようになり、管理しやすくなっています。

 さらに、テンプレートにWeb監視設定情報を登録できるようになり、設定情報のインポート/エクスポート管理も行いやすくなっています。

 また機能面では、ステップごとに変数を追加する機能が追加されました。この機能により、あるページを監視した際に、表示されるHTMLコンテンツの内容を変数に格納し、次のステップの監視に活用するといったことが可能になります。

 具体的な使い方は以下の通りです。各ステップの設定画面に変数を設定するエリアが追加されています(画面2参照)。

zabbix02_scr02.png 画面2 シナリオ設定画面

 ここに、各ステップで登録する変数を設定します。変数の設定は以下の2種類の方法で行えます。

{変数名}=固定値
{変数名}=regex:正規表現

 正規表現を指定した場合、戻ってきたHTML(ヘッダーを含む)コンテンツに対して検索を実施し、マッチした1つ目の値を変数に格納できます。例えば、Step1でアクセスしたページ内に表示される会員IDを変数に格納し、Step2のページにアクセスする際に、その会員IDをPOSTデータに引き渡してアクセスするといった用途で利用できます。

 具体例は以下のようになります。ここでは、Step1のURLを「http://hostname/page1.html」と想定します。そして、このURLにアクセスした際に得られるHTMLには、以下のようなタグが含まれているとします。

<span class="memberid">12345678</span>

 このタグ中の会員IDを変数{memberid}に格納してStep2に移りたい場合には、Step1の変数設定欄に、正規表現を用いて次のように設定を行います(ZabbixではPOSIX拡張正規表現が利用可能です)。

{memberid}=regex:<span class="memberid">(.+?)</span>

 このように変数を格納しておくことで、Step2以降でその変数をPOSTパラメータまたはURLに設定できます。

DB監視機能

 次に、DBの監視機能を使ってDBの状況を確認する方法を紹介します。Zabbixの監視機能では、ロックの発生状況やロールバックの発生頻度といったDBのステータスが監視できます。

 DB監視は、以下の2通りの方法で実行可能です。

  1. ZabbixのODBC監視機能を利用
  2. Zabbix AgentのUserParameter機能を利用

 2.のUserParameterを利用して監視を実施する場合には、Zabbix AgentからDB情報を取得する任意のコマンド(MySQLのmysqladminコマンドやPosgreSQLのpsqlコマンドなど)の実行結果を監視できます。

 ここでは、1.のODBC監視機能を使って、PostgreSQL 9.2のステータス情報を監視する方法を紹介します。ODBCを使ったDB監視の事前設定方法については、Zabbix公式マニュアルを参照してください。

 以降、ODBC設定がされている前提で、ロールバックの発生回数を監視する設定例を紹介します。

 筆者のPostgreSQL環境では、/etc/odbcinst.iniおよび/etc/odbc.iniに以下の設定を追加しました。ここでは、testデータベースが事前に作成されていることが前提となっています。Driverで指定するodbcドライバ用のファイルの場所は、環境に応じて適切に変更してください。

[PostgreSQL92]
Description     = ODBC for PostgreSQL9.2
Driver          = /usr/pgsql-9.2/lib/psqlodbc.so
Setup           = /usr/lib/libodbcpsqlS.so
FileUsage       = 1
/etc/odbcinst.ini
[postgresql_test]
Description = PostgreSQL 9.2 database
Driver      = PostgreSQL92
Server      = 127.0.0.1
Database    = test
/etc/odbc.ini

 PostgreSQLのロールバック回数情報は、pg_stat_databaseテーブルのxact_rollbackのカラムから取得できます。この時注意が必要なのは、ZabbixのODBC監視ではSQL実行結果の先頭1カラム分の情報しか収集しない点です。そのため、「test」という名前のデータベースで発生したロールバック回数を監視したい場合には、次のSQL文を実行します。

SELECT xact_rollback FROM pg_stat_database WHERE datname=’test’;

 Zabbixへの監視アイテム設定は以下の画面3のように行います。

zabbix02_scr03.png 画面3 DB監視設定例

 画面の設定例中の「追加パラメータ」には、DSN=postgresql_testと指定しています。これは、odbc.iniに設定したデータソース名です。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。