This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.7.11. 将日志转发到 Amazon CloudWatch
您可以将日志转发到 Amazon CloudWatch,这是由 Amazon Web Services (AWS) 托管的监控和日志存储服务。除了默认的 OpenShift Logging 管理的 Elasticsearch 日志存储外,您还可以将日志转发到 CloudWatch。
要配置日志转发到 CloudWatch,您必须创建一个 ClusterLogForwarder 自定义资源 (CR),其中包含 CloudWatch 的输出,以及使用输出的管道。
流程
创建一个
SecretYAML 文件,它使用aws_access_key_id和aws_secret_access_key字段来指定您的 base64 编码的 AWS 凭证。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 secret.例如:
oc apply -f cw-secret.yaml
$ oc apply -f cw-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建或编辑定义
ClusterLogForwarderCR 对象的 YAML 文件。在文件中,指定 secret 的名称。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
ClusterLogForwarderCR 的名称必须是instance。- 2
ClusterLogForwarderCR 的命名空间必须是openshift-logging。- 3
- 指定输出的名称。
- 4
- 指定
cloudwatch类型。 - 5
- 可选:指定如何对日志进行分组:
-
logType为每个日志类型创建日志组 -
namespaceName为每个应用程序命名空间创建一个日志组。它还会为基础架构和审计日志创建单独的日志组。 -
namespaceUUID为每个应用命名空间 UUID 创建一个新的日志组。它还会为基础架构和审计日志创建单独的日志组。
-
- 6
- 可选:指定一个字符串来替换日志组名称中的默认
infrastructureName前缀。 - 7
- 指定 AWS 区域。
- 8
- 指定包含 AWS 凭证的 secret 名称。
- 9
- 可选:指定管道的名称。
- 10
- 使用管道指定要转发的日志类型:
application、infrastructure或audit。 - 11
- 指定使用此管道转发日志时使用的输出名称。
创建 CR 对象。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
示例:在 Amazon CloudWatch 中使用 ClusterLogForwarder
在这里,您会看到 ClusterLogForwarder 自定义资源 (CR) 示例及其输出到 Amazon CloudWatch 的日志数据。
假设您正在运行名为 mycluster 的 OpenShift Container Platform 集群。以下命令返回集群的 infrastructureName,稍后您将用它来编写 aws 命令:
oc get Infrastructure/cluster -ojson | jq .status.infrastructureName
$ oc get Infrastructure/cluster -ojson | jq .status.infrastructureName
"mycluster-7977k"
要为本例生成日志数据,您可以在名为 app 的命名空间中运行 busybox pod。busybox pod 每隔三秒钟将消息写入 stdout:
您可以查找 busybox pod 运行的 app 命名空间的 UUID:
oc get ns/app -ojson | jq .metadata.uid
$ oc get ns/app -ojson | jq .metadata.uid
"794e1e1a-b9f5-4958-a190-e76a9b53d7bf"
在 ClusterLogForwarder 自定义资源 (CR) 中,您可以将 infrastructure、audit 和 application 日志类型配置为 all-logs 管道的输入。您还可以将此管道连接到 cw 输出,输出将日志转发到 us-east-2 区域的 CloudWatch 实例:
CloudWatch 中的每个地区都包含三个级别的对象:
日志组
日志流
- 日志事件
使用 ClusterLogForwarding CR 中的 groupBy: logType,inputRefs 中的三种日志类型会在 Amazon Cloudwatch 中生成三个日志组:
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.application"
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
每个日志组都包含日志流:
aws --output json logs describe-log-streams --log-group-name mycluster-7977k.application | jq .logStreams[].logStreamName
$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.application | jq .logStreams[].logStreamName
"kubernetes.var.log.containers.busybox_app_busybox-da085893053e20beddd6747acdbaf98e77c37718f85a7f6a4facf09ca195ad76.log"
aws --output json logs describe-log-streams --log-group-name mycluster-7977k.audit | jq .logStreams[].logStreamName
$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.audit | jq .logStreams[].logStreamName
"ip-10-0-131-228.us-east-2.compute.internal.k8s-audit.log"
"ip-10-0-131-228.us-east-2.compute.internal.linux-audit.log"
"ip-10-0-131-228.us-east-2.compute.internal.openshift-audit.log"
...
aws --output json logs describe-log-streams --log-group-name mycluster-7977k.infrastructure | jq .logStreams[].logStreamName
$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.infrastructure | jq .logStreams[].logStreamName
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-69f9fd9b58-zqzw5_openshift-oauth-apiserver_oauth-apiserver-453c5c4ee026fe20a6139ba6b1cdd1bed25989c905bf5ac5ca211b7cbb5c3d7b.log"
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-797774f7c5-lftrx_openshift-apiserver_openshift-apiserver-ce51532df7d4e4d5f21c4f4be05f6575b93196336be0027067fd7d93d70f66a4.log"
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-797774f7c5-lftrx_openshift-apiserver_openshift-apiserver-check-endpoints-82a9096b5931b5c3b1d6dc4b66113252da4a6472c9fff48623baee761911a9ef.log"
...
每个日志流都包含日志事件。要查看 busybox Pod 的日志事件,您可以从 application 日志组中指定其日志流:
示例:在日志组群名称中自定义前缀
在日志组名称中,您可以将默认的 infrastructureName 前缀 mycluster-7977k 替换为一个任意字符串,如 demo-group-prefix。要进行此更改,您需要更新 ClusterLogForwarding CR 中的 groupPrefix 字段:
cloudwatch:
groupBy: logType
groupPrefix: demo-group-prefix
region: us-east-2
cloudwatch:
groupBy: logType
groupPrefix: demo-group-prefix
region: us-east-2
groupPrefix 的值替换默认的 infrastructureName 前缀:
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"demo-group-prefix.application"
"demo-group-prefix.audit"
"demo-group-prefix.infrastructure"
示例:应用程序命名空间名称后命名日志组
对于集群中的每个应用程序命名空间,您可以在 CloudWatch 中创建日志组,其名称基于应用程序命名空间的名称。
如果您删除应用程序命名空间对象并创建名称相同的新对象,CloudWatch 会继续使用与以前相同的日志组。
如果您认为名称相同的连续应用程序命名空间对象相互等效,请使用本例中描述的方法。否则,如果您需要将生成的日志组相互区分,请参阅以下"为应用命名空间 UUID 注入日志组"部分。
要创建名称基于应用程序命名空间名称的应用程序日志组,您可以在 ClusterLogForwarder CR 中将 groupBy 字段的值设置为 namespaceName :
cloudwatch:
groupBy: namespaceName
region: us-east-2
cloudwatch:
groupBy: namespaceName
region: us-east-2
将 groupBy 设置为 namespaceName 只会影响应用程序日志组。它不会影响 audit 和 infrastructure 日志组。
在 Amazon Cloudwatch 中,命名空间名称显示在每个日志组名称的末尾。因为只有一个应用程序命名空间 "app",以下输出显示一个新的 mycluster-7977k.app 日志组,而不是 mycluster-7977k.application :
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.app"
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
如果本例中的集群包含多个应用命名空间,则输出中会显示多个日志组,每个命名空间对应一个日志组。
groupBy 字段仅影响应用日志组。它不会影响 audit 和 infrastructure 日志组。
示例:应用程序命名空间 UUID 后命名日志组
对于集群中的每个应用程序命名空间,您可以在 CloudWatch 中创建日志组,其名称是基于应用程序命名空间的 UUID。
如果您删除应用程序命名空间对象并创建新对象,CloudWatch 会创建一个新的日志组。
如果您考虑使用名称相同的连续应用程序命名空间对象,请使用本例中描述的方法。否则,请参阅前面的 "Example: Naming log groups for application namespace name" 部分。
要在应用程序命名空间 UUID 后命名日志组,您可以在 ClusterLogForwarder CR 中将 groupBy 字段的值设置为 namespaceUUID :
cloudwatch:
groupBy: namespaceUUID
region: us-east-2
cloudwatch:
groupBy: namespaceUUID
region: us-east-2
在 Amazon Cloudwatch 中,命名空间 UUID 出现在每个日志组名称的末尾。因为有一个应用程序命名空间 "app",以下输出显示一个新的 mycluster-7977k.794e1e1a-b9f5-4958-a190-e76a9b53d7bf 日志组,而不是 mycluster-7977k.application :
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.794e1e1a-b9f5-4958-a190-e76a9b53d7bf" // uid of the "app" namespace
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
groupBy 字段仅影响应用日志组。它不会影响 audit 和 infrastructure 日志组。