2012年12月12日

HinemosでPostgreSQLの性能を監視する

PostgreSQL Advent Calendar 2012(全部俺)のDay 12です。

「最近(個人的に)可視化ブームが訪れている」という話を前回のエントリで書きました。

パフォーマンスに関連するデータを可視化してくれるツールにはさまざまな種類があり、いろいろと目移りしてしまうのですが、今回はオープンソースの運用管理ツール「Hinemos」でPostgreSQLのパフォーマンス情報の可視化を行う方法を紹介します。

■HinemosとPostgreSQL性能監視


Hinemosはオープンソースの統合運用管理ソフトウェアです。システム監視機能やジョブ管理機能の機能等を備えており、システムの運用管理をサポートしてくれるソフトウェアになります。

Hinemos:コンピュータ、システム、ネットワークの運用管理を実現するオープンソースソフトウェア(OSS)
http://www.hinemos.info/

先日、この「Hinemosへのアドオン」という形で、PostgreSQLの性能情報を取得・蓄積・可視化・監視することができるツールを作成しました。

Hinemos PostgreSQL性能監視オプション
http://www.uptime.jp/ja/products-services/hinemos-postgres-addon/

このツールは、簡単に言うと「少し大きめのスクリプト」なのですが、オープンソースで公開されており、このスクリプトとHinemosを組み合わせることによって、比較的簡単にPostgreSQLの性能情報を可視化することができます。

動作の前提条件としては、
  • Hinemosのバージョンが4.0以降であること
  • PostgreSQLサーバでHinemosエージェントが動作していること
  • PostgreSQLサーバがUnix系サーバであり、Perlが動作すること
くらいです。

■インストール


Hinemosそのもの(マネージャやエージェント、クライアント)のインストールから説明すると非常に長くなってしまいますので、ここではHinemos自体のインストール方法は割愛します。Hinemosそのもののインストールについては、公式のマニュアル等を参照してください。

Hinemos:コンピュータ、システム、ネットワークの運用管理を実現するオープンソースソフトウェア(OSS)
http://www.hinemos.info/

本エントリでは、Hinemosマネージャ、Hinemosエージェント、Hinemosクライアントのインストールが完了し、動作してることを前提として解説を進めます。

PostgreSQL監視オプションのソースコードはGitHubで配布されていますので、まずはそちらからダウンロードします。

uptimejp/hinemos-postgres-addon
https://github.com/uptimejp/hinemos-postgres-addon

今回は11月14日のリリース版である hinemos-postgres-addon-r20121114.zip を使います。
[snaga@devsv02 hinemos]$ wget --no-check-certificate https://github.com/downloads/uptimejp/hinemos-postgres-addon/hinemos-postgres-addon-r20121114.zip
--2012-12-04 01:44:39--  https://github.com/downloads/uptimejp/hinemos-postgres-addon/hinemos-postgres-addon-r20121114.zip
(...snip...)
Length: 13016 (13K) [application/zip]
Saving to: `hinemos-postgres-addon-r20121114.zip'

100%[======================================>] 13,016      30.1K/s   in 0.4s

2012-12-04 01:44:49 (30.1 KB/s) - `hinemos-postgres-addon-r20121114.zip' saved [13016/13016]

[snaga@devsv02 hinemos]$ 
ZIPファイルをダウンロードしたら、ZIPを解凍し、make installを実行して mon_pgsql スクリプトをインストールします。スクリプトは /opt/hinemos_agent/bin にインストールされます。
[snaga@devsv02 hinemos]$ unzip hinemos-postgres-addon-r20121114.zip
Archive:  hinemos-postgres-addon-r20121114.zip
   creating: hinemos-postgres-addon-r20121114/
  inflating: hinemos-postgres-addon-r20121114/test_mon_pgsql.sh
  inflating: hinemos-postgres-addon-r20121114/LICENSE
  inflating: hinemos-postgres-addon-r20121114/Makefile
  inflating: hinemos-postgres-addon-r20121114/mon_pgsql
[snaga@devsv02 hinemos]$ cd hinemos-postgres-addon-r20121114
[snaga@devsv02 hinemos-postgres-addon-r20121114]$ ls -l
total 48
-rw-rw-r-- 1 snaga snaga 18092 Nov 14 13:12 LICENSE
-rw-rw-r-- 1 snaga snaga   682 Nov 14 13:12 Makefile
-rwxrwxr-x 1 snaga snaga 19695 Nov 14 13:12 mon_pgsql*
-rwxrwxr-x 1 snaga snaga   441 Nov 14 13:12 test_mon_pgsql.sh*
[snaga@devsv02 hinemos-postgres-addon-r20121114]$ su
Password:
[root@devsv02 hinemos-postgres-addon-r20121114]# make install
install -m 755 mon_pgsql /opt/hinemos_agent/bin
[root@devsv02 hinemos-postgres-addon-r20121114]# 
インストールが完了したら、mon_pgsqlスクリプトを実行してみます。

mon_pgsqlスクリプトはHinemosエージェントから呼び出される外部コマンドになっています。そのため、コマンドラインで実行して動作確認することが可能です。
[postgres@devsv02 ~]$ /opt/hinemos_agent/bin/mon_pgsql

Usage: /opt/hinemos_agent/bin/mon_pgsql [<option>...] <search_key>

Options:
    -h <host>     Host name to connect the database.
    -p <port>     Port number to connect the database.
    -U <user>     User name used to connect the database.
    -d <dbname>   Database name to be connected.
    -v            Verbose output.

Search keys:
    session
    cache_hit
    tuple_wrtn
    tuple_read
    blks_read
    blks_wrtn
    txn
    xlog_wrtn
    dbsize
    locks

[postgres@devsv02 ~]$ 
上記のように、mon_pgsqlスクリプトはPostgreSQLデータベースへの接続用のオプションを受付、かつ「どのようなデータを取得するか」というキー(search key)をコマンドラインオプションとして受け付けます。

受け付けるキーは以下の通りです。
  • session:セッション数
  • cache_hit:キャッシュヒット率
  • tuple_wrtn:タプル更新(INSERT/UPDATE/DELETE)
  • tuple_read:タプル読み込み(RETURN/FETCH)
  • blks_read:ブロック読み込み
  • blks_wrtn:ブロック書き込み
  • txn:トランザクション数
  • xlog_wrtn:WAL書き込み量
  • dbsize:オブジェクトサイズ
  • locks:ロック
例えば、現在のセッション数を取得したい場合には、キーに「session」を指定して実行すると、以下のように、アクティブ、アイドル、ロック待ちのそれぞれのセッション数を取得することができます。
[postgres@devsv02 ~]$ /opt/hinemos_agent/bin/mon_pgsql -h localhost -p 5432 -U postgres -d postgres session
active,1
idle,1
wait,0
[postgres@devsv02 ~]$
ここまで動作確認できたら、いよいよHinemosへの登録と、Hinemos上でのデータの可視化に進みます。

■Hinemosでのリポジトリへのノード登録


まず、「リポジトリ[ノード]」のビューを開き、「リポジトリ[ノードの作成・変更]」ダイアログからサーバそのものをリポジトリに登録します。この手順は、PostgreSQLサーバに限らず、Hinemosで監視するサーバに共通のステップです。

■Hinemosでのカスタム監視の登録


次に、「性能[一覧]」ビューを開き、監視の追加を行います。

「監視種別」としては「カスタム監視(数値)」を選択します。



そして、「カスタム監視[作成・変更]」のダイアログでPostgreSQL監視用の設定を行います。基本的な設定項目と設定内容は以下の通りです。
  • 監視項目ID:監視の設定を識別する任意のIDを指定します。
  • スコープ:監視対象(スコープ)を指定します。
  • 間隔:監視の間隔を指定します。
  • 実効ユーザ:mon_pgsqlスクリプトを実行するOSユーザを指定します。
  • コマンド:mon_psgqlスクリプトを実行するコマンドラインを指定します。
  • 監視/判定(情報、警告、危険):監視で設定する閾値を入力します。
  • 監視/アプリケーション:アプリケーション名を記入します。
  • 収集/収集値表示名:収集・蓄積するデータの名称を記入します。
  • 収集/収集値単位:収集・蓄積するデータの単位を記入します。
以下はPostgreSQLのセッション数を監視する設定をしている例です。



監視の設定を行うと、「監視設定[一覧]」のビューに設定した監視項目の一覧が表示されます。

■Hinemosでの性能情報の表示


監視設定を行うと、「性能[一覧]」のビューに性能情報を収集する項目の一覧が表示されます。



ここで右上のアイコンから「グラフの追加」を選択すると、「性能」のビューが作成され、グラフの表示が出てきますので、「表示種別」で「デバイス別表示」を選択すれば、グラフの表示は完了です。

mon_pgsqlコマンドで複数種別の項目が出力される場合(セッションであればactive/idle/waitなど)には「デバイス別表示」を選択する必要があります。

「グラフ種別」については、「折れ線グラフ」か「積み上げ面グラフ」かは自由に選べます。

■まとめ


今回は、PostgreSQLの性能情報の収集・可視化・監視ということで、HinemosによるPostgreSQLのモニタリングをご紹介しました。

データベースは、その性質上、性能や可用性についてシビアに見られることが多いと思います。既存のソリューションとうまく組み合わせながら、うまく運用管理をしていただければと思います。

では、また。

0 件のコメント:

コメントを投稿