×

您可以收集审计日志,审计日志是一组与安全相关的按时间顺序排列的记录,记录了影响系统中各个用户、管理员或其他系统组件的活动序列。

例如,审计日志可以帮助您了解自动缩放请求的来源。当后端被用户应用程序发起的自动缩放请求过载,而您需要确定哪个应用程序有问题时,这是一个关键信息。

配置审计日志

您可以通过编辑 `KedaController` 自定义资源来配置自定义指标自动缩放器操作符的审计。日志被发送到卷上的审计日志文件中,该卷使用 `KedaController` CR 中的持久卷声明进行保护。

先决条件
  • 必须安装自定义指标自动缩放器操作符。

步骤
  1. 编辑 `KedaController` 自定义资源以添加 `auditConfig` 部分

    kind: KedaController
    apiVersion: keda.sh/v1alpha1
    metadata:
      name: keda
      namespace: keda
    spec:
    # ...
      metricsServer:
    # ...
        auditConfig:
          logFormat: "json" (1)
          logOutputVolumeClaim: "pvc-audit-log" (2)
          policy:
            rules: (3)
            - level: Metadata
            omitStages: "RequestReceived" (4)
            omitManagedFields: false (5)
          lifetime: (6)
            maxAge: "2"
            maxBackup: "1"
            maxSize: "50"
    1 指定审计日志的输出格式,`legacy` 或 `json`。
    2 指定用于存储日志数据的现有持久卷声明。所有到达 API 服务器的请求都记录到此持久卷声明中。如果留空此字段,则日志数据将发送到标准输出。
    3 指定应记录哪些事件以及它们应包含哪些数据
    • `None`:不记录事件。

    • `Metadata`:仅记录请求的元数据,例如用户、时间戳等。不记录请求文本和响应文本。这是默认值。

    • `Request`:仅记录元数据和请求文本,但不记录响应文本。此选项不适用于非资源请求。

    • `RequestResponse`:记录事件元数据、请求文本和响应文本。此选项不适用于非资源请求。

    4 指定不创建事件的阶段。
    5 指定是否省略从请求和响应正文中写入 API 审计日志的托管字段,`true` 表示省略字段,`false` 表示包含字段。
    6 指定审计日志的大小和生命周期。
    • `maxAge`:根据其文件名中编码的时间戳,保留审计日志文件的最大天数。

    • `maxBackup`:要保留的审计日志文件的最大数量。设置为 `0` 表示保留所有审计日志文件。

    • `maxSize`:审计日志文件在旋转之前达到的最大大小(兆字节)。

验证
  1. 直接查看审计日志文件

    1. 获取 `keda-metrics-apiserver-*` Pod 的名称

      oc get pod -n keda
      示例输出
      NAME                                                  READY   STATUS    RESTARTS   AGE
      custom-metrics-autoscaler-operator-5cb44cd75d-9v4lv   1/1     Running   0          8m20s
      keda-metrics-apiserver-65c7cc44fd-rrl4r               1/1     Running   0          2m55s
      keda-operator-776cbb6768-zpj5b                        1/1     Running   0          2m55s
    2. 使用类似以下的命令查看日志数据

      $ oc logs keda-metrics-apiserver-<hash>|grep -i metadata (1)
      1 可选:您可以使用 `grep` 命令指定要显示的日志级别:`Metadata`、`Request`、`RequestResponse`。

      例如

      $ oc logs keda-metrics-apiserver-65c7cc44fd-rrl4r|grep -i metadata
      示例输出
       ...
      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"4c81d41b-3dab-4675-90ce-20b87ce24013","stage":"ResponseComplete","requestURI":"/healthz","verb":"get","user":{"username":"system:anonymous","groups":["system:unauthenticated"]},"sourceIPs":["10.131.0.1"],"userAgent":"kube-probe/1.28","responseStatus":{"metadata":{},"code":200},"requestReceivedTimestamp":"2023-02-16T13:00:03.554567Z","stageTimestamp":"2023-02-16T13:00:03.555032Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}}
       ...
  2. 或者,您可以查看特定的日志

    1. 使用类似以下的命令登录到 `keda-metrics-apiserver-*` Pod

      $ oc rsh pod/keda-metrics-apiserver-<hash> -n keda

      例如

      $ oc rsh pod/keda-metrics-apiserver-65c7cc44fd-rrl4r -n keda
    2. 更改到 `/var/audit-policy/` 目录

      sh-4.4$ cd /var/audit-policy/
    3. 列出可用的日志

      sh-4.4$ ls
      示例输出
      log-2023.02.17-14:50  policy.yaml
    4. 根据需要查看日志

      sh-4.4$ cat <log_name>/<pvc_name>|grep -i <log_level> (1)
      1 可选:您可以使用 `grep` 命令指定要显示的日志级别:`Metadata`、`Request`、`RequestResponse`。

      例如

      sh-4.4$ cat log-2023.02.17-14:50/pvc-audit-log|grep -i Request
      示例输出
       ...
      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Request","auditID":"63e7f68c-04ec-4f4d-8749-bf1656572a41","stage":"ResponseComplete","requestURI":"/openapi/v2","verb":"get","user":{"username":"system:aggregator","groups":["system:authenticated"]},"sourceIPs":["10.128.0.1"],"responseStatus":{"metadata":{},"code":304},"requestReceivedTimestamp":"2023-02-17T13:12:55.035478Z","stageTimestamp":"2023-02-17T13:12:55.038346Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"system:discovery\" of ClusterRole \"system:discovery\" to Group \"system:authenticated\""}}
       ...