メインコンテンツへスキップ
メインコンテンツへスキップ

ClickStack を使用した PostgreSQL ログの監視

概要

このガイドでは、OpenTelemetry Collector を設定して PostgreSQL サーバーログを取り込むことで、ClickStack を使って PostgreSQL を監視する方法を説明します。次の内容を学びます。

  • 構造化して解析できるように、PostgreSQL がログを CSV 形式で出力するように設定する
  • ログのインジェスト用のカスタム OTel collector 設定を作成する
  • カスタム設定を使用して ClickStack をデプロイする
  • あらかじめ用意されたダッシュボードを使用して、PostgreSQL ログから得られるインサイト(エラー、スロークエリ、接続状況)を可視化する

本番環境の PostgreSQL を設定する前に連携をテストしたい場合は、サンプルログを含むデモ用データセットを利用できます。

所要時間: 10〜15 分

既存の PostgreSQL との統合

このセクションでは、ClickStack の OTel collector の設定を変更して、既存の PostgreSQL 環境から ClickStack にログを送信する方法について説明します。

既存環境を設定する前に PostgreSQL ログ連携を試したい場合は、"Demo dataset" セクションにあるあらかじめ設定済みのセットアップとサンプルデータを使ってテストできます。

前提条件
  • ClickStack インスタンスが稼働していること
  • 既存の PostgreSQL 環境(バージョン 9.6 以降)
  • PostgreSQL 設定ファイルを変更できるアクセス権限
  • ログファイル用の十分なディスク容量

PostgreSQLのログ設定を構成する

PostgreSQLは複数のログ形式をサポートしています。OpenTelemetryで構造化解析を行う場合は、一貫性があり解析可能な出力を提供するCSV形式を推奨します。

postgresql.conf ファイルは通常、以下の場所に配置されています:

  • Linux (apt/yum): /etc/postgresql/{version}/main/postgresql.conf
  • macOS(Homebrew): /usr/local/var/postgres/postgresql.conf または /opt/homebrew/var/postgres/postgresql.conf
  • Docker: 設定は通常、環境変数またはマウントした設定ファイルで指定します

postgresql.confでこれらの設定を追加または変更してください:

# CSV ログ記録に必須
logging_collector = on
log_destination = 'csvlog'

# 推奨: 接続ログ記録
log_connections = on
log_disconnections = on

# オプション: 監視ニーズに応じて調整
#log_min_duration_statement = 1000  # 1秒以上かかるクエリをログ記録
#log_statement = 'ddl'               # DDL文(CREATE、ALTER、DROP)をログ記録
#log_checkpoints = on                # チェックポイントアクティビティをログ記録
#log_lock_waits = on                 # ロック競合をログ記録
注記

本ガイドでは、信頼性の高い構造化解析を実現するため、PostgreSQLのcsvlog形式を使用しています。stderrまたはjsonlog形式を使用している場合は、OpenTelemetryコレクターの設定を適宜調整してください。

これらの変更を行った後、PostgreSQLを再起動します:

# systemd の場合
sudo systemctl restart postgresql

# Docker の場合
docker restart

ログが書き込まれていることを確認する:

# Linuxでのデフォルトログ保存場所
tail -f /var/lib/postgresql/{version}/main/log/postgresql-*.log

# macOS Homebrew
tail -f /usr/local/var/postgres/log/postgresql-*.log

カスタムOTel collector設定を作成する

ClickStackでは、カスタム設定ファイルをマウントして環境変数を設定することで、ベースのOpenTelemetry Collector設定を拡張できます。カスタム設定は、HyperDXがOpAMP経由で管理するベース設定にマージされます。

以下の設定で postgres-logs-monitoring.yaml という名前のファイルを作成します:

receivers:
  filelog/postgres:
    include:
      - /var/lib/postgresql/*/main/log/postgresql-*.csv # PostgreSQLのインストール環境に合わせて調整してください
    start_at: end
    multiline:
      line_start_pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
    operators:
      - type: csv_parser
        parse_from: body
        parse_to: attributes
        header: 'log_time,user_name,database_name,process_id,connection_from,session_id,session_line_num,command_tag,session_start_time,virtual_transaction_id,transaction_id,error_severity,sql_state_code,message,detail,hint,internal_query,internal_query_pos,context,query,query_pos,location,application_name,backend_type,leader_pid,query_id'
        lazy_quotes: true
        
      - type: time_parser
        parse_from: attributes.log_time
        layout: '%Y-%m-%d %H:%M:%S.%L %Z'
      
      - type: add
        field: attributes.source
        value: "postgresql"
      
      - type: add
        field: resource["service.name"]
        value: "postgresql-production"

service:
  pipelines:
    logs/postgres:
      receivers: [filelog/postgres]
      processors:
        - memory_limiter
        - transform
        - batch
      exporters:
        - clickhouse

この設定では:

  • 標準的な場所から PostgreSQL の CSV ログを読み取ります
  • 複数行にまたがるログエントリを適切に処理します(エラーは複数行にわたることがよくあります)
  • 標準的な PostgreSQL のすべてのログフィールドを含む CSV 形式を解析します
  • 元のログ時刻を保持するためにタイムスタンプを抽出します
  • HyperDX でのフィルタリングに使用する source: postgresql 属性を追加します
  • 専用パイプラインを介してログを ClickHouse エクスポーターに転送する
注記
  • カスタム設定では、新しい receiver と pipeline のみを定義します
  • memory_limitertransformbatch の各 processor と clickhouse exporter は、ClickStack のベース設定内で既に定義されているため、名前で参照するだけで利用できます
  • csv_parser オペレーターは、標準的な PostgreSQL の CSV ログフィールドをすべて構造化属性として抽出します
  • この設定では、コレクター再起動時にログを再度取り込むのを防ぐために start_at: end を使用します。テストする際は、履歴ログをすぐに確認できるように start_at: beginning に変更してください。
  • include パスを、PostgreSQL のログディレクトリの場所に合わせて調整してください

ClickStackにカスタム設定を読み込むよう構成する

既存のClickStackデプロイメントでカスタムコレクター設定を有効にするには、次の手順を実行してください:

  1. カスタム設定ファイルを /etc/otelcol-contrib/custom.config.yaml にマウントします
  2. 環境変数 CUSTOM_OTELCOL_CONFIG_FILE/etc/otelcol-contrib/custom.config.yaml を設定します
  3. PostgreSQL のログディレクトリをマウントして、コレクターがログを読み取れるようにします
オプション1: Docker Compose

ClickStackのデプロイメント設定を更新します:

services:
  clickstack:
    # ... 既存の設定 ...
    environment:
      - CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml
      # ... その他の環境変数 ...
    volumes:
      - ./postgres-logs-monitoring.yaml:/etc/otelcol-contrib/custom.config.yaml:ro
      - /var/lib/postgresql:/var/lib/postgresql:ro
      # ... その他のボリューム ...
オプション2:Docker Run(オールインワンイメージ)

docker runでオールインワンイメージを使用している場合:

docker run --name clickstack \
  -p 8080:8080 -p 4317:4317 -p 4318:4318 \
  -e CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml \
  -v "$(pwd)/postgres-logs-monitoring.yaml:/etc/otelcol-contrib/custom.config.yaml:ro" \
  -v /var/lib/postgresql:/var/lib/postgresql:ro \
  clickhouse/clickstack-all-in-one:latest
注記

ClickStackコレクターがPostgreSQLログファイルを読み取るための適切な権限を持っていることを確認してください。本番環境では、読み取り専用マウント(:ro)を使用し、最小権限の原則に従ってください。

HyperDXでのログの確認

設定完了後、HyperDXにログインし、ログが正常に送信されていることを確認してください:

  1. 検索ビューに移動します
  2. ソースを Logs に設定します
  3. source:postgresql でフィルタして、PostgreSQL 固有のログだけを表示します
  4. user_namedatabase_nameerror_severitymessagequery などのフィールドを含む構造化されたログエントリが表示されるはずです。
ログ検索ビュー
ログビュー

デモ用データセット

本番環境を設定する前に PostgreSQL ログ連携を試したいユーザー向けに、実運用に近いパターンを含む事前生成済み PostgreSQL ログのサンプルデータセットを提供しています。

サンプルデータセットをダウンロードする

サンプルのログファイルをダウンロードします:

curl -O https://datasets-documentation.s3.eu-west-3.amazonaws.com/clickstack-integrations/postgres/postgresql.log

テスト用 collector 設定を作成する

次の設定内容で postgres-logs-demo.yaml という名前のファイルを作成します:

cat > postgres-logs-demo.yaml << 'EOF'
receivers:
  filelog/postgres:
    include:
      - /tmp/postgres-demo/postgresql.log
    start_at: beginning  # デモデータのため先頭から読み込む
    multiline:
      line_start_pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
    operators:
      - type: csv_parser
        parse_from: body
        parse_to: attributes
        header: 'log_time,user_name,database_name,process_id,connection_from,session_id,session_line_num,command_tag,session_start_time,virtual_transaction_id,transaction_id,error_severity,sql_state_code,message,detail,hint,internal_query,internal_query_pos,context,query,query_pos,location,application_name,backend_type,leader_pid,query_id'
        lazy_quotes: true
        
      - type: time_parser
        parse_from: attributes.log_time
        layout: '%Y-%m-%d %H:%M:%S.%L %Z'
      
      - type: add
        field: attributes.source
        value: "postgresql-demo"
      
      - type: add
        field: resource["service.name"]
        value: "postgresql-demo"

service:
  pipelines:
    logs/postgres-demo:
      receivers: [filelog/postgres]
      processors:
        - memory_limiter
        - transform
        - batch
      exporters:
        - clickhouse
EOF

デモ設定で ClickStack を実行する

デモ用ログと設定を使って ClickStack を実行します:

docker run --name clickstack-demo \
  -p 8080:8080 -p 4317:4317 -p 4318:4318 \
  -e CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml \
  -v "$(pwd)/postgres-logs-demo.yaml:/etc/otelcol-contrib/custom.config.yaml:ro" \
  -v "$(pwd)/postgresql.log:/tmp/postgres-demo/postgresql.log:ro" \
  clickhouse/clickstack-all-in-one:latest

HyperDX でログを確認する

ClickStack が起動したら、次の操作を行います:

  1. HyperDX を開き、アカウントにログインします(まだアカウントがない場合は、先にアカウントを作成する必要があります)
  2. Search ビューに移動し、source を Logs に設定します
  3. 時間範囲を 2025-11-09 00:00:00 - 2025-11-12 00:00:00 に設定します
タイムゾーン表示

HyperDX はタイムスタンプをブラウザーのローカルタイムゾーンで表示します。デモデータは 2025-11-10 00:00:00 - 2025-11-11 00:00:00 (UTC) の範囲をカバーしています。広めの時間範囲を指定することで、どの地域からアクセスしていてもデモログを確認できます。ログが表示されたら、可視化を見やすくするために時間範囲を 24 時間に絞り込むことを推奨します。

ログ検索ビュー
ログビュー

ダッシュボードと可視化

ClickStack を使って PostgreSQL の監視を始めやすくするために、PostgreSQL ログ向けの基本的な可視化用ダッシュボードを提供しています。

事前構築済みダッシュボードをインポートする

  1. HyperDX を開き、Dashboards セクションに移動します
  2. 画面右上の三点リーダー(省略記号)メニューから Import Dashboard をクリックします
ダッシュボードのインポートボタン
  1. postgresql-logs-dashboard.json ファイルをアップロードし、Finish Import をクリックします
インポートの完了

ダッシュボードを表示する

ダッシュボードは、すべての可視化が事前設定された状態で作成されます。

ログダッシュボード
注記

デモデータセットでは、時間範囲を 2025-11-10 00:00:00 - 2025-11-11 00:00:00 (UTC) に設定してください(ローカルタイムゾーンに合わせて調整してください)。インポートしたダッシュボードには、デフォルトでは時間範囲が指定されていません。

トラブルシューティング

カスタム設定が読み込まれない

環境変数が設定されていることを確認してください:

docker exec <コンテナ名> printenv CUSTOM_OTELCOL_CONFIG_FILE

カスタム設定ファイルがマウントされ、読み取り可能であることを確認してください:

docker exec <container-name> cat /etc/otelcol-contrib/custom.config.yaml | head -10

HyperDX にログが表示されない

実際に適用されている設定に filelog レシーバーが含まれているか確認します:

docker exec <container> cat /etc/otel/supervisor-data/effective.yaml | grep -A 10 filelog

コレクターのログにエラーが出ていないか確認します:

docker exec <container> cat /etc/otel/supervisor-data/agent.log | grep -i postgres

デモ用データセットを使用している場合は、ログファイルにアクセスできることを確認してください:

docker exec <container> cat /tmp/postgres-demo/postgresql.log | wc -l

次のステップ

PostgreSQL ログ監視の設定が完了したら、次の作業を行ってください:

  • 重要なイベント(接続失敗、遅いクエリ、エラーの急増)に対するアラートを設定する
  • 包括的なデータベース監視のために、ログをPostgreSQL メトリクスと相関付ける
  • アプリケーション固有のクエリパターン向けにカスタムダッシュボードを作成する
  • パフォーマンス要件に応じた遅いクエリを特定するために log_min_duration_statement を設定する

本番環境への移行

このガイドでは、迅速なセットアップのために、ClickStack に組み込まれている OpenTelemetry Collector を利用した構成について説明します。本番環境へのデプロイでは、独自の OTel Collector を実行し、ClickStack の OTLP エンドポイントにデータを送信することを推奨します。本番環境向けの設定については、OpenTelemetry データの送信 を参照してください。