データベース管理システムの運用でトラブルが発生したらどうするか。データベースサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は、監視ツールを活用してPostgreSQLを監視する際に最低限押さえておくべき「監視項目」を紹介します。
アシストのサポートセンターには、「“本番稼働中”のデータベースの監視」に関する問い合わせがよくあります。そこで今回は、監視ツールを活用してPostgreSQLを監視する際に最低限押さえておくべき3つの「監視項目」を紹介します。
この3つの情報を適切に採取し、監視ツールで監視するようにしておくことで、予期せぬ問題の対処や、ディスクフルによるデータベースの異常停止への対応など、「現時点のデータベース稼働状態の把握」と、「将来的なトラブルシューティング」に役立てられます。
「プロセス」の情報は、データベースの異常停止をより早く検知して、復旧までの時間を短くすることを目的に、システムの死活状況を監視するために採取します。
PostgreSQLでは、マスタープロセスである「postmaster」の監視のみを推奨します。他の子プロセスである「postgres」の情報までは監視する必要はありません。システムが異常停止した場合には、マスタープロセスも異常停止するか、マスタープロセスによって該当プロセスが再起動されるかのいずれかであるためです。
監視ツールによる障害の誤検知を防ぐために、監視ツールでは、マスタープロセス数が「0」である場合を異常な状態として検知するようにしましょう。
UNIX系システムでのPostgreSQLマスタープロセスは、新規接続のたびに自身のプロセスを複製(fork)し、バックエンドプロセス(サーバプロセス)を生成します。このため、一時的にマスタープロセスが2つ以上存在することがあります。これは仕様に沿った動作であり、異常ではありません。異常検知の条件を「1以外」にしない理由はこちらにあります。
$ 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 # <--複製されたプロセス
「ログファイル」は、パフォーマンスの劣化やデータ破損など、データベースの異常をより早く検知して対処するために採取します。
PostgreSQLのログファイルでは、発生した問題の「深刻度」ごとにメッセージレベルが設定されます。
深刻度レベル | 内容 | syslog | eventlog |
---|---|---|---|
DEBUG1..DEBUG5 | 開発者向けの連続的でより詳細な情報 | DEBUG | INFORMATION |
INFO | VACUUM VERBOSEの出力などの、ユーザーによって暗黙的に要求された情報 | INFO | INFORMATION |
NOTICE | 長い識別子の切り詰めに関する注意など、運用上の補助になる情報 | NOTICE | INFORMATION |
WARNING | トランザクションブロック外でのCOMMITのような警告情報 | NOTICE | WARNING |
ERROR | 現在のコマンドを中断させる原因となったエラーの情報 | WARNING | ERROR |
LOG | チェックポイントの活動のような、管理者向けの情報 | INFO | INFORMATION |
FATAL | 現在のセッションを中断させる原因となったエラーの情報 | ERR | ERROR |
PANIC | 全てのデータベースセッションを中断させる原因となった、より深刻なエラーの情報 | CRIT | ERROR |
出典:PostgreSQL 9.4.5文書 18.8. エラー報告とログ取得 |
このうち、緊急度の高い「ERROR」「FATAL」「PANIC」を監視項目として追加します。
なお、スロークエリの情報は「LOG」のレベルで出力されます。スロークエリを検知する設定を行っている場合には、LOGも監視項目に追加しましょう。
UNIX系システムにおけるPostgreSQLの標準ログのパーミッションは「0600」ですが、親ディレクトリのPGDATAのパーミッションは「0700」であるため、監視ツールからPostgreSQLの標準ログを監視できない場合があります。PostgreSQLインストールユーザー以外で監視ツールを使用する場合は、以下のいずれかの方法で対処できます。
「PGDATA/postgresql.conf」の以下2つのパラメーターを変更します。
log_file_mode=0640 log_directory='/var/log'
設定変更後、「pg_ctl reload」コマンドで設定を反映します。
Copyright © ITmedia, Inc. All Rights Reserved.