All Products
Search
Document Center

ApsaraDB RDS:Gunakan ekstensi log_fdw untuk mengkueri log

Last Updated:Mar 29, 2026

Ekstensi log_fdw memetakan file log CSV PostgreSQL ke tabel eksternal, sehingga Anda dapat mengkueri log database menggunakan SQL standar—tanpa perlu akses shell. Fitur ini berguna untuk menganalisis kueri lambat, mengaudit aktivitas dalam rentang waktu tertentu, atau menyaring log berdasarkan tingkat keparahan, pengguna, atau sesi.

Prasyarat

Sebelum memulai, pastikan bahwa:

Cara kerja

log_fdw menyediakan dua fungsi:

FungsiDeskripsi
list_postgres_log_files()Menampilkan daftar semua file log .csv yang tersedia beserta ukurannya.
create_foreign_table_for_log_file(IN table_name text, IN log_server text, IN log_file text)Membuat tabel eksternal yang dipetakan ke file log .csv tertentu.

Setelah tabel eksternal dibuat, Anda dapat mengkuerinya seperti tabel biasa untuk mengambil data log.

Kueri Log dengan log_fdw

Langkah 1: Buat ekstensi

postgres=> create extension log_fdw;
CREATE EXTENSION

Langkah 2: Definisikan server log

postgres=> create server log_server foreign data wrapper log_fdw;
CREATE SERVER

Ganti log_server dengan nama yang ingin Anda berikan untuk server log.

Langkah 3: Tampilkan daftar file log yang tersedia

postgres=> select * from list_postgres_log_files() order by 1;
            file_name             | file_size_bytes
----------------------------------+-----------------
 postgresql-2020-01-10_095546.csv |            3794
 postgresql-2020-01-10_100336.csv |          318318
 postgresql-2020-01-11_000000.csv |          198437
 postgresql-2020-01-11_083546.csv |            4775
 postgresql-2020-01-13_030618.csv |            3347

Langkah 4: Buat tabel eksternal untuk file log

postgres=> select create_foreign_table_for_log_file('ft1', 'log_server', 'postgresql-2020-01-13_030618.csv');
 create_foreign_table_for_log_file
-----------------------------------
 t
(1 row)

Tiga parameter tersebut adalah nama tabel eksternal, nama server log, dan nama file log.

Langkah 5: Kueri tabel eksternal

postgres=> select log_time, message from ft1 order by log_time desc limit 2;
          log_time          |                              message
----------------------------+-------------------------------------------------------------------
 2020-01-13 03:35:00.003+00 | cron job 1 completed: INSERT 0 1 1
 2020-01-13 03:35:00+00     | cron job 1 starting: INSERT INTO cron_test VALUES ('Hello World')
(2 rows)

Skema tabel eksternal

Tabel eksternal yang dibuat oleh create_foreign_table_for_log_file() memiliki kolom-kolom berikut:

postgres=> \d+ ft1
                                                         Foreign table "public.ft1"
         Column         |            Type             | Collation | Nullable | Default | FDW options | Storage  | Stats target | Description
------------------------+-----------------------------+-----------+----------+---------+-------------+----------+--------------+-------------
 log_time               | timestamp(3) with time zone |           |          |         |             | plain    |              |
 user_name              | text                        |           |          |         |             | extended |              |
 database_name          | text                        |           |          |         |             | extended |              |
 process_id             | integer                     |           |          |         |             | plain    |              |
 connection_from        | text                        |           |          |         |             | extended |              |
 session_id             | text                        |           |          |         |             | extended |              |
 session_line_num       | bigint                      |           |          |         |             | plain    |              |
 command_tag            | text                        |           |          |         |             | extended |              |
 session_start_time     | timestamp with time zone    |           |          |         |             | plain    |              |
 virtual_transaction_id | text                        |           |          |         |             | extended |              |
 transaction_id         | bigint                      |           |          |         |             | plain    |              |
 error_severity         | text                        |           |          |         |             | extended |              |
 sql_state_code         | text                        |           |          |         |             | extended |              |
 message                | text                        |           |          |         |             | extended |              |
 detail                 | text                        |           |          |         |             | extended |              |
 hint                   | text                        |           |          |         |             | extended |              |
 internal_query         | text                        |           |          |         |             | extended |              |
 internal_query_pos     | integer                     |           |          |         |             | plain    |              |
 context                | text                        |           |          |         |             | extended |              |
 query                  | text                        |           |          |         |             | extended |              |
 query_pos              | integer                     |           |          |         |             | plain    |              |
 location               | text                        |           |          |         |             | extended |              |
 application_name       | text                        |           |          |         |             | extended |              |
Server: log_server
FDW options: (filename 'postgresql-2020-01-13_030618.csv')

Kolom utama untuk analisis log:

KolomTipeDeskripsi
log_timetimestamp(3) with time zoneTimestamp entri log
user_nametextPengguna database yang memicu event
database_nametextDatabase tempat event terjadi
process_idintegerID proses OS dari backend PostgreSQL
error_severitytextTingkat log: DEBUG, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, atau PANIC
sql_state_codetextKode kesalahan SQLSTATE lima karakter (mengikuti standar SQL)
messagetextPesan log utama
detailtextPesan detail tambahan, jika ada
hinttextSaran tindakan untuk menyelesaikan kesalahan, jika disediakan
internal_querytextKueri internal yang memicu kesalahan, jika berlaku
internal_query_posintegerOffset karakter dalam internal_query tempat kesalahan terjadi
contexttextKonteks stack pemanggilan saat entri log dibuat
querytextString kueri yang dikirim pengguna, jika berlaku
query_posintegerOffset karakter dalam query tempat kesalahan terjadi
command_tagtextJenis perintah SQL yang terkait dengan entri log (misalnya, SELECT, INSERT)
session_idtextPengidentifikasi unik untuk session database
session_start_timetimestamp with time zoneWaktu session database dimulai
session_line_numbigintNomor baris dalam output log session
virtual_transaction_idtextID transaksi virtual yang diberikan sebelum ID transaksi nyata dialokasikan
transaction_idbigintID transaksi nyata, setelah dialokasikan
connection_fromtextAlamat host dan port klien
locationtextLokasi file sumber dalam kode server PostgreSQL tempat entri log dihasilkan
application_nametextNama aplikasi klien, jika diatur