
概要
Postgres インテグレーションは、Postgres データベースの健全性とパフォーマンスに関するメトリクスをほぼリアルタイムで提供します。提供されるダッシュボードでこれらのメトリクスを可視化するとともに、モニターを作成して PostgreSQL の状態についてチームに警告を発することができます。
データベースモニタリング (DBM) を有効にすると、クエリのパフォーマンスとデータベースの健全性について詳細なインサイトを取得できます。標準のインテグレーションに加え、Datadog DBM では、クエリレベルのメトリクス、リアルタイムおよび過去のクエリスナップショット、待機イベントの分析情報、データベースの負荷、クエリ実行計画、ブロッキングを引き起こしているクエリについてのインサイトが提供されます。
Postgres バージョン 9.6〜16 がサポートされています。
セットアップ
このページでは、標準的な Postgres Agent のインテグレーションについて説明します。Postgres のデータベースモニタリング製品をお求めの場合は、
Datadog データベースモニタリングをご覧ください。
インストール
PostgreSQL チェックは Agent にパッケージ化されています。PostgreSQL メトリクスとログの収集を開始するには、Agent をインストールします。
構成
注: PostgreSQL 用のデータベースモニタリングをインストールするには、データベースモニタリングドキュメントでご利用のホスティングソリューションを選択して、手順を確認してください。
標準のインテグレーションを単体でインストールする場合のみ、このガイドの下記の手順に進んでください。
Postgres の準備
標準の PostgreSQL インテグレーションを開始するには、PostgreSQL サーバーへの適切なアクセス権を持つ読み取り専用 datadog
ユーザーを作成します。PostgreSQL データベースで psql
を起動します。
PostgreSQL バージョン 10 以上の場合、次を実行します。
create user datadog with password '<PASSWORD>';
grant pg_monitor to datadog;
grant SELECT ON pg_stat_database to datadog;
それより前の PostgreSQL バージョンの場合、次を実行します。
create user datadog with password '<パスワード>';
grant SELECT ON pg_stat_database to datadog;
アクセス許可が正しいことを確認するには、次のコマンドを実行します。
psql -h localhost -U datadog postgres -c \
"select * from pg_stat_database LIMIT(1);" \
&& echo -e "\e[0;32mPostgres connection - OK\e[0m" \
|| echo -e "\e[0;31mCannot connect to Postgres\e[0m"
パスワードの入力を要求された場合は、最初のコマンドで使用したパスワードを入力します。
注: PostgreSQL バージョン 9.6 以前で pg_stat_activity
から読み取るには、次のコマンドを実行して SECURITY DEFINER
を作成します。
CREATE FUNCTION pg_stat_activity() RETURNS SETOF pg_catalog.pg_stat_activity AS
$$ SELECT * from pg_catalog.pg_stat_activity; $$
LANGUAGE sql VOLATILE SECURITY DEFINER;
CREATE VIEW pg_stat_activity_dd AS SELECT * FROM pg_stat_activity();
grant SELECT ON pg_stat_activity_dd to datadog;
注: その他の表へのクエリを必要とするカスタムメトリクスを生成する際は、datadog
ユーザーにそれらの表への SELECT
権限を付与する必要があります。例: grant SELECT on <TABLE_NAME> to datadog;
。詳しくは、よくあるご質問セクションをご確認ください。
ホスト
ホストで実行中の Agent に対してこのチェックを構成するには
メトリクスの収集
postgres.d/conf.yaml
ファイルを編集して、host
/ port
を指定し、監視するマスターを設定します。使用可能なすべてのコンフィギュレーションオプションについては、サンプル postgres.d/conf.yaml を参照してください。
init_config:
instances:
## @param host - string - required
## The hostname to connect to.
## NOTE: Even if the server name is "localhost", the agent connects to
## PostgreSQL using TCP/IP, unless you also provide a value for the sock key.
#
- host: localhost
## @param port - integer - optional - default: 5432
## The port to use when connecting to PostgreSQL.
#
# port: 5432
## @param username - string - required
## The Datadog username created to connect to PostgreSQL.
#
username: datadog
## @param password - string - optional
## The password associated with the Datadog user.
#
# password: <PASSWORD>
## @param dbname - string - optional - default: postgres
## The name of the PostgresSQL database to monitor.
## Note: If omitted, the default system Postgres database is queried.
#
# dbname: <DBNAME>
# @param disable_generic_tags - boolean - optional - default: false
# The integration will stop sending server tag as is redundant with host tag
disable_generic_tags: true
リレーションメトリクスを収集するには、Agent をすべての論理データベースに接続します。これらのデータベースは自動的に発見することも、構成で明示的に列挙することもできます。
- 特定のインスタンスで論理データベースを自動的に発見するには、そのインスタンスでオートディスカバリーを有効にします。
instances:
- host: localhost
# port: 5432
database_autodiscovery:
enabled: true
# Optionally, set the include field to specify
# a set of databases you are interested in discovering
include:
- mydb.*
- example.*
relations:
- relation_regex: .*
- または、構成に各論理データベースをインスタンスとして列挙することもできます。
instances:
- host: example-service-primary.example-host.com
# port: 5432
username: datadog
password: '<PASSWORD>'
relations:
- relation_name: products
- relation_name: external_seller_products
- host: example-service-replica-1.example-host.com
# port: 5432
username: datadog
password: '<PASSWORD>'
relations:
- relation_regex: inventory_.*
relkind:
- r
- i
- host: example-service-replica-2.example-host.com
# port: 5432
username: datadog
password: '<PASSWORD>'
relations:
- relation_regex: .*
Agent を再起動します。
トレースの収集
Datadog APM は Postgres を統合して、分散システム全体のトレースを確認します。Datadog Agent v6 以降では、トレースの収集はデフォルトで有効化されています。トレースの収集を開始するには、以下の手順に従います。
- Datadog でトレースの収集を有効にします。
- Postgres へのリクエストを作成するアプリケーションをインスツルメントします。
ログ収集
Agent バージョン 6.0 以降で利用可能
PostgreSQL のデフォルトのログは stderr
に記録され、ログに詳細な情報は含まれません。ログ行のプレフィックスに指定された詳細を追加してファイルに記録することをお勧めします。詳細は PostgreSQL のドキュメントエラーレポートとログを参照してください。
ロギングはファイル /etc/postgresql/<バージョン>/main/postgresql.conf
内で構成されます。ステートメント出力を含む通常のログ結果の場合、ログセクションの次のパラメーターのコメントを外します。
logging_collector = on
log_directory = 'pg_log' # directory where log files are written,
# can be absolute or relative to PGDATA
log_filename = 'pg.log' # log file name, can include pattern
log_statement = 'all' # log all queries
#log_duration = on
log_line_prefix= '%m [%p] %d %a %u %h %c '
log_file_mode = 0644
## For Windows
#log_destination = 'eventlog'
詳細な期間メトリクスを収集し、Datadog インターフェイスで検索可能にするには、ステートメント自体を使用してインラインで構成する必要があります。上記の例と推奨構成との違いについては、以下を参照してください。注: log_statementと
log_duration` オプションは両方ともコメントアウトされています。このトピックについては、statement/duration のログを同一行に記録するを参照してください。
この構成では、すべてのステートメントをログに記録します。期間に応じて出力を減らすには、log_min_duration_statement
の値を希望の最小期間 (ミリ秒単位) に設定します。
log_min_duration_statement = 0 # -1 is disabled, 0 logs all statements
# and their durations, > 0 logs only
# statements running at least this number
# of milliseconds
#log_statement = 'all'
#log_duration = on
Datadog Agent で、ログの収集はデフォルトで無効になっています。以下のように、datadog.yaml
ファイルでこれを有効にします。
PostgreSQL のログの収集を開始するには、次の構成ブロックを postgres.d/conf.yaml
ファイルに追加し、編集します。
logs:
- type: file
path: "<LOG_FILE_PATH>"
source: postgresql
service: "<SERVICE_NAME>"
#To handle multi line that starts with yyyy-mm-dd use the following pattern
#log_processing_rules:
# - type: multi_line
# pattern: \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
# name: new_log_start_with_date
service
パラメーターと path
パラメーターの値を変更し、環境に合わせて構成してください。使用可能なすべての構成オプションについては、postgres.d/conf.yaml のサンプルを参照してください。
Agent を再起動します。
Docker
コンテナで実行中の Agent に対してこのチェックを構成するには:
メトリクスの収集
アプリケーションのコンテナで、オートディスカバリーのインテグレーションテンプレートを Docker ラベルとして設定します。
LABEL "com.datadoghq.ad.check_names"='["postgres"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"host":"%%host%%", "port":5432,"username":"datadog","password":"<PASSWORD>"}]'
ログ収集
Datadog Agent で、ログの収集はデフォルトで無効になっています。有効にする方法については、Docker ログ収集を参照してください。
次に、ログインテグレーションを Docker ラベルとして設定します。
LABEL "com.datadoghq.ad.logs"='[{"source":"postgresql","service":"postgresql"}]'
トレースの収集
コンテナ化されたアプリケーションの APM は、Agent v6 以降でサポートされていますが、トレースの収集を開始するには、追加のコンフィギュレーションが必要です。
Agent コンテナで必要な環境変数
パラメーター | 値 |
---|
<DD_API_KEY> | api_key |
<DD_APM_ENABLED> | true |
<DD_APM_NON_LOCAL_TRAFFIC> | true |
利用可能な環境変数およびコンフィギュレーションの全リストについては、Docker アプリケーションのトレース を参照してください。
次に、Postgres にリクエストを送信するアプリケーションのコンテナをインスツルメントし、Agent のコンテナ名に DD_AGENT_HOST
を設定します。
Kubernetes
このチェックを、Kubernetes で実行している Agent に構成します。
メトリクスの収集
アプリケーションのコンテナで、オートディスカバリーのインテグレーションテンプレートをポッドアノテーションとして設定します。他にも、ファイル、ConfigMap、または key-value ストアを使用してテンプレートを構成できます。
Annotations v1 (Datadog Agent < v7.36 向け)
apiVersion: v1
kind: Pod
metadata:
name: postgres
annotations:
ad.datadoghq.com/postgresql.check_names: '["postgres"]'
ad.datadoghq.com/postgresql.init_configs: '[{}]'
ad.datadoghq.com/postgresql.instances: |
[
{
"host": "%%host%%",
"port":"5432",
"username":"datadog",
"password":"<PASSWORD>"
}
]
spec:
containers:
- name: postgres
Annotations v2 (Datadog Agent v7.36+ 向け)
apiVersion: v1
kind: Pod
metadata:
name: postgres
annotations:
ad.datadoghq.com/postgres.checks: |
{
"postgres": {
"init_config": {},
"instances": [
{
"host": "%%host%%",
"port":"5432",
"username":"datadog",
"password":"<PASSWORD>"
}
]
}
}
spec:
containers:
- name: postgres
ログ収集
Datadog Agent で、ログの収集はデフォルトで無効になっています。有効にする方法については、Kubernetes ログ収集を参照してください。
次に、ログのインテグレーションをポッドアノテーションとして設定します。これは、ファイル、ConfigMap、または key-value ストアを使用して構成することも可能です。
Annotations v1/v2
apiVersion: v1
kind: Pod
metadata:
name: postgres
annotations:
ad.datadoghq.com/postgres.logs: '[{"source":"postgresql","service":"<SERVICE_NAME>"}]'
spec:
containers:
- name: postgres
トレースの収集
コンテナ化されたアプリケーションの APM は、Agent v6 以降を実行するホストでサポートされていますが、トレースの収集を開始するには、追加のコンフィギュレーションが必要です。
Agent コンテナで必要な環境変数
パラメーター | 値 |
---|
<DD_API_KEY> | api_key |
<DD_APM_ENABLED> | true |
<DD_APM_NON_LOCAL_TRAFFIC> | true |
利用可能な環境変数とコンフィギュレーションの完全なリストについては、Kubernetes アプリケーションのトレースおよび Kubernetes DaemonSet のセットアップを参照してください。
そして、Postgres へのリクエストを作成するアプリケーションコンテナをインスツルメントします。
ECS
このチェックを、ECS で実行している Agent に構成するには:
メトリクスの収集
アプリケーションのコンテナで、オートディスカバリーのインテグレーションテンプレートを Docker ラベルとして設定します。
{
"containerDefinitions": [{
"name": "postgres",
"image": "postgres:latest",
"dockerLabels": {
"com.datadoghq.ad.check_names": "[\"postgres\"]",
"com.datadoghq.ad.init_configs": "[{}]",
"com.datadoghq.ad.instances": "[{\"host\":\"%%host%%\", \"port\":5432,\"username\":\"datadog\",\"password\":\"<PASSWORD>\"}]"
}
}]
}
ログ収集
Datadog Agent で、ログの収集はデフォルトで無効になっています。有効にする方法については、ECS ログ収集を参照してください。
次に、ログインテグレーションを Docker ラベルとして設定します。
{
"containerDefinitions": [{
"name": "postgres",
"image": "postgres:latest",
"dockerLabels": {
"com.datadoghq.ad.logs": "[{\"source\":\"postgresql\",\"service\":\"postgresql\"}]"
}
}]
}
トレースの収集
コンテナ化されたアプリケーションの APM は、Agent v6 以降でサポートされていますが、トレースの収集を開始するには、追加のコンフィギュレーションが必要です。
Agent コンテナで必要な環境変数
パラメーター | 値 |
---|
<DD_API_KEY> | api_key |
<DD_APM_ENABLED> | true |
<DD_APM_NON_LOCAL_TRAFFIC> | true |
利用可能な環境変数およびコンフィギュレーションの全リストについては、Docker アプリケーションのトレース を参照してください。
次に、Postgres にリクエストを送信するアプリケーションのコンテナをインスツルメントし、EC2 プライベート IP アドレスに DD_AGENT_HOST
を設定します。
検証
Agent の status サブコマンドを実行し、Checks セクションで postgres
を探します。
収集データ
以下に記載されているメトリクスのいくつかには、追加の構成が必要です。すべての構成オプションについては、サンプル postgres.d/conf.yaml を参照してください。
メトリクス
Agent のバージョン 7.32.0
以降では、Database Monitoring を有効にすると、postgresql.connections
メトリクスに state
、app
、db
および user
がタグ付けされます。
イベント
PostgreSQL チェックには、イベントは含まれません。
サービスチェック
postgres.can_connect
Agent が監視対象の PostgreSQL インスタンスに接続できない場合は、CRITICAL
を返します。それ以外の場合は、OK
を返します。
Statuses: ok, クリティカル
トラブルシューティング
ご不明な点は、Datadog のサポートチームまでお問い合わせください。
その他の参考資料
お役に立つドキュメント、リンクや記事:
よくあるご質問
ブログ記事