データベースインフラストラクチャを稼働させたら、何が起こっているかを把握する必要があります。すべてが正常に機能していることを確認したい場合、または何かを変更する必要がある場合は、監視が必須です。
データベーステクノロジーごとに、監視することがいくつかあります。これらの一部は、データベースエンジンやベンダー、さらには使用している特定のバージョンに固有のものです。
このブログでは、PostgreSQL環境で監視する必要があるものを見ていきます。
PostgreSQLで監視するもの
データベースクラスターまたはノードを監視する場合、考慮すべき主な事項が2つあります。オペレーティングシステムとデータベース自体です。両側から監視するメトリックと、それを実行する方法を定義する必要があります。システムのコンテキストで常にメトリックを監視する必要があり、動作パターンの変更を探す必要があります。
ほとんどの場合、いくつかのツールを使用する必要があります(必要なすべての指標をカバーするツールを見つけることはほぼ不可能であるため)。
メトリックの1つが影響を受けると、他のメトリックにも影響を与える可能性があり、問題のトラブルシューティングがより複雑になることに注意してください。このタスクをできるだけ簡単にするためには、優れた監視およびアラートシステムを用意することが重要です。
1つの重要なこと(これはすべてのデータベースエンジン、さらにはすべてのデータベースエンジンに共通です)システム)は、オペレーティングシステムの動作を監視することです。ここで確認すべき点がいくつかあります。
CPU使用率
通常の動作でない場合、CPU使用率のパーセンテージが高すぎると問題になる可能性があります。この場合、この問題を引き起こしている1つまたは複数のプロセスを特定することが重要です。問題がデータベースプロセスにある場合は、データベース内で何が起こっているかを確認する必要があります。
RAMメモリまたはSWAPの使用量
この指標の値が高く、システムに何も変更がない場合は、データベースの構成を確認する必要があります。 shared_buffersやwork_memなどのパラメーターは、PostgreSQLデータベースに使用できるメモリの量を定義するため、これに直接影響を与える可能性があります。
PostgreSQLログファイルに多数のエラーが記録されたり、キャッシュ構成が正しくなかったりする可能性があるため、ディスクスペースの使用量の異常な増加やディスクアクセスの過剰な消費を監視することが重要です。クエリの処理にメモリを使用する代わりに、重要なディスクアクセスの消費を生成します。
アプリケーションがデータベースに接続できない(または失われたパッケージを接続できない)ため、ネットワークの問題がすべてのシステムに影響を与える可能性があるため、これは実際に監視する重要な指標です。遅延またはパケット損失を監視できます。主な問題は、ネットワークの飽和、ハードウェアの問題、または単にネットワーク構成の不良である可能性があります。
PostgreSQLデータベースの監視
PostgreSQLデータベースを監視することは、問題が発生しているかどうかを確認するだけでなく、データベースのパフォーマンスを向上させるために何かを変更する必要があるかどうかを知ることも重要です。これはおそらく最も重要なことの1つです。データベースで監視するもの。これに重要ないくつかの指標を見てみましょう。
デフォルトでは、PostgreSQLは互換性と安定性を念頭に置いて構成されているため、クエリとそのパターンを理解し、トラフィックに応じてデータベースを構成する必要があります。ここでは、EXPLAINコマンドを使用して、特定のクエリのクエリプランを確認できます。また、各ノードのSELECT、INSERT、UPDATE、またはDELETEの量を監視することもできます。長いクエリまたは多数のクエリを同時に実行している場合、それはすべてのシステムで問題になる可能性があります。
別のクエリを待機しているクエリがある場合は、その別のクエリが通常のプロセスであるか、何か新しいものであるかを確認する必要があります。たとえば、誰かが大きなテーブルを更新している場合、このアクションはデータベースの通常の動作に影響を及ぼし、多数のロックを生成する可能性があります。
レプリケーションを監視するための主要なメトリックは、ラグとレプリケーションの状態です。最も一般的な問題は、ネットワーキングの問題、ハードウェアリソースの問題、または寸法の問題です。レプリケーションの問題に直面している場合は、高可用性環境を確保するために修正する必要があるため、このことをできるだけ早く知る必要があります。
データ損失の回避は基本的なDBAタスクの1つであるため、バックアップを取る必要があるだけでなく、バックアップが完了したかどうか、およびバックアップが使用可能かどうかを知る必要があります。通常、この最後の点は考慮されませんが、バックアッププロセスでおそらく最も重要なチェックです。
FATALやデッドロックなどのエラー、または認証の問題や長時間実行されるクエリなどの一般的なエラーについても、データベースログを監視する必要があります。ほとんどのエラーはログファイルに書き込まれ、それを修正するための詳細な有用な情報が含まれています。
PostgreSQLデータベースのパフォーマンスに対する監視の影響
監視は必須ですが、通常は無料ではありません。監視する量によっては、データベースのパフォーマンスに常にコストがかかるため、使用しないものの監視は避ける必要があります。
一般に、データベースを監視するには、ログから、またはデータベース側からクエリを実行する2つの方法があります。
ログの場合、ログを使用できるようにするには、高いログレベルが必要です。これにより、高いディスクアクセスが生成され、データベースのパフォーマンスに影響を与える可能性があります。
クエリモードの場合、データベースへの各接続はリソースを使用するため、データベースのアクティビティと割り当てられたリソースによっては、パフォーマンスにも影響する可能性があります。
PostgreSQL監視ツール
- Pg_stat_statements :この拡張機能は、データベースのクエリプロファイルを知るのに役立ちます。実行されたすべてのクエリを追跡し、pg_stat_statementsというテーブルに多くの有用な情報を格納します。このテーブルをクエリすることで、システムで実行されているクエリ、実行された回数、消費された時間などの情報を取得できます。
- Pgbadger :PostgreSQLログの分析を実行し、HTMLファイルで表示するソフトウェアです。データベースの動作を理解し、最適化する必要のあるクエリを特定するのに役立ちます。
- Pgstattuple :テーブルとインデックスの統計を生成して、各テーブルとインデックスで使用されているスペース、ライブタプル、削除されたタプル、または各リレーションで使用可能な未使用スペースの量を示すことができます。
- Pg_buffercache :これにより、共有バッファキャッシュで何が起こっているかをリアルタイムで確認し、現在キャッシュに保持されているページ数を確認できます。
- ClusterControl :これは、使いやすいインターフェースからデータベースを展開、管理、監視、および拡張するのに役立つ管理および監視システムです。 ClusterControlは、トップのオープンソースデータベーステクノロジーをサポートしており、新しいノードの追加とスケーリング、バックアップと復元の実行など、定期的に実行する必要のあるデータベースタスクの多くを自動化できます。
- ナギオス :これは、オープンソースシステムおよびネットワーク監視アプリケーションです。ホストまたはサービスを監視し、さまざまな状態のアラートを管理します。このツールを使用すると、ネットワークサービス、ホストリソースなどを監視できます。 PostgreSQLを監視するには、プラグインを使用するか、独自のスクリプトを作成してデータベースをチェックすることができます。
- Zabbix :ネットワークとサーバーの両方を監視できるソフトウェアです。これは、ユーザーが電子メールでアラートを構成できるようにする柔軟な通知メカニズムを使用しています。また、保存されたデータに基づいたレポートとデータの視覚化も提供します。すべてのZabbixレポートと統計、および構成パラメーターには、Webインターフェースを介してアクセスします。
可視性は、問題を迅速に検出するのに役立ちます。グラフを見るよりも、コマンド出力を読み取る方が間違いなく時間のかかる作業です。したがって、ダッシュボードの使用法は、現在の問題の検出と今後15分間の問題の検出の違いになる可能性があり、会社にとって時間が非常に重要である可能性があります。このタスクでは、PMMやVividcortexなどのツールが、データベース監視システムの可視性を高めるための鍵となる可能性があります。
Percona Monitoring and Management(PMM): これは、データベースのパフォーマンスを管理および監視するためのオープンソースプラットフォームです。 MySQL、MariaDB、MongoDB、およびPostgreSQLサーバーの徹底的な時間ベースの分析を提供し、データが可能な限り効率的に機能することを確認します。
VividCortex: これは、データベースのパフォーマンスを詳細に監視するクラウドホスト型プラットフォームです。 MySQL、PostgreSQL、AWS Aurora、MongoDB、Redisなどの主要なオープンソースデータベースを完全に可視化します。
各問題に関する通知を受け取らなければ、システムを監視するだけでは意味がありません。警告システムがない場合は、監視ツールにアクセスしてすべてが正常かどうかを確認する必要があります。何時間も前から大きな問題が発生している可能性があります。このアラートジョブは、電子メールアラート、テキストアラート、またはSlackなどの他のツール統合を使用して実行できます。
PostgreSQLに必要なすべてのメトリックを監視するツールを見つけるのは非常に困難です。通常、複数のツールを使用する必要があり、スクリプトを作成する必要があります。監視とアラートのタスクを一元化する1つの方法は、ClusterControlを使用することです。これは、バックアップ管理、監視とアラート、展開とスケーリング、自動回復、およびデータベースの管理に役立つより重要な機能などの機能を提供します。同じシステム上のこれらすべての機能。
ClusterControlを使用したPostgreSQLデータベースの監視
ClusterControlを使用すると、サーバーをリアルタイムで監視できます。最も一般的なメトリックのいくつかを分析するために、事前定義されたダッシュボードのセットがあります。
クラスターで使用可能なグラフをカスタマイズでき、次のことができます。エージェントベースの監視を有効にして、より詳細なダッシュボードを生成します。
クラスター内のイベントを通知するアラートを作成することもできますが、または、PagerDutyやSlackなどのさまざまなサービスと統合します。
また、クエリモニターセクションを確認できます。上位のクエリ、実行中のクエリ、クエリの外れ値、およびクエリの統計。
これらの機能を使用すると、PostgreSQLデータベースの状態を確認できます。
バックアップ管理の場合、ClusterControlはデータを保護、保護、および回復するために一元化します。検証バックアップ機能を使用すると、バックアップが適切かどうかを確認できます。
この検証バックアップジョブは、別のスタンドアロンホストにバックアップを復元するため、バックアップが機能していることを確認できます。
ClusterControlコマンドラインを使用した監視
タスクのスクリプト作成と自動化、またはコマンドラインだけを使用する場合でも、ClusterControlにはs9sツールがあります。これは、データベースクラスターを管理するためのコマンドラインツールです。
ノードリスト
ClusterControl UIからすべてのタスク(およびそれ以上)を実行できます、そしてこの機能をSlackなどの外部ツールと統合して、そこから管理することができます。
このブログでは、PostgreSQL環境で監視するためのいくつかの重要なメトリックと、システムを制御することで作業を楽にするためのいくつかのツールについて説明しました。このタスクにClusterControlを使用する方法も確認できます。
ご覧のとおり、監視は絶対に必要であり、監視を行うための最善の方法は、インフラストラクチャとシステム自体によって異なります。監視する必要があるものと、それがデータベースのパフォーマンスにどのように影響するかの間でバランスを取る必要があります。