稽核日誌
Solr 具有記錄所有進入系統的 HTTP 請求稽核追蹤的能力。稽核記錄器是可插拔的,以適應任何可能的格式或記錄目的地。
稽核追蹤(也稱為稽核日誌)是與安全性相關的按時間順序記錄、記錄集和/或記錄的來源和目的地,提供文件證據,證明在任何時間影響特定操作、程序、事件或裝置的活動順序。
https://en.wikipedia.org/wiki/Audit_trail
設定稽核日誌
稽核日誌是在 security.json
中 auditlogging
索引鍵下設定的。
以下範例使用外掛程式預設值來設定同步稽核日誌到 Solr 的預設記錄檔。
{
"auditlogging":{
"class": "solr.SolrLogAuditLoggerPlugin"
}
}
預設情況下,任何稽核記錄外掛程式都會在背景中非同步記錄,以避免減慢請求速度。若要讓稽核記錄同步發生,請加入參數 async
,值為 false
。
使用非同步記錄時,您也可以選擇設定佇列大小、執行緒數目,以及在佇列已滿時是否應該封鎖或捨棄事件
{
"auditlogging":{
"class": "solr.SolrLogAuditLoggerPlugin",
"async": true,
"blockAsync" : false,
"numThreads" : 2,
"queueSize" : 4096,
"eventTypes": ["REJECTED", "ANONYMOUS_REJECTED", "UNAUTHORIZED", "COMPLETED", "ERROR"]
}
}
稽核日誌參數
這些參數是
class
-
必要
預設值:無
稽核日誌外掛程式類別名稱。可以是
solr.SolrLogAuditLoggingPlugin
或solr.MultiDestinationAuditLogger
(如下方「鏈結多個記錄器」章節中所述)。 async
-
選用
預設值:
true
定義是否非同步記錄事件。這預設為
true
,以避免減慢請求速度。不過,如果您對系統的效能特性有信心,並且需要同步記錄事件,您可以將此變更為false
。 blockAsync
-
選用
預設值:
false
定義如果佇列已滿,是否應封鎖請求。預設值
false
將會捨棄未記錄的事件。僅在async=true
時使用。 numThreads
-
選用
預設值:
2
可用於稽核日誌的執行緒數目。如果伺服器可用的 CPU 核心數目大於 4,則預設值會修改為
CPU 核心數目 / 2
。僅在async=true
時使用。 queueSize
-
選用
預設值:
4096
佇列的大小。僅在
async=true
時使用。 eventTypes
-
選用
預設值:
["REJECTED", "ANONYMOUS_REJECTED", "UNAUTHORIZED", "COMPLETED", "ERROR"]
要記錄的事件類型。請參閱下方事件類型章節以了解類型選項。
muteRules
-
選用
預設值:無
定義不應記錄事件的情況(靜音)。可能的規則可以排除來自特定使用者、IP、路徑或請求參數的請求。請參閱下方靜音特定事件章節以了解靜音規則選項。
事件類型
可以使用 eventTypes
參數配置要記錄的事件類型。預設情況下,僅記錄最終事件類型 REJECTED
、ANONYMOUS_REJECTED
、UNAUTHORIZED
、COMPLETED
和 ERROR
。
以下是由框架觸發的事件類型
事件類型 | 用途 |
---|---|
|
使用者成功通過驗證 |
|
驗證請求被拒絕 |
|
請求以不明使用者身分繼續進行 |
|
來自不明使用者的請求被拒絕 |
|
授權成功 |
|
授權失敗 |
|
請求成功完成 |
|
由於錯誤,請求未被執行 |
靜音特定事件
配置參數 muteRules
可讓您針對特定事件靜音記錄。您可以指定多個規則和規則組合,這些規則將導致靜音。您可以根據請求類型、使用者名稱、集合名稱、路徑、請求參數或 IP 位址來靜音。
以下範例使用 muteRules
來針對三種類別的請求靜音稽核記錄:任何 SEARCH
請求、任何由使用者 johndoe
發出的請求,以及任何來自 IP 位址 192.168.0.10
的請求
{
"auditlogging":{
"class": "solr.SolrLogAuditLoggerPlugin",
"muteRules": [ "type:SEARCH", "user:johndoe", "ip:192.168.0.10" ]
}
}
靜音規則也可以是一個列表,在這種情況下,列表中的所有項目都必須為真才能發生靜音。下面的配置有三個靜音規則
{
"auditlogging":{
"class": "solr.SolrLogAuditLoggerPlugin",
"muteRules": [
"ip:192.168.0.10", (1)
[ "path:/admin/collections", "param:action=LIST" ], (2)
[ "path:/admin/collections", "param:collection=test" ] (3)
]
}
}
1 | 這將靜音來自客戶端 IP 192.168.0.10 的所有事件。 |
2 | 此規則將靜音 action=LIST 的集合 API 請求。 |
3 | 最後一條規則將靜音名為 test 的集合的集合 API 請求。 |
請注意,您可以如何混合單個字串規則與必須全部匹配的規則列表
靜音規則的選項有
-
type:<request-type>
:按名稱分類的請求類型:ADMIN
、SEARCH
、UPDATE
、STREAMING
或UNKNOWN
。 -
collection:<collection-name>
:按名稱分類的集合。 -
user:<userid>
:按使用者 ID 分類的使用者。 -
path:</path/to/handler>
:相對於/solr
的請求路徑,或對於相對於集合的搜尋或更新請求的路徑。路徑是前綴匹配,即/admin
也會靜音任何子路徑。 -
ip:<ip-address>
:IPv4 位址。 -
param:<param>=<value>
:請求參數。這很可能主要與path
規則結合使用,如上面的範例所示。
鏈接多個記錄器
使用 MultiDestinationAuditLogger
,可以在鏈中配置多個稽核記錄器外掛程式,以記錄到多個目標。
{
"auditlogging":{
"class" : "solr.MultiDestinationAuditLogger",
"plugins" : [
{ "class" : "solr.SolrLogAuditLoggerPlugin" },
{ "class" : "solr.MyOtherAuditPlugin",
"customParam" : "value"
}
]
}
}
請注意,記錄到替代目標需要使用自定義稽核記錄外掛程式定義。請參閱 AuditLoggerPlugin 的基礎類別的 Java 文件。
指標
稽核記錄外掛程式會記錄有關記錄請求的計數和時間的指標,以及非同步記錄器的佇列大小。指標鍵都記錄在 SECURITY
類別上,每個指標名稱都帶有 /auditlogging
的範圍和記錄器的類別名稱作為前綴,例如,SolrLogAuditLoggerPlugin
。個別指標是
-
count
:(meter)記錄寫入的稽核記錄的數量和速率。 -
errors
:(meter)記錄錯誤的數量和速率。 -
lost
:(meter)如果佇列已滿且blockAsync=false
,則記錄遺失的事件數量和速率。 -
requestTimes
:(timer)記錄稽核記錄效能的延遲和百分位數。 -
totalTime
:(counter)記錄記錄所花費的總時間。 -
queueCapacity
:(gauge)記錄非同步記錄佇列的最大大小。 -
queueSize
:(gauge)記錄目前在佇列中等待的事件數量。 -
queuedTime
:(timer)記錄事件在佇列中等待的時間量。將此值與requestTimes
指標相加,將顯示從事件到記錄完成的總時間。 -
async
:(gauge)說明此記錄器是否處於非同步模式。
如果您遇到非常高的請求速率並有一個較慢的稽核記錄器外掛程式,您可能會看到 queueSize 和 queuedTime 指標增加,並且可能會開始丟棄事件(由 lost 計數的增加顯示)。在這種情況下,您可能需要增加 numThreads 設定。 |