3.7. 收集审计日志
您可以收集审计日志,它们是与安全相关的按时间排序的记录,记录各个用户、管理员或其他系统组件影响系统的一系列活动。
例如,审计日志可帮助您了解自动扩展请求来自哪里。当后端因为用户应用程序发出的请求造成过载时,这个信息非常重要,您需要确定哪个是有问题的应用程序。
3.7.1. 配置审计日志记录
您可以通过编辑 KedaController
自定义资源来为自定义 Metrics Autoscaler Operator 配置审计。日志通过 KedaController
CR 中的持久性卷声明发送到卷的审计日志文件。
先决条件
- 必须安装 Custom Metrics Autoscaler Operator。
流程
编辑
KedaController
自定义资源以添加auditConfig
小节:kind: KedaController apiVersion: keda.sh/v1alpha1 metadata: name: keda namespace: openshift-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 服务器的请求都会记录到此持久性卷声明。如果将此字段留空,日志数据将发送到 stdout。
- 3
- 指定应记录哪些事件及其应包含哪些数据:
-
None
:不记录事件。 -
Metadata
:仅记录请求的元数据,如用户、时间戳等。不要记录请求文本和响应文本。这是默认值。 -
Request
:仅记录元数据和请求文本,而不记录响应文本。这个选项不适用于非资源请求。 -
RequestResponse
:日志事件元数据、请求文本和响应文本。这个选项不适用于非资源请求。
-
- 4
- 指定没有创建事件的阶段。
- 5
- 指定是否省略请求的 managed 字段,并从写入 API 审计日志的响应正文,可以是
true
来省略字段,或false
包含字段。 - 6
- 指定审计日志的大小和生命周期。
-
MaxAge
:根据文件名中编码的时间戳,保留审计日志文件的最大天数。 -
maxBackup
:要保留的审计日志文件的最大数量。设置为0
以保留所有审计日志文件。 -
maxsize
:在轮转审计日志文件前以 MB 为单位的最大大小。
-
验证
直接查看审计日志文件:
获取
keda-metrics-apiserver the pod
的名称:oc get pod -n openshift-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
使用类似如下的命令查看日志数据:
$ 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":""}} ...
另外,您可以查看特定的日志:
使用类似如下的命令登录到
keda-metrics-apiserver the
pod:$ oc rsh pod/keda-metrics-apiserver-<hash> -n openshift-keda
例如:
$ oc rsh pod/keda-metrics-apiserver-65c7cc44fd-rrl4r -n openshift-keda
进入
/var/audit-policy/
目录:sh-4.4$ cd /var/audit-policy/
列出可用的日志:
sh-4.4$ ls
输出示例
log-2023.02.17-14:50 policy.yaml
根据需要查看日志:
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\""}} ...