使用 log_fdw 擴展來訪問數據庫日誌 SQL - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 log_fdw 擴展來訪問數據庫日誌 SQL

RDS適用於 Postgre 資料SQL庫執行個SQL體的 Aurora Postgre 資料SQL庫支援log_fdw延伸功能,您可以使用該擴充功能使用介面存取資料庫引擎記錄。log_fdw 擴充功能推出兩個新函數,可讓您輕鬆為資料庫日誌建立外部資料表:

  • list_postgres_log_files – 列出資料庫日誌目錄中的檔案和檔案大小 (以位元組為單位)。

  • create_foreign_table_for_log_file(table_name text, server_name text, log_file_name text) – 在目前資料庫中為指定的檔案建立外部資料表。

log_fdw 建立的所有函數皆為 rds_superuser 所擁有。rds_superuser 角色的成員可以將這些函數的存取權授予其他資料庫使用者。

根據預設,日誌檔是由 產生 stderr (標準錯誤) 格式,如log_destination參數中所指定。此參數只有兩個選項,stderrcsvlog (逗號分隔值,CSV)。如果將該csvlog選項添加到參數中, Amazon RDS 會生成stderrcsvlog日誌。這可能會影響資料庫叢集的儲存容量,因此您需要了解影響日誌處理的其他參數。如需詳細資訊,請參閱設定日誌目標 (stderr、csvlog)

產生 csvlog 日誌的一個好處為 log_fdw 延伸允許您建置外部資料表,並將資料整齊分割成數個資料欄。為此,您的執行個體需要與自訂資料庫參數群組關聯,則您可變更 log_destination 的設定。如需如何執行作業的資訊,請參閱 在 RDS for PostgreSQL 資料庫執行個體上搭配使用參數

下列範例假設 log_destination 參數包括 cvslog

使用 log_fdw 擴充功能
  1. 安裝 log_fdw 擴充功能。

    postgres=> CREATE EXTENSION log_fdw; CREATE EXTENSION
  2. 建立日誌伺服器做為外部資料包裝函數。

    postgres=> CREATE SERVER log_server FOREIGN DATA WRAPPER log_fdw; CREATE SERVER
  3. 叢日誌檔案清單全選。

    postgres=> SELECT * FROM list_postgres_log_files() ORDER BY 1;

    範例回應如下所示。

    file_name | file_size_bytes ------------------------------+----------------- postgresql.log.2023-08-09-22.csv | 1111 postgresql.log.2023-08-09-23.csv | 1172 postgresql.log.2023-08-10-00.csv | 1744 postgresql.log.2023-08-10-01.csv | 1102 (4 rows)
  4. 針對選取的檔案,建立只有單一 'log_entry' 資料欄的資料表。

    postgres=> SELECT create_foreign_table_for_log_file('my_postgres_error_log', 'log_server', 'postgresql.log.2023-08-09-22.csv');

    除了目前存在的資料表之外,回應不提供任何其他詳細資訊。

    ----------------------------------- (1 row)
  5. 選取日誌檔案的範例。以下程式碼會擷取日誌時間和錯誤訊息描述。

    postgres=> SELECT log_time, message FROM my_postgres_error_log ORDER BY 1;

    範例回應如下所示。

    log_time | message ----------------------------------+--------------------------------------------------------------------------- Tue Aug 09 15:45:18.172 2023 PDT | ending log output to stderr Tue Aug 09 15:45:18.175 2023 PDT | database system was interrupted; last known up at 2023-08-09 22:43:34 UTC Tue Aug 09 15:45:18.223 2023 PDT | checkpoint record is at 0/90002E0 Tue Aug 09 15:45:18.223 2023 PDT | redo record is at 0/90002A8; shutdown FALSE Tue Aug 09 15:45:18.223 2023 PDT | next transaction ID: 0/1879; next OID: 24578 Tue Aug 09 15:45:18.223 2023 PDT | next MultiXactId: 1; next MultiXactOffset: 0 Tue Aug 09 15:45:18.223 2023 PDT | oldest unfrozen transaction ID: 1822, in database 1 (7 rows)