稽核日誌

Solr 具有記錄所有進入系統的 HTTP 請求稽核追蹤的能力。稽核記錄器是可插拔的,以適應任何可能的格式或記錄目的地。

稽核追蹤(也稱為稽核日誌)是與安全性相關的按時間順序記錄、記錄集和/或記錄的來源和目的地,提供文件證據,證明在任何時間影響特定操作、程序、事件或裝置的活動順序。
— 維基百科
https://en.wikipedia.org/wiki/Audit_trail

設定稽核日誌

稽核日誌是在 security.jsonauditlogging 索引鍵下設定的。

以下範例使用外掛程式預設值來設定同步稽核日誌到 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.SolrLogAuditLoggingPluginsolr.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 參數配置要記錄的事件類型。預設情況下,僅記錄最終事件類型 REJECTEDANONYMOUS_REJECTEDUNAUTHORIZEDCOMPLETEDERROR

以下是由框架觸發的事件類型

事件類型 用途

AUTHENTICATED

使用者成功通過驗證

REJECTED

驗證請求被拒絕

ANONYMOUS

請求以不明使用者身分繼續進行

ANONYMOUS_REJECTED

來自不明使用者的請求被拒絕

AUTHORIZED

授權成功

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>:按名稱分類的請求類型:ADMINSEARCHUPDATESTREAMINGUNKNOWN

  • 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)說明此記錄器是否處於非同步模式。

如果您遇到非常高的請求速率並有一個較慢的稽核記錄器外掛程式,您可能會看到 queueSizequeuedTime 指標增加,並且可能會開始丟棄事件(由 lost 計數的增加顯示)。在這種情況下,您可能需要增加 numThreads 設定。