Apache > ZooKeeper
 

ZooKeeper 稽核記錄

ZooKeeper 稽核記錄

Apache ZooKeeper 支援 3.6.0 版的稽核記錄。稽核記錄預設為停用。若要啟用稽核記錄,請在 conf/zoo.cfg 中設定 audit.enable=true。稽核記錄並非記錄在所有 ZooKeeper 伺服器上,而僅記錄在客戶端連線的伺服器上,如下圖所示。

Audit Logs

稽核記錄會擷取已選取要稽核的作業的詳細資訊。稽核資訊會寫成一組下列金鑰的值對

金鑰
session 客戶端會話 ID
user 與客戶端會話相關聯的使用者清單(以逗號分隔)。有關此項目的詳細資訊,請參閱 稽核記錄中誰被視為使用者?
ip 客戶端 IP 位址
operation 已選取要稽核的作業之一。可能的值為 (serverStart、serverStop、create、delete、setData、setAcl、multiOperation、reconfig、ephemeralZNodeDeleteOnSessionClose)
znode znode 的路徑
znode 類型 建立作業中 znode 的類型
acl znode ACL 的字串表示,例如 cdrwa(建立、刪除、讀取、寫入、管理)。這僅記錄於 setAcl 操作
結果 操作的結果。可能的結果包括(成功/失敗/已呼叫)。「已呼叫」結果用於 serverStop 操作,因為停止會在確保伺服器實際停止之前記錄。

以下是所有操作的範例稽核記錄,其中用戶端從 192.168.1.2 連線,用戶端主體為 zkcli@HADOOP.COM,伺服器主體為 zookeeper/192.168.1.3@HADOOP.COM

user=zookeeper/192.168.1.3 operation=serverStart   result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=create    znode=/a    znode_type=persistent  result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=create    znode=/a    znode_type=persistent  result=failure
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=setData   znode=/a    result=failure
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=setData   znode=/a    result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=setAcl    znode=/a    acl=world:anyone:cdrwa  result=failure
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=setAcl    znode=/a    acl=world:anyone:cdrwa  result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=create    znode=/b    znode_type=persistent  result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=setData   znode=/b    result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=delete    znode=/b    result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=multiOperation    result=failure
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=delete    znode=/a    result=failure
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=delete    znode=/a    result=success
session=0x19344730001   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=create   znode=/ephemral znode_type=ephemral result=success
session=0x19344730001   user=zookeeper/192.168.1.3   operation=ephemeralZNodeDeletionOnSessionCloseOrExpire  znode=/ephemral result=success
session=0x19344730000   user=192.168.1.2,zkcli@HADOOP.COM  ip=192.168.1.2    operation=reconfig  znode=/zookeeper/config result=success
user=zookeeper/192.168.1.3 operation=serverStop    result=invoked

ZooKeeper 稽核記錄設定

稽核記錄預設為停用。若要啟用稽核記錄,請在 conf/zoo.cfg 中設定 audit.enable=true。稽核記錄使用 logback 進行。以下是 conf/logback.xml 中稽核記錄的預設 logback 設定

<!--
  zk audit logging
-->
<!--property name="zookeeper.auditlog.file" value="zookeeper_audit.log" />
<property name="zookeeper.auditlog.threshold" value="INFO" />
<property name="audit.logger" value="INFO, RFAAUDIT" />

<appender name="RFAAUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <File>${zookeeper.log.dir}/${zookeeper.auditlog.file}</File>
  <encoder>
    <pattern>%d{ISO8601} %p %c{2}: %m%n</pattern>
  </encoder>
  <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>${zookeeper.auditlog.threshold}</level>
  </filter>
  <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
    <maxIndex>10</maxIndex>
    <FileNamePattern>${zookeeper.log.dir}/${zookeeper.auditlog.file}.%i</FileNamePattern>
  </rollingPolicy>
  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    <MaxFileSize>10MB</MaxFileSize>
  </triggeringPolicy>
</appender>

<logger name="org.apache.zookeeper.audit.Slf4jAuditLogger" additivity="false" level="${audit.logger}">
  <appender-ref ref="RFAAUDIT" />
</logger-->

變更上述設定以自訂稽核記錄檔、備份數量、最大檔案大小、自訂稽核記錄器等。

稽核記錄中誰被視為使用者?

預設只有四個驗證提供者

使用者是根據已設定的驗證提供者來決定

自訂驗證提供者可以覆寫 org.apache.zookeeper.server.auth.AuthenticationProvider.getUserName(String id) 以提供使用者名稱。如果驗證提供者沒有覆寫此方法,則儲存在 org.apache.zookeeper.data.Id.id 中的任何內容都會被視為使用者。通常只有使用者名稱會儲存在此欄位中,但自訂驗證提供者可以自行決定要儲存什麼內容。對於稽核記錄,org.apache.zookeeper.data.Id.id 的值會被視為使用者。

在 ZooKeeper 伺服器中,並非所有操作都是由用戶端執行,有些操作是由伺服器本身執行。例如,當用戶端關閉工作階段時,暫時性 znode 會由伺服器刪除。這些刪除動作並非由用戶端直接執行,而是由伺服器本身執行,這些動作稱為系統操作。對於這些系統操作,與 ZooKeeper 伺服器關聯的使用者會在稽核記錄這些操作時被視為使用者。例如,如果在 ZooKeeper 伺服器主體中為 zookeeper/hadoop.hadoop.com@HADOOP.COM,則此主體會成為系統使用者,而且所有系統操作都會以這個使用者名稱記錄。

user=zookeeper/hadoop.hadoop.com@HADOOP.COM operation=serverStart result=success

如果沒有與 ZooKeeper 伺服器關聯的使用者,則會將啟動 ZooKeeper 伺服器的使用者視為使用者。例如,如果伺服器是由 root 啟動,則 root 會被視為系統使用者

user=root operation=serverStart result=success

單一用戶端可以將多個驗證機制附加到工作階段,在此情況下,所有驗證的機制都會被視為使用者,並會以逗號分隔清單顯示。例如,如果用戶端使用主體 zkcli@HADOOP.COM 和 IP 127.0.0.1 進行驗證,則建立 znode 稽核記錄會如下所示

session=0x10c0bcb0000 user=zkcli@HADOOP.COM,127.0.0.1 ip=127.0.0.1 operation=create znode=/a result=success