本節說明如何設定稽核日誌記錄特性,例如稽核日誌外掛程式寫入事件的檔案、寫入事件的格式、是否啟用日誌檔案壓縮與加密,以及空間管理。
如需有關影響稽核日誌記錄的函式與系統變數的額外資訊,請參閱稽核日誌函式和稽核日誌選項與變數。
稽核日誌外掛程式也可以根據事件內容或事件來源的帳戶來控制將哪些稽核事件寫入稽核日誌檔案。請參閱第 8.4.5.7 節「稽核日誌篩選」。
若要設定稽核日誌檔名,請在伺服器啟動時設定 audit_log_file
系統變數。預設名稱為伺服器資料目錄中的 audit.log
。為了獲得最佳安全性,請將稽核日誌寫入只有 MySQL 伺服器和有正當理由檢視日誌的使用者才能存取的目錄。
外掛程式會將 audit_log_file
值解讀為由可選的前導目錄名稱、基本名稱和可選的後綴組成。如果啟用壓縮或加密,則有效的檔案名稱(實際用於建立日誌檔的名稱)與設定的檔案名稱不同,因為它具有額外的後綴。
如果啟用壓縮,外掛程式會新增
.gz
的後綴。如果啟用加密,外掛程式會新增
.
的後綴,其中pwd_id
.encpwd_id
表示要用於日誌檔操作的加密密碼。稽核日誌外掛程式將加密密碼儲存在金鑰環中;請參閱加密稽核日誌檔。
有效的稽核日誌檔名是將適用的壓縮和加密後綴新增至設定的檔案名稱後所產生的名稱。例如,如果設定的 audit_log_file
值為 audit.log
,則有效的檔案名稱為下表中顯示的值之一。
啟用的功能 | 有效的檔案名稱 |
---|---|
無壓縮或加密 | audit.log |
壓縮 | audit.log.gz |
加密 | audit.log. |
壓縮、加密 | audit.log.gz. |
pwd_id
表示用於加密或解密檔案的密碼 ID。pwd_id
格式為 pwd_timestamp-seq
,其中
pwd_timestamp
是
格式的 UTC 值,表示密碼的建立時間。YYYYMMDD
Thhmmss
seq
是序號。序號從 1 開始,並為具有相同pwd_timestamp
值的密碼增加。
以下是一些 pwd_id
密碼 ID 值的範例
20190403T142359-1
20190403T142400-1
20190403T142400-2
若要為金鑰環中儲存的密碼建構對應的金鑰環 ID,稽核日誌外掛程式會將 audit_log-
的前綴新增至 pwd_id
值。對於剛才顯示的範例密碼 ID,對應的金鑰環 ID 為
audit_log-20190403T142359-1
audit_log-20190403T142400-1
audit_log-20190403T142400-2
稽核日誌外掛程式目前用於加密的密碼 ID 是具有最大 pwd_timestamp
值的密碼 ID。如果多個密碼具有該 pwd_timestamp
值,則目前密碼 ID 是具有最大序號的密碼 ID。例如,在先前的密碼 ID 集中,其中兩個具有最大的時間戳記 20190403T142400
,因此目前密碼 ID 是具有最大序號 ( 2
) 的密碼 ID。
稽核日誌外掛程式會在初始化和終止期間根據有效的稽核日誌檔名執行某些動作
在初始化期間,外掛程式會檢查是否已存在具有稽核日誌檔名的檔案,如果存在,則會重新命名該檔案。(在這種情況下,外掛程式會假設先前的伺服器叫用在執行稽核日誌外掛程式的情況下意外結束。)然後,外掛程式會寫入新的空白稽核日誌檔。
在終止期間,外掛程式會重新命名稽核日誌檔。
檔案重新命名(無論是在外掛程式初始化期間或終止期間)都會根據基於大小的自動日誌檔案輪換的一般規則進行;請參閱手動稽核日誌檔案輪換。
若要設定稽核日誌檔案格式,請在伺服器啟動時設定 audit_log_format
系統變數。這些格式可用
NEW
:新型 XML 格式。這是預設值。OLD
:舊型 XML 格式。JSON
:JSON 格式。將稽核日誌寫入為 JSON 陣列。只有此格式支援可選的查詢時間和大小統計資料。
有關每種格式的詳細資訊,請參閱第 8.4.5.4 節「稽核日誌檔案格式」。
MySQL Enterprise Audit 提供設定重新整理間隔以自動處置記憶體內快取的功能。使用 audit_log_flush_interval_seconds
系統變數設定的刷新工作預設值為零,這表示未排程執行該工作。
當工作設定為執行時(值為非零值),MySQL Enterprise Audit 會嘗試在其初始化時呼叫 排程器元件,並設定定期、重複的記憶體快取刷新。
如果稽核日誌找不到排程器註冊服務的實作,則不會排程刷新並繼續載入。
稽核日誌實作
dynamic_loader_services_loaded_notification
服務,並監聽mysql_scheduler
的新註冊,以便稽核日誌可以將其排程的工作註冊到新載入的排程器中。稽核日誌只會將自己註冊到載入的第一個排程器實作中。
同樣地,MySQL Enterprise Audit 會在其取消初始化時呼叫 排程器
元件,並取消設定它已排程的重複刷新。它會保持對排程器註冊服務的活動參考,直到取消註冊排程的工作為止,確保在有活動排程工作時無法卸載 排程器
元件。執行排程器及其工作的所有結果都會寫入伺服器錯誤日誌。
若要排程稽核日誌刷新工作
確認已載入並啟用
排程器
元件。預設情況下會啟用元件 (ON
) (請參閱component_scheduler.enabled
)。SELECT * FROM mysql.components; +--------------+--------------------+----------------------------+ | component_id | component_group_id | component_urn | +--------------+--------------------+----------------------------+ | 1 | 1 | file://component_scheduler | +--------------+--------------------+----------------------------+
安裝
audit_log
外掛程式(如果尚未安裝)(請參閱第 8.4.5.2 節「安裝或解除安裝 MySQL Enterprise Audit」)。使用
audit_log_flush_interval_seconds
啟動伺服器,並將值設定為大於 59 的數字。值的上限會因平台而異。例如,若要將刷新工作設定為每兩分鐘重複執行$> mysqld --audit_log_flush_interval_seconds=120
有關詳細資訊,請參閱
audit_log_flush_interval_seconds
系統變數。
在 MySQL 8.4 中,您可以使用可選的資料欄位擴充 JSON 格式的日誌檔,以顯示查詢時間、傳送和接收的位元組數、傳回用戶端的資料列數,以及檢查的資料列數。此資料在慢速查詢日誌中適用於符合資格的查詢,在稽核日誌的內容中,它同樣有助於偵測活動分析的異常值。只有當稽核日誌為 JSON 格式 (audit_log_format=JSON
) 時,才能新增擴充的資料欄位,這不是預設設定。
查詢統計資料是透過您設定為稽核日誌篩選功能的元件服務傳遞至稽核日誌。這些服務命名為 mysql_audit_print_service_longlong_data_source
和 mysql_audit_print_service_double_data_source
。您可以為每個輸出項目選擇任一資料類型。對於查詢時間,longlong
會以微秒為單位輸出值,而 double
會以秒為單位輸出值。
您可以使用 audit_log_filter_set_filter()
稽核日誌函數,將查詢統計資料新增為 JSON 篩選語法的 service
元素,如下所示
SELECT audit_log_filter_set_filter('QueryStatistics',
'{ "filter": { "class": { "name": "general", "event": { "name": "status", "print" : '
'{ "service": { "implementation": "mysql_server", "tag": "query_statistics", "element": [ '
'{ "name": "query_time", "type": "double" }, '
'{ "name": "bytes_sent", "type": "longlong" }, '
'{ "name": "bytes_received", "type": "longlong" }, '
'{ "name": "rows_sent", "type": "longlong" }, '
'{ "name": "rows_examined", "type": "longlong" } ] } } } } } }');
若要填入 bytes_sent
和 bytes_received
欄位,系統變數 log_slow_extra
必須設定為 ON
。如果系統變數的值為 OFF
,則會將 Null 值寫入這些欄位的日誌檔中。
如果您想要停止收集查詢統計資料,請使用 audit_log_filter_set_filter()
稽核日誌函數移除篩選器,例如
SELECT audit_log_filter_remove_filter('QueryStatistics');
可以為任何日誌格式啟用稽核日誌檔案壓縮。
若要設定稽核日誌檔案壓縮,請在伺服器啟動時設定 audit_log_compression
系統變數。允許的值為 NONE
(無壓縮;預設值)和 GZIP
(GNU Zip 壓縮)。
如果同時啟用壓縮和加密,則會在加密之前進行壓縮。若要手動復原原始檔案,請先將其解密,然後解壓縮。請參閱手動解壓縮和解密稽核日誌檔。
可以為任何日誌格式啟用稽核日誌檔案加密。加密是基於使用者定義的密碼(稽核日誌外掛程式產生的初始密碼除外)。若要使用此功能,必須啟用 MySQL 金鑰環,因為稽核日誌會使用它來儲存密碼。可以使用任何金鑰環元件或外掛程式;有關指示,請參閱第 8.4.4 節「MySQL 金鑰環」。
若要設定稽核日誌檔案加密,請在伺服器啟動時設定 audit_log_encryption
系統變數。允許的值為 NONE
(無加密;預設值)和 AES
(AES-256-CBC 密碼加密)。
若要在執行階段設定或取得加密密碼,請使用這些稽核日誌函數
若要設定目前的加密密碼,請調用
audit_log_encryption_password_set()
。此函數會將新密碼儲存在金鑰環中。如果已啟用加密,它也會執行日誌檔輪換操作,重新命名目前的日誌檔,並開始使用該密碼加密的新日誌檔。檔案重新命名會根據基於大小的自動日誌檔輪換的慣例規則進行;請參閱手動稽核日誌檔輪換。如果
audit_log_password_history_keep_days
系統變數為非零值,調用audit_log_encryption_password_set()
也會導致舊的封存稽核日誌加密密碼過期。如需稽核日誌密碼歷程記錄的相關資訊,包括密碼封存和過期,請參閱該變數的說明。若要取得目前的加密密碼,請調用
audit_log_encryption_password_get()
,不帶任何引數。若要依 ID 取得密碼,請傳遞一個引數,指定目前密碼或封存密碼的金鑰環 ID。若要判斷存在哪些稽核日誌金鑰環 ID,請查詢 Performance Schema
keyring_keys
表格mysql> SELECT KEY_ID FROM performance_schema.keyring_keys WHERE KEY_ID LIKE 'audit_log%' ORDER BY KEY_ID; +-----------------------------+ | KEY_ID | +-----------------------------+ | audit_log-20190415T152248-1 | | audit_log-20190415T153507-1 | | audit_log-20190416T125122-1 | | audit_log-20190416T141608-1 | +-----------------------------+
如需稽核日誌加密函數的詳細資訊,請參閱稽核日誌函數。
當稽核日誌外掛程式初始化時,如果發現已啟用日誌檔加密,它會檢查金鑰環是否包含稽核日誌加密密碼。如果沒有,外掛程式會自動產生一個隨機的初始加密密碼,並將其儲存在金鑰環中。若要尋找此密碼,請調用 audit_log_encryption_password_get()
。
如果同時啟用壓縮和加密,則會在加密之前進行壓縮。若要手動復原原始檔案,請先將其解密,然後解壓縮。請參閱手動解壓縮和解密稽核日誌檔。
可以使用標準工具解壓縮和解密稽核日誌檔。這應該僅針對已關閉(封存)且不再使用的日誌檔執行,而不是針對稽核日誌外掛程式目前正在寫入的日誌檔執行。您可以識別封存的日誌檔,因為稽核日誌外掛程式已將其重新命名,在基本名稱後面的檔案名稱中包含時間戳記。
在此討論中,假設 audit_log_file
設定為 audit.log
。在這種情況下,封存的稽核日誌檔具有下表所示的其中一個名稱。
啟用的功能 | 封存的檔案名稱 |
---|---|
無壓縮或加密 | audit. |
壓縮 | audit. |
加密 | audit. |
壓縮、加密 | audit. |
如稽核日誌檔的命名慣例中所述,pwd_id
格式為 pwd_timestamp-seq
。因此,封存的加密日誌檔名稱實際上包含兩個時間戳記。第一個表示檔案輪換時間,第二個表示加密密碼的建立時間。
請考慮下列一組封存的加密日誌檔名稱
audit.20190410T205827.log.20190403T185337-1.enc
audit.20190410T210243.log.20190403T185337-1.enc
audit.20190415T145309.log.20190414T223342-1.enc
audit.20190415T151322.log.20190414T223342-2.enc
每個檔案名稱都有一個獨特的輪換時間時間戳記。相比之下,密碼時間戳記不是唯一的
前兩個檔案具有相同的密碼 ID 和序號 (
20190403T185337-1
)。它們具有相同的加密密碼。後兩個檔案具有相同的密碼 ID (
20190414T223342
) 但不同的序號 (1
,2
)。這些檔案具有不同的加密密碼。
若要手動解壓縮壓縮的日誌檔,請使用 gunzip、gzip -d 或等效的命令。例如
gunzip -c audit.timestamp.log.gz > audit.timestamp.log
若要手動解密加密的日誌檔,請使用 openssl 命令。例如
openssl enc -d -aes-256-cbc -pass pass:password -md sha256
-in audit.timestamp.log.pwd_id.enc
-out audit.timestamp.log
若要執行該命令,您必須取得 password
,也就是加密密碼。若要執行此操作,請使用 audit_log_encryption_password_get()
。例如,如果稽核日誌檔名稱為 audit.20190415T151322.log.20190414T223342-2.enc
,則密碼 ID 為 20190414T223342-2
,且金鑰環 ID 為 audit-log-20190414T223342-2
。像這樣擷取金鑰環密碼
SELECT audit_log_encryption_password_get('audit-log-20190414T223342-2');
如果同時啟用稽核記錄的壓縮和加密,則會先進行壓縮,再進行加密。在這種情況下,檔案名稱會新增 .gz
和 .
後綴,對應於這些操作發生的順序。若要手動復原原始檔案,請以相反的順序執行操作。也就是說,先解密檔案,然後再解壓縮pwd_id
.enc
openssl enc -d -aes-256-cbc -pass pass:password -md sha256
-in audit.timestamp.log.gz.pwd_id.enc
-out audit.timestamp.log.gz
gunzip -c audit.timestamp.log.gz > audit.timestamp.log
稽核日誌檔有可能變得非常大並消耗大量的磁碟空間。如果您正在收集選用的查詢時間和大小統計資料,這會增加空間需求。查詢統計資料僅支援 JSON 格式。
若要管理所使用的空間,請採用下列方法
日誌檔輪換。這涉及輪換目前的日誌檔,方法是重新命名它,然後使用原始名稱開啟新的目前日誌檔。輪換可以手動執行,或設定為自動發生。
如果已啟用自動輪換,則會修剪輪換的 JSON 格式日誌檔。可以根據日誌檔存在時間或合併的日誌檔大小執行修剪。
若要設定稽核日誌檔空間管理,請使用下列系統變數
如果
audit_log_rotate_on_size
為 0(預設值),則會停用自動日誌檔輪換。除非手動執行,否則不會發生輪換。
若要輪換目前的檔案,請使用下列其中一種方法
執行
SELECT audit_log_rotate();
以重新命名檔案,並使用原始名稱開啟新的稽核日誌檔。使用此檔案輪換方法,如果
audit_log_max_size
或audit_log_prune_seconds
的值大於 0,則會修剪輪換的 JSON 格式日誌檔。手動重新命名檔案,然後啟用
audit_log_flush
以關閉它,並使用原始名稱開啟新的目前日誌檔。此檔案輪換方法和audit_log_flush
變數已棄用。使用此檔案輪換方法,不會修剪輪換的 JSON 格式日誌檔;
audit_log_max_size
和audit_log_prune_seconds
不會產生任何影響。
如需詳細資訊,請參閱手動稽核日誌檔輪換。
如果
audit_log_rotate_on_size
大於 0,則會啟用自動稽核日誌檔輪換當寫入目前日誌檔導致其大小超過
audit_log_rotate_on_size
值時,以及在某些其他情況下,會發生自動輪換;請參閱自動稽核日誌檔輪換。當發生自動輪換時,稽核日誌外掛程式會重新命名目前的日誌檔,並使用原始名稱開啟新的目前日誌檔。如果
audit_log_max_size
或audit_log_prune_seconds
的值大於 0,則會修剪輪換的 JSON 格式日誌檔。audit_log_flush
不會產生任何影響。
對於 JSON 格式的日誌檔,當在執行階段變更 audit_log_format_unix_timestamp
系統變數的值時,也會發生輪換。但是,這不是為了空間管理目的而發生,而是為了使給定的 JSON 格式日誌檔中的所有記錄都包含或不包含 time
欄位。
輪換(重新命名)的日誌檔不會自動移除。例如,對於基於大小的日誌檔輪換,重新命名的日誌檔具有唯一的名稱並無限累積。它們不會在名稱序列的末尾輪換掉。若要避免過度使用空間
對於 JSON 格式的日誌檔:啟用如稽核日誌檔修剪中所述的日誌檔修剪。
否則:定期移除舊檔案,並在必要時先備份它們。如果備份的日誌檔已加密,也請將對應的加密密碼備份到安全的地方,以便日後需要解密檔案時使用。
下列章節將更詳細地說明日誌檔輪換和修剪。
手動稽核日誌檔輪換
如果 audit_log_rotate_on_size
為 0(預設值),則除非手動執行,否則不會發生日誌輪換。
若要手動輪換稽核日誌檔,請執行 SELECT audit_log_rotate();
以重新命名目前的稽核日誌檔並開啟新的稽核日誌檔。檔案會根據稽核日誌檔的命名慣例中所述的慣例重新命名。
必須具有 AUDIT_ADMIN
權限才能使用 audit_log_rotate()
函數。
管理封存日誌檔的數量(已重新命名的檔案)及其使用的空間,是一項手動工作,需要從您的檔案系統中移除不再需要的封存稽核日誌檔。
可以使用 audit_log_read()
函數讀取使用 audit_log_rotate()
函數重新命名的稽核日誌檔的內容。
手動稽核日誌檔輪換(舊方法)
audit_log_flush
變數和此稽核日誌檔輪換方法已棄用;預計在未來版本的 MySQL 中會移除支援。
如果 audit_log_rotate_on_size
為 0(預設值),則除非手動執行,否則不會發生日誌輪換。在這種情況下,當 audit_log_flush
值從停用變更為啟用時,稽核日誌外掛程式會關閉並重新開啟日誌檔。日誌檔重新命名必須在伺服器外部完成。假設日誌檔名稱為 audit.log
,而您想要維護最近的三個日誌檔,並在名稱 audit.log.1
到 audit.log.3
之間循環。在 Unix 上,像這樣手動執行輪換
從命令列,重新命名目前的日誌檔
mv audit.log.2 audit.log.3 mv audit.log.1 audit.log.2 mv audit.log audit.log.1
此策略會覆寫目前的
audit.log.3
內容,對封存的日誌檔數量及其使用的空間設定限制。此時,外掛程式仍會寫入目前的日誌檔案,該檔案已重新命名為
audit.log.1
。連線到伺服器並刷新日誌檔案,以便外掛程式關閉該檔案並重新開啟新的audit.log
檔案。SET GLOBAL audit_log_flush = ON;
audit_log_flush
的特殊之處在於,其值保持為OFF
,因此您無需明確停用它,即可再次啟用它以執行另一次刷新。
如果啟用壓縮或加密,則日誌檔案名稱會包含表示已啟用功能的後綴,以及如果啟用加密,則會包含密碼 ID。如果檔案名稱包含密碼 ID,請務必在手動重新命名的任何檔案名稱中保留 ID,以便可以確定用於解密操作的密碼。
對於 JSON 格式的日誌記錄,手動重新命名稽核日誌檔案會使這些檔案無法用於日誌讀取功能,因為稽核日誌外掛程式無法再判斷它們是日誌檔案序列的一部分(請參閱第 8.4.5.6 節「讀取稽核日誌檔案」)。請考慮將 audit_log_rotate_on_size
設定為大於 0 的值,以改用基於大小的輪換。
自動稽核日誌檔案輪換
如果 audit_log_rotate_on_size
大於 0,則設定 audit_log_flush
不會產生任何效果。相反地,每當寫入目前日誌檔案導致其大小超過 audit_log_rotate_on_size
值時,稽核日誌外掛程式會自動重新命名目前的日誌檔案,並使用原始名稱開啟新的目前日誌檔案。
在下列情況下也會發生基於大小的自動輪換
在外掛程式初始化期間,如果已存在具有稽核日誌檔案名稱的檔案(請參閱稽核日誌檔案的命名慣例)。
在外掛程式終止期間。
當呼叫
audit_log_encryption_password_set()
函數設定加密密碼時(如果已啟用加密)。(如果已停用加密,則不會發生輪換。)
外掛程式會在其基本名稱後插入時間戳記,以重新命名原始檔案。例如,如果檔案名稱是 audit.log
,則外掛程式會將其重新命名為類似 audit.20210115T140633.log
的值。時間戳記是 UTC 值,格式為
。對於 XML 日誌記錄,時間戳記表示輪換時間。對於 JSON 日誌記錄,時間戳記是寫入檔案的最後一個事件的時間戳記。YYYYMMDD
Thhmmss
如果日誌檔案已加密,則原始檔案名稱已包含指示加密密碼建立時間的時間戳記(請參閱稽核日誌檔案的命名慣例)。在這種情況下,輪換後的檔案名稱包含兩個時間戳記。例如,名為 audit.log.20210110T130749-1.enc
的加密日誌檔案會重新命名為類似 audit.20210115T140633.log.20210110T130749-1.enc
的值。
稽核日誌檔案修剪
如果已啟用自動日誌檔案輪換,稽核日誌外掛程式支援修剪已輪換的 JSON 格式稽核日誌檔案。若要使用此功能
將
audit_log_format
設定為JSON
。(此外,也請考慮變更audit_log_file
;請參閱選取稽核日誌檔案格式。)將
audit_log_rotate_on_size
設定為大於 0 的值,以指定發生自動日誌檔案輪換的大小(以位元組為單位)。依預設,不會修剪自動輪換的 JSON 格式日誌檔案。若要啟用修剪,請將以下其中一個系統變數設定為大於 0 的值
將
audit_log_max_size
設定為大於 0 的值,以指定輪換的日誌檔案的合併大小上限(以位元組為單位),超過此上限的檔案將會受到修剪。將
audit_log_prune_seconds
設定為大於 0 的值,以指定輪換的日誌檔案在經過多少秒後會受到修剪。
audit_log_max_size
的非零值優先於audit_log_prune_seconds
的非零值。如果在外掛程式初始化時兩者都設定為大於 0 的值,則會在伺服器錯誤日誌中寫入警告。如果用戶端在執行階段將兩者都設定為大於 0 的值,則會將警告傳回給用戶端。注意寫入錯誤日誌的警告會以附註的形式寫入,這些是資訊訊息。若要確保此類訊息會出現在錯誤日誌中且不會被捨棄,請確保錯誤日誌記錄詳細程度足以包含資訊訊息。例如,如果您使用基於優先順序的日誌篩選(如第 7.4.2.5 節「基於優先順序的錯誤日誌篩選 (log_filter_internal)」中所述),請將
log_error_verbosity
系統變數設定為 3 的值。
如果已啟用,則 JSON 格式日誌檔案的修剪會依下列方式進行
當發生自動輪換時;有關發生此情況的條件,請參閱自動稽核日誌檔案輪換。
當在執行階段設定全域
audit_log_max_size
或audit_log_prune_seconds
系統變數時。
對於基於輪換日誌檔案合併大小的修剪,如果合併大小大於 audit_log_max_size
指定的限制,則稽核日誌外掛程式會移除最舊的檔案,直到它們的合併大小不超過限制為止。
對於基於輪換日誌檔案時間的修剪,修剪點是目前時間減去 audit_log_prune_seconds
的值。在已輪換的 JSON 格式日誌檔案中,每個檔案名稱的時間戳記部分表示寫入檔案的最後一個事件的時間戳記。稽核日誌外掛程式使用檔案名稱時間戳記來判斷哪些檔案僅包含早於修剪點的事件,並移除這些檔案。
稽核日誌外掛程式可以使用多種策略來寫入日誌。無論採用哪種策略,日誌記錄都會盡最大努力進行,而無法保證一致性。
若要指定寫入策略,請在伺服器啟動時設定 audit_log_strategy
系統變數。依預設,策略值為 ASYNCHRONOUS
,而外掛程式會以非同步方式記錄到緩衝區,如果緩衝區已滿,則會等待。可以告知外掛程式不要等待 (PERFORMANCE
) 或同步記錄,無論是使用檔案系統快取 (SEMISYNCHRONOUS
) 還是使用每次寫入請求後的 sync()
呼叫強制輸出 (SYNCHRONOUS
)。
在許多情況下,如果目前的查詢對於緩衝區而言太大,則外掛程式會直接寫入 JSON 格式的稽核日誌。寫入策略決定外掛程式如何遞增直接寫入計數。您可以使用 Audit_log_direct_writes
狀態變數追蹤直接寫入的次數。
對於非同步寫入策略,audit_log_buffer_size
系統變數是以位元組為單位的緩衝區大小。請在伺服器啟動時設定此變數,以變更緩衝區大小。外掛程式會使用單一緩衝區,該緩衝區會在初始化時配置,並在終止時移除。對於非同步寫入策略,外掛程式不會配置此緩衝區。
非同步日誌記錄策略具有下列特性
對伺服器效能和延展性影響最小。
將產生稽核事件的執行緒鎖定最短的時間;也就是說,配置緩衝區的時間加上將事件複製到緩衝區的時間。
輸出會傳送到緩衝區。單獨的執行緒會處理從緩衝區寫入到日誌檔案的作業。
使用非同步日誌記錄時,如果寫入檔案時發生問題,或外掛程式未正常關閉(例如,在伺服器主機意外結束的情況下),則日誌檔案的完整性可能會受到影響。若要降低此風險,請設定 audit_log_strategy
以使用同步日誌記錄。
PERFORMANCE
策略的缺點是,當緩衝區已滿時,它會捨棄事件。對於負載繁重的伺服器,稽核日誌可能會有事件遺失。