ablog

不器用で落着きのない技術者のメモ

Aurora PostgreSQL互換でクエリログを取得する

Aurora PostgreSQL 9.6 互換でクエリログを取得してみた。

設定

  • DB Parameter Group をパラメータグループファミリー"aurora-postgresql9.6" で作成する
  • DBインスタンスの DB Parameter Group を作成したものに変えて再起動する。

クエリログを確認する

  • クエリを実行する
> select * from (select *  from pg_tables a, pg_tables b, pg_tables c) d;
  • AWSマネジメントコンソールで[ログ]の error/postgresql.log.*.csv をクリックする
2018-10-24 17:15:00.599 UTC,"awsuser","mydb",26380,"**.*.*.145:54214",5bd0a876.670c,5,"idle",2018-10-24 17:14:30 UTC,6/26561,0,LOG,00000,"statement: select count(*) from (select * from pg_tables a, pg_tables b) d;",,,,,,,,"exec_simple_query, postgres.c:942","psql"
2018-10-24 17:15:00.600 UTC,"awsuser","mydb",26380,"**.*.*.145:54214",5bd0a876.670c,6,"SELECT",2018-10-24 17:14:30 UTC,6/0,0,LOG,00000,"duration: 1.014 ms",,,,,,,,"exec_simple_query, postgres.c:1171","psql"

18.8.4. CSV書式のログ出力の利用
log_destinationリストにcsvlogを含めることは、ログファイルをデータベーステーブルにインポートする簡便な方法を提供します。このオプションはカンマ区切り値書式(CSV)で以下の列を含むログ行を生成します。 ミリ秒単位のtimestamp、 ユーザ名、 データベース名、 プロセス識別子、 クライアントホスト:ポート番号、 セッション識別子、 セッション前行番号、 コマンドタグ、 セッション開始時間、 仮想トランザクション識別子、 通常トランザクション識別子、 エラーの深刻度、 SQL状態コード、 エラーメッセージ、 詳細エラーメッセージ、 ヒント、 エラーとなった内部的な問い合わせ(もしあれば)、 内部問い合わせにおけるエラー位置の文字数、 エラーの文脈、 PostgreSQLソースコード上のエラー発生場所(log_error_verbosityがverboseに設定されているならば) アプリケーション名。 以下にcsvlog出力を格納するためのテーブル定義のサンプルを示します。

CREATE TABLE postgres_log
(
  log_time timestamp(3) with time zone,
  user_name text,
  database_name text,
  process_id integer,
  connection_from text,
  session_id text,
  session_line_num bigint,
  command_tag text,
  session_start_time timestamp with time zone,
  virtual_transaction_id text,
  transaction_id bigint,
  error_severity text,
  sql_state_code text,
  message text,
  detail text,
  hint text,
  internal_query text,
  internal_query_pos integer,
  context text,
  query text,
  query_pos integer,
  location text,
  application_name text,
  PRIMARY KEY (session_id, session_line_num)
);
https://www.postgresql.jp/document/9.4/html/runtime-config-logging.html