Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

稽核記錄

Cassandra 中的稽核記錄會記錄每個傳入的 CQL 命令要求,以及對 Cassandra 節點的驗證 (成功/失敗登入)。目前,提供兩種實作方式。自訂記錄器可以實作並注入類別名稱,作為 cassandra.yaml 檔案中的參數。

  • BinAuditLogger:以二進位格式將事件記錄到檔案中的有效率方式 (社群建議的效能記錄器)

  • FileAuditLogger:使用 slf4j 記錄器將事件記錄到 audit/audit.log 檔案

稽核記錄擷取的內容

稽核記錄會擷取下列事件

  • 成功的登入嘗試以及失敗的登入嘗試

  • 嘗試執行或成功執行透過原生 CQL 協定執行的所有資料庫命令

限制

執行已準備好的陳述式會記錄客戶端在準備呼叫中提供的查詢,以及執行時間戳記和所有其他屬性 (請參閱下方)。已準備好的陳述式執行所繫結的實際值不會顯示在稽核記錄中。

稽核記錄記錄什麼

每個稽核記錄實作都能存取下列屬性,而對於預設的文字記錄器,這些欄位會以管線符號串接,以產生最終訊息。

  • user:使用者名稱(如果可用)

  • host:主機 IP,執行命令的位置

  • source ip address:啟動要求的來源 IP 位址

  • source port:啟動要求的來源埠號

  • timestamp:Unix 時間戳記

  • type:要求類型(SELECT、INSERT 等)

  • category - 要求類別(DDL、DML 等)

  • keyspace - 要求目標執行所在的鍵空間(如果適用)

  • scope - 表格/聚合名稱/函數名稱/觸發器名稱等,視情況而定

  • operation - 執行的 CQL 命令

如何設定

稽核記錄可以使用 cassandra.yaml 檔案設定。若要在一個節點上使用稽核記錄,請編輯該檔案或使用 nodetool 啟用並設定。

AuditLog 的 cassandra.yaml 設定

支援下列選項

  • enabled:此選項啟用/停用稽核記錄

  • logger:記錄器/自訂記錄器的類別名稱。

  • audit_logs_dir:稽核記錄目錄位置,如果未設定,則預設為 cassandra.logdir.auditcassandra.logdir
    /audit/

  • included_keyspaces:要包含在稽核記錄中的鍵空間清單(以逗號分隔),預設 - 包含所有鍵空間

  • excluded_keyspaces:要從稽核記錄中排除的鍵空間清單(以逗號分隔),預設 - 排除 systemsystem_schemasystem_virtual_schema 以外的所有鍵空間

  • included_categories:要包含在稽核記錄中的稽核記錄類別清單(以逗號分隔),預設 - 包含所有類別

  • excluded_categories:要從稽核記錄中排除的稽核記錄類別清單(以逗號分隔),預設 - 不排除任何類別

  • included_users:要包含在稽核記錄中的使用者清單(以逗號分隔),預設 - 包含所有使用者

  • excluded_users:要從稽核記錄中排除的使用者清單(以逗號分隔),預設 - 不排除任何使用者

可用類別清單:QUERY、DML、DDL、DCL、OTHER、AUTH、ERROR、PREPARE

啟用 AuditLog 的 NodeTool 命令

nodetool enableauditlog 命令會使用 cassandra.yaml 檔案預設值啟用 AuditLog。可以使用此 nodetool 命令的選項覆寫這些預設值。

nodetool enableauditlog

選項

--excluded-categories

要從稽核記錄中排除的稽核記錄類別清單,以逗號分隔。如果未設定,將使用 cassandra.yaml 中的值

--excluded-keyspaces

要從稽核記錄中排除的鍵空間清單,以逗號分隔。如果未設定,將使用 cassandra.yaml 中的值。請記住,systemsystem_schemasystem_virtual_schema 預設會被排除,如果您透過 nodetool 覆寫此選項,請記得將這些鍵空間加回去,如果您不希望它們出現在稽核記錄中

--excluded-users

要從稽核記錄中排除的使用者清單,以逗號分隔。如果未設定,將使用 cassandra.yaml 中的值

--included-categories

要包含在稽核記錄中的稽核記錄類別清單,以逗號分隔。如果未設定,將使用 cassandra.yaml 中的值

--included-keyspaces

要包含在稽核記錄中的鍵空間清單,以逗號分隔。如果未設定,將使用 cassandra.yaml 中的值

--included-users

要包含在稽核記錄中的使用者清單,以逗號分隔。如果未設定,將使用 cassandra.yaml 中的值

--logger

要使用於稽核記錄的記錄器名稱。預設為 BinAuditLogger。如果未設定,將使用 cassandra.yaml 中的值

停用稽核記錄的 NodeTool 指令

nodetool disableauditlog 指令會停用稽核記錄。

nodetool disableuditlog

重新載入稽核記錄篩選器的 NodeTool 指令

nodetool enableauditlog 指令可用於重新載入稽核記錄篩選器,使用預設值或先前的 loggername 和更新的篩選器

nodetool enableauditlog --loggername <Default/ existing loggerName> --included-keyspaces <New Filter values>

檢視稽核記錄檔案的內容

auditlogviewer 用於以人類可讀文字格式檢視稽核記錄二進位記錄檔的內容。

auditlogviewer <path1> [<path2>...<pathN>] [options]

選項

-f,--follow
在到達記錄檔尾端時,繼續無限期

等待更多記錄

-r,--roll_cycle
記錄檔被捲動的頻率。可能是

Chronicle 正確解析檔案名稱所必需的。(MINUTELY、HOURLY、DAILY)。預設為 HOURLY。

-h,--help

顯示此說明訊息

例如,若要將稽核記錄檔的內容傾印到主控台

auditlogviewer /logs/cassandra/audit

結果為

LogMessage: user:anonymous|host:localhost/X.X.X.X|source:/X.X.X.X|port:60878|timestamp:1521158923615|type:USE_KS|category:DDL|ks:dev1|operation:USE "dev1"

設定 BinAuditLogger

若要在 AuditLogging 中使用 BinAuditLogger 作為記錄器,請在 audit_logging_options 區段中的 cassandra.yaml 檔案中將記錄器設定為 BinAuditLoggerBinAuditLogger 可使用其在 cassandra.yaml 中的高階選項進一步設定。

BinAuditLogger 的高階選項

block

指出稽核記錄是否應在落後時封鎖,或應捨棄稽核記錄。預設設定為 true,如此一來稽核記錄就不會遺失

max_queue_weight

在封鎖或捨棄記錄之前,等待寫入稽核記錄檔的記錄在記憶體佇列中的最大權重。預設設定為 256 * 1024 * 1024

max_log_size

在刪除最舊的檔案之前,保留在磁碟上的已轉動檔案的最大大小。預設設定為 16L * 1024L * 1024L * 1024L

roll_cycle

稽核記錄區段的轉動頻率,以供潛在回收。可用的選項有:MINUTELY、HOURLY、DAILY、LARGE_DAILY、XLARGE_DAILY、HUGE_DAILY。如需更多選項,請參閱:net.openhft.chronicle.queue.RollCycles。預設設定為 "HOURLY"

設定 FileAuditLogger

若要在 AuditLogging 中使用 FileAuditLogger 作為記錄器,請在 cassandra.yaml 檔案中設定類別名稱,並設定稽核記錄事件以透過個別記錄檔,而非 system.log 流動。

<!-- Audit Logging (FileAuditLogger) rolling file appender to audit.log -->
<appender name="AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>${cassandra.logdir}/audit/audit.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <!-- rollover daily -->
    <fileNamePattern>${cassandra.logdir}/audit/audit.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
    <!-- each file should be at most 50MB, keep 30 days worth of history, but at most 5GB -->
    <maxFileSize>50MB</maxFileSize>
    <maxHistory>30</maxHistory>
    <totalSizeCap>5GB</totalSizeCap>
  </rollingPolicy>
  <encoder>
    <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern>
  </encoder>
</appender>

<!-- Audit Logging additivity to redirect audt logging events to audit/audit.log -->
<logger name="org.apache.cassandra.audit" additivity="false" level="INFO">
    <appender-ref ref="AUDIT"/>
</logger>