Tech Sketch Bucket of Technical Chips by TIS Inc.

PostgreSQLを監視するZabbixテンプレート pg_monz

Pocket

先日、オープンソースデータベース PostgreSQL を監視する Zabbix 監視テンプレート「pg_monz」を公開しました。ここでは、pg_monzの特徴や使い方を解説するとともに、pg_monzの開発に至った経緯についても触れてみようと思います。


pg_monz の概要

2013年11月5日にTIS株式会社(以下TIS)とSRA OSS, Inc. 日本支社(以下SRA OSS)で共同開発した「pg_monz」をオープンソースソフトウェア(以下OSS)として公開しました。

pg_monz公開のプレスリリース(TIS)
pg_monz公開のプレスリリース(SRA OSS

pg_monz1 は「PostgreSQL monitoring template for Zabbix」の略称で、オープンソースデータベースの PostgreSQL (開発元:The PostgreSQL Global Development Group)を、同じくオープンソースの統合監視ツールである Zabbix (開発元:Zabbix SIA)で監視する際の監視設定を盛り込んだテンプレートです。なお、pg_monz は Apache License Version 2.0 の OSS として GitHub 上に公開しており、今後様々な方からフィードバックをいただきながら改善、機能強化を図っていきたいと思っています。

GitHubリポジトリ
pg_monzのドキュメントサイト

pg_monz の特徴

テンプレート導入が容易

監視される対象のサーバ(Zabbix Agentが稼働するサーバ)へ外部スクリプトファイルをコピーし、テンプレートファイル(XML形式)をZabbixサーバへインポートするだけで pg_monz に設定された PostgreSQL の監視がスタートします。また、pg_monz は Zabbix の標準機能のみを利用しており、特別なモジュールを導入したり、複雑な設定変更といった作業は不要です。

pg_monz_architecture.png

データベースに監視項目が自動で追随

pg_monz ではデータベース容量やキャッシュヒット率などデータベース単位で情報取得する監視項目があります。データベースは1サーバに複数作成できるので、データベースを追加した場合はそのデータベースに対する監視項目を新たに設定する必要がありますが、各データベースで監視する内容は同じなので、この作業は自動で行いたいところです。

pg_monz は Zabbix のローレベルディスカバリ機能を使い、データベースの最新状態から監視項目を自動生成する仕組みを用意していますので、データベースの増減に伴う設定作業を削減することができます。

pg_monz の導入手順

導入手順は以下の通りです。なお、詳細な手順は pg_monz のドキュメントサイトに画像付きで解説していますので、 こちら をご覧ください。

0. Zabbixサーバ、Zabbixエージェントの導入

pg_monz にはバージョン 2.0 以上の Zabbix サーバが必要です。また、PostgreSQL の情報取得に Zabbix エージェントの機能を利用するため、監視対象のサーバに Zabbix エージェントを導入しておく必要があります。ここでは Zabbix サーバ、エージェント導入方法の解説は割愛しますが、あらかじめ導入しておいてください。

1. 設定ファイル、スクリプトのインストール

PostgreSQL 情報取得用の SQL を定義した userparameter_pgsql.conf を、Zabbix エージェントがインストールされているマシンにコピーし2、Zabbix エージェント設定ファイル zabbix_agentd.conf の Include 設定に userparameter_pgsql.conf を追加します。また、ローレベルディスカバリ機能で使用するスクリプト(find_dbname.sh, find_dbname_table.sh)も Zabbix エージェントがインストールされているマシンにコピーし、実行権限を付加します3

2. テンプレートのインポート

Zabbix の Web 管理画面にログインし、テンプレート(pg_monz_template.xml)をインポートします。

3. テンプレートのマクロの設定

Zabbix の Web 管理画面で、テンプレートを適用する環境にあわせてマクロを修正します。通常は以下の項目を修正すればよいと思います。

マクロ名 設定内容
{$PGDATABASE} 接続するデータベース名
{$PGHOST} PostgreSQL 稼働サーバのIPアドレス(エージェントと同じサーバなら 127.0.0.1)
{$PGLOGDIR} PostgreSQL のログファイルが格納されているディレクトリ
{$PGPORT} PostgreSQL へ接続するポート番号
{$PGROLE} PostgreSQL へ接続するユーザ名(パスワードなしで接続可能なユーザ)
{$PGSCRIPTDIR} スクリプトを配置したディレクトリ

4. PostgreSQL ホストの作成

Zabbix の Web 管理画面で監視対象のホストを作成し、2.でインポートしたテンプレートを割り当てます。

pg_monz の監視イメージ

テンプレートを設定してしばらくすると自動的に監視が開始されます。Zabbix Web 管理画面の「監視データ (Monitoring)」 - 「最新データ (Latest data)」に、取得した各項目の最新値が表示されていれば、監視データが正常に取得できています。

latest_items.png

監視データから以下の様なグラフも自動的に作成されます。

データベースサイズの遷移

DBサイズ.png

データベース接続数の遷移

DB接続数.png

pg_monz がどのような内容を監視するかは、 こちら で確認してみて下さい。

pg_monz 開発の経緯

ここで「なぜTISとSRA OSSがpg_monzを共同開発するに至ったか?」という背景をお話しておこうと思います。

PostgreSQLの現状と課題

PostgreSQLはオープンソースのDBMSとして着々と利用範囲が拡大しており、特にここ数年では商用のDBMS利用が当たり前だった企業向けシステムのDBMSとしてPostgreSQLが導入されるケースが増えています。これはPostgreSQLのDBMSとしての機能や性能が商用のDBMSと比較して引けをとらない、という理解が広まってきたことが背景にあり4、今後も利用される範囲が広がっていくことが期待されます。

一方でDBMSの運用に着目すると、DBMS自体が備える運用機能、あるいはサードパーティ製の運用ツールの充実度といった面でPostgreSQLは商用のDBMSに遅れをとっており、どのように運用すればよいかというノウハウもまだまだ整備されていない、という現状です5

Zabbixの現状と課題

Zabbixもオープンソースの統合監視ツールとして利用範囲が拡大しており、日本国内でも導入事例を聞くことが多くなってきました。これはZabbixが監視ツールに必要な機能をほぼ実現しており、一般的なシステム監視のニーズに応えられるツールと理解されつつあることが背景にあり、PostgreSQL同様に今後も普及が進んでいくものと期待されます。

一方で一定レベル以上のシステム監視を実現しようとした場合、監視項目を設定するコストがかかります。まず、Zabbixで監視項目を設定するには監視で使うアイテムのキーや障害通知に使うトリガ条件式の書き方、関数の使い方といったZabbixに関する知識を身につける必要があり、一定の学習コストが必要になります。また、DBMSやアプリケーションサーバといった、Zabbixが標準でアイテムを用意していないレイヤを監視する場合は、自分で監視アイテムを取得するスクリプトを作りこむ必要があり、この部分にもコストがかかります。

なお、Zabbixにはテンプレートという仕組みが用意されており、よく使われる監視のパターンをテンプレート化しておけば、監視項目を設定するコストを削減できますが、Zabbix導入後の標準状態で用意されているテンプレートのバリエーションはまだまだ少ないのが現状です6

pg_monzの開発のきっかけ

TISとSRA OSSはともにPostgreSQL,Zabbixを自社のビジネスに活用しており、利用を促進させたいという意識は一致していました。また、PostgreSQL,Zabbixのコミュニティで顔を合わせる機会も多く、課題を解消する手段として「PostgreSQL用のZabbix監視テンプレートがあるといいよね」と意気投合したのが、pg_monzを開発するきっかけとなりました。

pg_monz の今後

今回のリリースではシングルサーバの PostgreSQL を監視する機能を提供していますが、今後はストリーミングレプリケーションやHAクラスタソフトウェアを組み合わせた PostgreSQL クラスタ環境を監視できるような機能強化を予定しています。また、pg_statsinfo、pg_stat_statment といった周辺ツールとの連携を強化したり、Zabbix 2.2, PostgreSQL 9.3 といった新バージョンへの対応や機能強化も行っていきたいと考えています。

pg_monz はこれからもオープンな形で開発を進めていくつもりですので、興味がある方は是非開発にも参画していただければと思います7

脚注

1 ちなみに日本語では「ぴーじーもんず」と読んでください。

2 例えば Zabbix エージェントを /usr/local/zabbix/ にインストールされている場合は、/usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_pgsql.conf にファイルをコピーします。

3 例えば /usr/local/bin 以下にインストールする場合は以下の様にします。

4 エンタープライズ利用を促進する PostgreSQLエンタープライズコンソーシアム の様な活動も行われています。

5 PGEConsでも運用面のノウハウ整備を行う活動が今年度から立ち上がりました。

6 DBMSはMySQLを監視するテンプレートは用意されていますが、PostgreSQLを監視するテンプレートはありません。。。

7 pg_monzユーザーグループ pg_monz@googlegroups.com までご連絡ください。

エンジニア採用中!私たちと一緒に働いてみませんか?