Database Support Blog

Database Support Blog>PostgreSQLの監視で押さえておきたい3つの監視項目

  • PostgreSQL
2015.12.21

PostgreSQLの監視で押さえておきたい3つの監視項目

PostgreSQLで必要な監視項目は?

この記事は PostgreSQL Advent Calendar 2015 - Qiita の21日目の記事です。20日目は _john_doe_様 でした。

2015年もアシストのサポートセンターには様々なお問い合わせをいただきましたが、その中でも本番稼働中のデータベースの監視に関するお問い合わせが多かったです。そこで、今回は監視ツールでPostgreSQLを監視する際に最低限押さえておきたい3つの監視項目を紹介します。これらを監視ツールから監視することで、データベースの稼働状態の把握や、将来的に発生しうる問題を未然に防ぐことに役立ちますので、ぜひ設定しましょう。

お客様によって利用している監視ツールは様々ですので、今回は監視項目についてのみ解説します。

3つの監視項目

監視ツールでPostgreSQLを監視する際に最低限押さえておきたい監視項目は以下の3つです。

これら3つの監視を行うことで、予期せぬ問題やディスクフルによるデータベースの異常停止、今後発生しうる問題により早く対処できます。

以降では、各項目ごとの監視対象や設定時の注意点を紹介していきます。

1. プロセスの監視

監視目的/監視対象

データベースの異常停止をより早く検知して復旧までの時間を短くするために、プロセスの死活監視を行いましょう。マスタープロセス(postmasterプロセス)の監視のみを推奨します。他のpostgres子プロセスについては監視の必要がありません。異常停止した場合、マスタープロセスも異常停止するか、マスタープロセスによって該当プロセスが再起動されるかのいずれかであるためです。

注意点

監視ツールで設定するマスタープロセス数について

監視ツールによる障害の誤検知を防ぐために、監視ツールではマスタープロセス数が1以外の場合を異常とするのではなく、0の場合を異常な状態として検知するように設定しましょう。Unix系システムでは、PostgreSQLマスタープロセスは新規接続の度に自身のプロセスを複製(fork)し、バックエンドプロセス(サーバープロセス)を生成します。このため、以下の例のように一時的にマスタープロセスが2つ以上存在することがあります。これは仕様動作であり、異常な状態ではありません。

(マスタープロセスが2つ以上存在する際のps auxの結果例)

$ ps aux|grep /bin/postgres|grep -v gdb
p945 9077 0.0 0.0 42072 5664 pts/20 S 16:10 0:00 /home/p945/pgHome/bin/postgres
p945 9515 0.0 0.0 42072 2152 pts/20 t 16:34 0:00 /home/p945/pgHome/bin/postgres ★複製されたプロセス


2. ログファイルの監視

監視目的/監視対象

パフォーマンス劣化やデータ破損などデータベースの異常をより早く検知して対処するために、ログファイルのメッセージを監視しましょう。PostgreSQLでは発生した問題の深刻度ごとに メッセージレベル が設定されています。この中でもERROR、FATAL、PANICはデータベースの稼働に影響する可能性があるため、監視の項目に追加します。

また、 以前の記事 で紹介したスロークエリを検知する設定を行われている場合は、LOGのメッセージレベルでログファイルにメッセージが出力されますので、LOGのメッセージについても監視項目に追加しましょう。

注意点

Unix系システムにおけるログファイルのパーミッションについて

Unix系システムにおけるPostgreSQLの標準ログのパーミッションは0600、親ディレクトリのPGDATAのパーミッションは0700であるため、監視ツールからPostgreSQLの標準ログを監視できない場合があります。PostgreSQLインストールユーザー以外で監視ツールを使用する場合は、以下いずれかの対処が必要です。

PGDATA/postgresql.confの以下2つのパラメーターを変更します。設定変更後は、pg_ctl reloadコマンドで設定を反映する必要があります。

(postgresql.confの設定例)

log_file_mode=0640
log_directory='/var/log'


syslogやApacheのrotatelogsなどの外部のログ・ローテーション・プログラムを使用します。syslogを使用する場合は、PGDATA/postgresql.confの以下のパラメーターを変更します。設定変更後は、pg_ctl reloadコマンドで設定を反映する必要があります。

(postgresql.confの設定例)

--PostgreSQL標準ログに加えてsyslogにもログを出力する場合
log_destination='stderr,syslog'

--syslogにのみログを出力する場合
log_destination='syslog'


Apacheのrotatelogsを使用する場合は、以下のようにサーバーの標準エラー出力をパイプでrotatelogsコマンドに渡してください。

(サーバーの標準エラー出力をrotatelogsコマンドに渡す例)

$ pg_ctl start | rotatelogs /var/log/pgsql_log 86400


3. ディスク空き容量の監視

監視目的/監視対象

データ破損やデータベースの異常停止を予防するために、ディスクの空き容量を監視しましょう。PGDATAやTABLESPACE機能やアーカイブWALファイルで使用しているディスク空き容量の監視を推奨します。これらで使用するディスクの空き容量が不足した場合、データやWALファイルが破損しやすい状態になるためです。また、WALファイルを格納するファイルシステムが容量不足になった場合、データベースサーバーはPANICのメッセージレベルで異常停止します。

注意点

ディスク空き容量監視のしきい値について

ディスク容量や監視ツールから警告を検知した後の処理内容によってディスク空き容量監視のしきい値の設定は変わると思いますが、ディスク空き容量監視のしきい値には、対処を行うまでの時間も考慮して余裕を持った値を設定しましょう。

例えば、ディスク空き容量が1%になった時点で検知できても、対処を行う時にはデータやWALファイルの破損やデータベースが異常停止している可能性があります。しかし、ディスク空き容量が20%未満になった時点で関係者にメールを飛ばす設定が行われていれば、データベースの稼働に影響を与えることなく余裕を持って対処できます。

まとめ

今回は、 監視ツールでPostgreSQLを監視する際に最低限押さえておきたい監視項目として、プロセスの監視、ログファイルの監視、ディスク空き容量の監視の3つを紹介しました。これらを監視ツールから監視することでデータベースの障害や障害に繋がりうる問題により早く対処できますので、ぜひこの機会に今回紹介した監視項目の設定が行われているかを確認してみてください。

2015年のDatabase Support Blog(PostgreSQL)は本記事が最後です。2016年もサポートセンターにお問い合わせをいただくことの多い問題(お客様がお困りになることが多い問題)を紹介することで、データベースを管理される方のお役に少しでも立てればと思っています。

皆様、良いクリスマスを、そして良いお年をお迎えください。

PostgreSQL Advent Calendar 2015 22日目の担当は tom__bo_cs様 です。

執筆者情報

2007年にアシストに入社して以来、ORACLE製品やPostgreSQL、EDB Postgres製品のサポートに従事してきました。このブログではサポート対応で得た知識を元に、お客様がお困りになることが多い問題や各製品の新機能に関する検証結果などを提供します。


関連している記事

  • PostgreSQL
2016.06.03

【PostgreSQL 9.5】max_wal_sizeとmin_wal_sizeの概要

PostgreSQL 9.5で登場したmax_wal_sizeとmin_wal_sizeの概要と、checkpoint_segmentsがこれら2つのパラメータに置き替えられたことによるメリットご紹介します。

  • PostgreSQL
2016.03.08

PythonからPostgreSQLに接続する方法

psycopg2を使用してPythonからPostgreSQLへ接続する基本的な方法を紹介します。

  • PostgreSQL
2015.11.17

障害発生に備えて設定すべき3つのログ関連パラメーター

PostgreSQLにおいて、障害発生に備えて設定すべき3つのログ関連パラメーターを紹介します。これらのパラメーターを設定しておくことで、障害発生時にその状況を詳細に把握することができます。

カテゴリ一覧

アシストサポートセンターのご紹介 Oracle Database研修

ページの先頭へ戻る