46
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PostgreSQL+Docker: クエリーログを出力する

Posted at

Docker公式のpostgresコンテナでクエリーログなどを出力する方法を紹介する。

docker runコマンドの場合

docker runコマンドでpostgresコンテナを実行するとき、下記のようにロギングのオプションを指定することで、標準エラー出力にクエリーログなどが出力される。

docker run -it postgres:11.3 postgres \
  -c log_destination=stderr \
  -c log_statement=all \
  -c log_connections=on \
  -c log_disconnections=on

docker-composeの場合

docker-composeの場合は、docker-compose.ymlcommandフィールドのpostgresコマンドに下記のようなオプションを指定すると、標準エラー出力にクエリーログなどが出力される。

docker-compose.yml
version: '3.7'
services:
  db:
    image: postgres:11.3
    # Make postgres logs. More information about logging, see official documentation: https://www.postgresql.org/docs/11/runtime-config-logging.html
    command: postgres -c log_destination=stderr -c log_statement=all -c log_connections=on -c log_disconnections=on
    logging:
      options:
        max-size: "10k"
        max-file: "5"

ログの表示方法は:

docker-compose logs -f db

ちなみに、loggingについてはdockerのログをローテートする - Qiitaを参照。

各コマンドオプションの補足

コマンドオプションの詳しい説明はPostgreSQLの公式ドキュメントを参照してほしい。

log_destination=stderr

  • ログの出力先
  • stderr, syslog, csvlogから選べるが、今回はDockerの標準エラー出力に出すためにstderrを選択した。

log_statement=all

  • どのSQLをログに出すかの設定。
  • none, all, mod, ddlから選択する。
  • デフォルトではnoneで何もクエリーログを出さない設定になっている。
  • allにすると次のようなログが表示されるようになる:
postgresql | 2019-06-17 07:05:01.681 UTC [32] LOG:  statement: START TRANSACTION
postgresql | 2019-06-17 07:05:01.684 UTC [32] LOG:  statement: SELECT 1 /* original connection */
postgresql | 2019-06-17 07:05:01.686 UTC [32] LOG:  statement: COMMIT

log_connections=on

  • コネクション接続時にログを出すかの設定。
  • デフォルトではoffに設定されていて、何もログに出ない。
  • onにすると次のようなログが出力される:
postgresql | 2019-06-17 07:05:01.662 UTC [32] LOG:  connection received: host=172.19.0.3 port=37440
postgresql | 2019-06-17 07:05:01.664 UTC [32] LOG:  connection authorized: user=root database=test

log_disconnections=on

  • コネクション切断時にログを出すかの設定。
  • デフォルトではoffに設定されていて、何もログに出ない。
  • onにすると次のようなログが出力される:
postgresql | 2019-06-17 07:05:11.683 UTC [31] LOG:  disconnection: session time: 0:00:10.046 user=root database=test host=172.19.0.3 port=37438
postgresql | 2019-06-17 07:05:11.687 UTC [32] LOG:  disconnection: session time: 0:00:10.025 user=root database=test host=172.19.0.3 port=37440
46
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?