在 Azure Cosmos DB for PostgreSQL 中稽核記錄
適用於: Azure Cosmos DB for PostgreSQL (由 PostgreSQL 的超大規模 (Citus) 資料庫延伸模組提供)
Azure Cosmos DB for PostgreSQL 中資料庫活動的稽核記錄,可透過 PostgreSQL 稽核延伸模組取得:pgAudit。 pgAudit 提供詳細的工作階段或物件稽核記錄。
如果您需要 Azure 資源層級的記錄來進行計算和儲存體調整等作業,請參閱 Azure 活動記錄。
使用方式的考量
根據預設,pgAudit 記錄陳述式會與您的一般記錄陳述式一起發出,其方法是使用 Postgres 的標準記錄功能。 在 Azure Cosmos DB for PostgreSQL 中,您可以將所有記錄設定為傳送至 Azure 監視器記錄存放區,以便後續在 Log Analytics 中進行分析。
安裝 pgAudit
若要安裝 pgAudit,您必須先將其包含在伺服器的共用預先載入程式庫中。 變更為 shared_preload_libraries
參數時需要重新啟動叢集才會生效。 此外,pgAudit 設定是在叢集中依各節點指定的。 若要在所有節點啟用稽核,您必須將稽核設定套用至協調器和背景工作角色節點設定。
使用 Azure 入口網站:
請選擇您的 Azure Cosmos DB for PostgreSQL 叢集。
在提要欄位中選取 [協調器 (或背景工作角色節點) 參數]。
搜尋
shared_preload_libraries
參數。選取 [pgaudit] 並儲存變更。 您的 Azure Cosmos DB for PostgreSQL 叢集將重新啟動。
您可以在 psql 中執行下列查詢,以確認 pgaudit 已載入 shared_preload_libraries 中:
show shared_preload_libraries;
您應該會在查詢結果中看到 pgaudit。
連線到 psql,並針對 citus 版本 11.0 或更新版本提出下列查詢
BEGIN; SET LOCAL citus.enable_metadata_sync = false; SELECT create_extension('pgaudit'); COMMIT;
對於 citus 11.0 之前的舊版本:
BEGIN; SET LOCAL citus.enable_object_propagation= false; SELECT create_extension('pgaudit'); COMMIT;
pgAudit 設定
pgAudit 可讓您設定工作階段或物件稽核記錄。 工作階段稽核記錄會發出已執行陳述式的詳細記錄。 物件稽核記錄是限定於特定關聯範圍的稽核。 您可以選擇設定一或兩種類型的記錄。
啟用 pgAudit 之後,您可以設定其參數以開始記錄。 若要設定 pgAudit,您可以依照下列指示操作。 使用 Azure 入口網站:
請選擇您的 Azure Cosmos DB for PostgreSQL 叢集。
在提要欄位中,選取 [伺服器參數]。
搜尋
pgaudit
參數。請選擇 [儲存] 按鈕以儲存變更
pgAudit 文件提供每個參數的定義。 先測試參數,並確認您獲得預期的行為。
注意
將 pgaudit.log_client
設定為 [開啟],會將記錄重新導向至用戶端程序 (例如 psql),而不會寫入至檔案。 此設定通常應保持停用狀態。
只有在 pgaudit.log_client
為開啟時才會啟用 pgaudit.log_level
。
注意
在 Azure Cosmos DB for PostgreSQL 中,無法使用如 pgAudit 文件中所述的 -
(減號) 符號快速鍵來設定 pgaudit.log
。 所有必要的陳述式類別 (READ、WRITE 等) 都應該個別指定。
稽核記錄檔格式
每個稽核項目分別會以記錄行開頭附近的 AUDIT:
表示。 pgAudit 文件詳細說明了其餘項目的格式。
檢視稽核記錄
您存取記錄的方式取決於您選擇的端點。 針對 Azure 儲存體,請參閱記錄儲存體帳戶一文。 針對事件中樞,請參閱串流 Azure 記錄一文。
針對 Azure 監視器記錄,記錄會傳送至您選取的工作區。 Postgres 記錄會使用 AzureDiagnostics 收集模式,以便可從 AzureDiagnostics 資料表加以查詢。 下表中的欄位說明如下。 在 Azure 監視器記錄查詢概觀中深入了解查詢和警示。
您可以透過此查詢開始使用。 您可以根據查詢來設定警示。
在 Postgres 記錄中搜尋特定伺服器在過去一天中的所有 pgAudit 項目
AzureDiagnostics
| where Resource == "myservername"
| where Category == "PostgreSQLlogs"
| where TimeGenerated > ago(1d)
| where Message contains "AUDIT:"