配置日志记录
第 1 章 配置日志转发 复制链接链接已复制到粘贴板!
ClusterLogForwarder (CLF)允许用户配置将日志转发到各种目的地。它提供从不同来源选择日志消息的灵活方法,通过管道发送或过滤它们,并将它们转发到一个或多个输出。
ClusterLogForwarder 的主要功能
- 使用输入选择日志消息
- 使用输出将日志转发到外部目的地
- 使用过滤器过滤、转换和丢弃日志消息
- 定义日志转发管道连接输入、过滤器和输出
1.1. 设置日志集合 复制链接链接已复制到粘贴板!
此 Cluster Logging 发行版本要求管理员为与 ClusterLogForwarder 关联的服务帐户明确授予日志收集权限。在以前的版本中,不需要传统的日志场景由 ClusterLogging 以及一个可选的 ClusterLogForwarder.logging.openshift.io 资源组成。
Red Hat OpenShift Logging Operator 提供 collect-audit-logs、collect-application-logs 和 collect-infrastructure-logs 集群角色,使收集器能够分别收集审计日志、应用程序日志和基础架构日志。
通过将所需的集群角色绑定到服务帐户来设置日志收集。
1.1.1. 传统服务帐户 复制链接链接已复制到粘贴板!
要使用现有的旧服务帐户 logcollector,请创建以下 ClusterRoleBinding :
oc adm policy add-cluster-role-to-user collect-application-logs system:serviceaccount:openshift-logging:logcollector
$ oc adm policy add-cluster-role-to-user collect-application-logs system:serviceaccount:openshift-logging:logcollector
oc adm policy add-cluster-role-to-user collect-infrastructure-logs system:serviceaccount:openshift-logging:logcollector
$ oc adm policy add-cluster-role-to-user collect-infrastructure-logs system:serviceaccount:openshift-logging:logcollector
另外,如果收集审计日志,请创建以下 ClusterRoleBinding :
oc adm policy add-cluster-role-to-user collect-audit-logs system:serviceaccount:openshift-logging:logcollector
$ oc adm policy add-cluster-role-to-user collect-audit-logs system:serviceaccount:openshift-logging:logcollector
1.1.2. 创建服务帐户 复制链接链接已复制到粘贴板!
先决条件
-
Red Hat OpenShift Logging Operator 安装在
openshift-logging命名空间中。 - 有管理员权限。
步骤
- 为收集器创建服务帐户。如果要将日志写入需要令牌进行身份验证的存储,则必须在服务帐户中包含令牌。
将适当的集群角色绑定到服务帐户:
绑定命令示例
oc adm policy add-cluster-role-to-user <cluster_role_name> system:serviceaccount:<namespace_name>:<service_account_name>
$ oc adm policy add-cluster-role-to-user <cluster_role_name> system:serviceaccount:<namespace_name>:<service_account_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.1.2.1. 服务帐户的集群角色绑定 复制链接链接已复制到粘贴板!
role_binding.yaml 文件将 ClusterLogging operator 的 ClusterRole 绑定到特定的 ServiceAccount,允许其在集群范围管理 Kubernetes 资源。
- 1
- roleRef:引用绑定应用到的 ClusterRole。
- 2
- apiGroup :指示 RBAC API 组,指定 ClusterRole 是 Kubernetes 的 RBAC 系统的一部分。
- 3
- kind:指定引用的角色是一个 ClusterRole,它将应用集群范围的。
- 4
- name :绑定到 ServiceAccount 的 ClusterRole 名称,这里是 cluster-logging-operator。
- 5
- subjects :定义从 ClusterRole 授予权限的实体(用户或服务帐户)。
- 6
- kind:指定主体是一个 ServiceAccount。
- 7
- Name :被授予权限的 ServiceAccount 的名称。
- 8
- namespace :指示 ServiceAccount 所在的命名空间。
1.1.2.2. 编写应用程序日志 复制链接链接已复制到粘贴板!
write-application-logs-clusterrole.yaml 文件定义了一个 ClusterRole,它授予将应用程序日志写入 Loki 日志记录应用程序的权限。
- 1
- rules:指定此 ClusterRole 授予的权限。
- 2
- apiGroups :请参阅与 Loki 日志记录系统相关的 API 组 loki.grafana.com。
- 3
- loki.grafana.com :用于管理 Loki 相关资源的 API 组。
- 4
- resources :ClusterRole 授予权限的用户的资源类型。
- 5
- application: 引用 Loki 日志记录系统中的应用程序资源。
- 6
- resourceNames:指定此角色可以管理的资源的名称。
- 7
- logs :引用可以创建的日志资源。
- 8
- verbs :资源允许的操作。
- 9
- create: 授予在 Loki 系统中创建新日志的权限。
1.1.2.3. 编写审计日志 复制链接链接已复制到粘贴板!
write-audit-logs-clusterrole.yaml 文件定义了一个 ClusterRole,它授予在 Loki 日志记录系统中创建审计日志的权限。
1.1.2.4. 编写基础架构日志 复制链接链接已复制到粘贴板!
write-infrastructure-logs-clusterrole.yaml 文件定义了一个 ClusterRole,它授予在 Loki 日志记录系统中创建基础架构日志的权限。
YAML 示例
1.1.2.5. ClusterLogForwarder 编辑器角色 复制链接链接已复制到粘贴板!
clusterlogforwarder-editor-role.yaml 文件定义了一个 ClusterRole,允许用户在 OpenShift 中管理 ClusterLogForwarders。
- 1
- rules:指定此 ClusterRole 授予的权限。
- 2
- apiGroups :请参阅特定于 OpenShift 的 API 组
- 3
- obervability.openshift.io :用于管理可观察性资源的 API 组,如 logging。
- 4
- resources:指定此角色可以管理的资源。
- 5
- clusterlogforwarders :请参阅 OpenShift 中的日志转发资源。
- 6
- verbs :指定 ClusterLogForwarders 上允许的操作。
- 7
- create: Grants 权限来创建新的 ClusterLogForwarders。
- 8
- delete: Grants 权限删除现有 ClusterLogForwarders。
- 9
- get :授予检索有关特定 ClusterLogForwarders 的信息的权限。
- 10
- list :允许列出所有 ClusterLogForwarders。
- 11
- patch :授予部分修改 ClusterLogForwarders 的权限。
- 12
- update: 授予更新现有 ClusterLogForwarders 的权限。
- 13
- watch :授予监控 ClusterLogForwarders 的更改的权限。
1.2. 修改收集器中的日志级别 复制链接链接已复制到粘贴板!
要修改收集器中的日志级别,您可以将 observability.openshift.io/log-level 注解设置为 trace、debug、info、warn、error 和 off。
日志级别注解示例
1.3. 管理 Operator 复制链接链接已复制到粘贴板!
ClusterLogForwarder 资源有一个 managementState 字段,用于控制 Operator 是否主动管理其资源或保留其非受管状态:
- 受管
- (默认)Operator 将驱动日志记录资源以匹配 CLF spec 中所需状态。
- Unmanaged
- Operator 不执行与日志记录组件相关的任何操作。
这样,管理员可以通过将 managementState 设置为 Unmanaged 来临时暂停日志转发。
1.4. ClusterLogForwarder 的结构 复制链接链接已复制到粘贴板!
CLF 有一个 spec 部分,其中包含以下关键组件:
- 输入
-
选择要转发的日志消息。来自集群不同部分的内置输入类型
application,infrastructure和audit。您还可以定义自定义输入。 - 输出
- 定义要将日志转发到的目的地。每个输出都有一个唯一的名称和特定于类型的配置。
- Pipelines
- 定义通过过滤器到输出的路径日志从输入中获取。管道具有唯一名称,它由输入、输出和过滤器名称列表组成。
- 过滤器
- 在管道中转换或丢弃日志消息。用户可以定义匹配某些日志字段并丢弃或修改消息的过滤器。过滤器按管道中指定的顺序应用。
1.4.1. 输入 复制链接链接已复制到粘贴板!
输入在 spec.inputs 下的阵列中配置。有三个内置输入类型:
- application
- 从所有应用程序容器中选择日志,不包括基础架构命名空间中的日志。
- infrastructure
从节点以及在以下命名空间中运行的基础架构组件中选择日志:
-
default -
kube -
openshift -
包含
kube-或openshift-前缀
-
- audit
- 从 OpenShift API 服务器审计日志、Kubernetes API 服务器审计日志、ovn 审计日志和 auditd 的节点审计日志中选择日志。
用户可以定义类型 application 的自定义输入,它们从特定的命名空间选择日志或使用 pod 标签。
1.4.2. 输出 复制链接链接已复制到粘贴板!
输出在 spec.outputs 下的一个数组中配置。每个输出都必须具有唯一的名称和类型。支持的类型有:
- azureMonitor
- 将日志转发到 Azure Monitor。
- cloudwatch
- 将日志转发到 AWS CloudWatch。
- elasticsearch
- 将日志转发到外部 Elasticsearch 实例。
- googleCloudLogging
- 将日志转发到 Google Cloud Logging。
- http
- 将日志转发到通用 HTTP 端点。
- kafka
- 将日志转发到 Kafka 代理。
- loki
- 将日志转发到 Loki 日志记录后端。
- lokistack
- 将日志转发到 Loki 和 Web 代理与 OpenShift Container Platform 身份验证集成支持的日志组合。LokiStack 的代理使用 OpenShift Container Platform 身份验证来强制实施多租户
- otlp
- 使用 OpenTelemetry 协议转发日志。
- splunk
- 将日志转发到 Splunk。
- syslog
- 将日志转发到外部 syslog 服务器。
每种输出类型都有自己的配置字段。
1.4.3. 配置 OTLP 输出 复制链接链接已复制到粘贴板!
集群管理员可以使用 OpenTelemetry 协议(OTLP)输出来收集日志并将其转发到 OTLP 接收器。OTLP 输出使用 OpenTelemetry Observability 框架定义的规格使用 JSON 编码通过 HTTP 发送数据。
OpenTelemetry 协议(OTLP)输出日志转发器只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
流程
创建或编辑
ClusterLogForwarder自定义资源(CR),通过添加以下注解来启用使用 OTLP 的转发:ClusterLogForwarderCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OTLP 输出使用 OpenTelemetry 数据模型,它与其他输出类型的 ViaQ 数据模型不同。它遵循 OpenTelemetry Observability 框架定义的 OpenTelemetry Semantic Conventions。
1.4.4. Pipelines 复制链接链接已复制到粘贴板!
管道在 spec.pipelines 下的数组中配置。每个管道都必须具有唯一的名称,它由以下组成:
- inputRefs
- 日志应转发到此管道的输入名称。
- outputRefs
- 将日志发送到的输出名称。
- filterRefs
- (可选)要应用的过滤器名称。
filterRefs 的顺序很重要,因为它们会按顺序应用。较早的过滤器可以丢弃不会被后续过滤器处理的消息。
1.4.5. 过滤器 复制链接链接已复制到粘贴板!
过滤器在 spec.filters 下的数组中配置。它们可以根据结构化字段的值匹配传入的日志消息,并修改或丢弃它们。
管理员可以配置以下过滤器:
1.4.6. 启用多行异常检测 复制链接链接已复制到粘贴板!
启用容器日志的多行错误检测。
启用此功能可能会对性能有影响,可能需要额外的计算资源或备用日志记录解决方案。
日志解析器通常会错误地将同一个例外中的不同的行识别为不同的例外。这会导致额外的日志条目,以及要跟踪的信息的不完整或不正确。
java 异常示例
java.lang.NullPointerException: Cannot invoke "String.toString()" because "<param1>" is null
at testjava.Main.handle(Main.java:47)
at testjava.Main.printMe(Main.java:19)
at testjava.Main.main(Main.java:10)
java.lang.NullPointerException: Cannot invoke "String.toString()" because "<param1>" is null
at testjava.Main.handle(Main.java:47)
at testjava.Main.printMe(Main.java:19)
at testjava.Main.main(Main.java:10)
-
要启用日志记录来检测多行异常并将其重新编译到单个日志条目中,请确保
ClusterLogForwarder自定义资源(CR)包含.spec.filters下的detectMultilineErrors字段。
ClusterLogForwarder CR 示例
1.4.6.1. 详情 复制链接链接已复制到粘贴板!
当日志消息作为一系列针对一个例外的信息出现时,会将它们合并到一个统一的日志记录中。第一个日志消息的内容被替换为序列中所有消息字段的连接内容。
收集器支持以下语言:
- Java
- JS
- Ruby
- Python
- Golang
- PHP
- Dart
1.4.7. 通过 HTTP 转发日志 复制链接链接已复制到粘贴板!
要启用通过 HTTP 转发日志,在 ClusterLogForwarder 自定义资源(CR)中指定 http 作为输出类型。
1.4.8. 使用 syslog 协议转发日志 复制链接链接已复制到粘贴板!
您可以使用 syslog RFC3164 或 RFC5424 协议将日志副本发送到配置为接受该协议的外部日志聚合器,而非默认的 Elasticsearch 日志存储。您需要配置外部日志聚合器(如 syslog 服务器)来接收来自 OpenShift Container Platform 的日志。
要使用 syslog 协议配置日志转,,请创建一个 ClusterLogForwarder 自定义资源(CR),并将一个或多个输出输出到使用这些输出的 syslog 服务器和管道。syslog 输出可以使用 UDP、TCP 或 TLS 连接。
先决条件
- 您必须有配置为使用指定协议或格式接收日志数据的日志服务器。
流程
创建或编辑定义
ClusterLogForwarderCR 对象的 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定输出的名称。
- 2
- 可选:指定 syslog 消息标头的
APP-NAME部分的值。该值必须符合 Syslog 协议。该值可以是由字段路径后跟||组成的静态和动态值的组合,然后是另一个字段路径或静态值。最终值的最大长度为 48 个字符。您需要使用一个大括号将动态值括起,值必须后跟一个用||分隔的静态回退值。静态值只能包含字母数字字符以及短划线、下划线、点和正斜杠。示例值:<value1>-{.<value2>||"none"}。 - 3
- 可选:指定 syslog-msg 标头的
Facility部分的值。 - 4
- 可选:指定 syslog-msg 标头的
MSGID部分的值。该值可以是由字段路径后跟||组成的静态和动态值的组合,然后是另一个字段路径或静态值。最终值的最大长度为 32 个字符。您需要使用一个大括号将动态值括起,值必须后跟一个用||分隔的静态回退值。静态值只能包含字母数字字符以及短划线、下划线、点和正斜杠。示例值:<value1>-{.<value2>||"none"}。 - 5
- 可选:指定用作有效负载的记录字段。
payloadKey值必须是单一字段路径,包括在一个大括号{}中。示例:{.<value>}。 - 6
- 可选:指定 syslog 消息标头的
PROCID部分的值。该值必须符合 Syslog 协议。该值可以是由字段路径后跟||组成的静态和动态值的组合,然后是另一个字段路径或静态值。最终值的最大长度为 48 个字符。您需要使用一个大括号将动态值括起,值必须后跟一个用||分隔的静态回退值。静态值只能包含字母数字字符以及短划线、下划线、点和正斜杠。示例值:<value1>-{.<value2>||"none"}。 - 7
- 可选:设置生成的消息符合的 RFC。该值可以是
RFC3164或RFC5424。 - 8
- 可选:为消息设置严重性级别。如需更多信息,请参阅 Syslog 协议。
- 9
- 可选:为日志转发设置交付模式。该值可以是
AtLeastOnce,也可以是AtMostOnce。 - 10
- 使用方案指定绝对 URL。有效方案是:
tcp、tls和udp。例如:tls://syslog-receiver.example.com:6514。 - 11
- 指定控制传输层安全(TLS)客户端连接的选项的设置。
- 12
- 使用管道指定要转发的日志类型:
application、infrastructure或audit。 - 13
- 为管道指定一个名称。
- 14
- 服务帐户的名称。
创建 CR 对象:
oc create -f <filename>.yaml
$ oc create -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.8.1. 在消息输出中添加日志消息 复制链接链接已复制到粘贴板!
您可以通过将 enrichment 字段添加到 ClusterLogForwarder 自定义资源(CR),将 namespace_name、pod_name 和 container_name 元素添加到记录的 message 字段中。
这个配置与 RFC3164 和 RFC5424 兼容。
带有 enrichment: None 的 syslog 信息输出。
2025-03-03T11:48:01+00:00 example-worker-x syslogsyslogserverd846bb9b: {...}
2025-03-03T11:48:01+00:00 example-worker-x syslogsyslogserverd846bb9b: {...}
带有 enrichment: KubernetesMinimal 的 syslog 信息输出。
2025-03-03T11:48:01+00:00 example-worker-x syslogsyslogserverd846bb9b: namespace_name=cakephp-project container_name=mysql pod_name=mysql-1-wr96h,message: {...}
2025-03-03T11:48:01+00:00 example-worker-x syslogsyslogserverd846bb9b: namespace_name=cakephp-project container_name=mysql pod_name=mysql-1-wr96h,message: {...}
1.5. 从启用了 STS 的集群将日志转发到 Amazon CloudWatch 复制链接链接已复制到粘贴板!
Amazon CloudWatch 是一个服务,可帮助管理员在 Amazon Web Services (AWS)上观察和监控资源和应用程序。您可以使用 AWS 的 Identity and Access Management (IAM)角色为服务帐户(IRSA)安全地将日志转发到 CloudWatch,它使用 AWS 安全令牌服务(STS)。
使用 CloudWatch 进行身份验证可以正常工作:
- 日志收集器通过将服务帐户令牌提供给 AWS 中的 OpenID Connect (OIDC)供应商,从安全令牌服务(STS)请求临时 AWS 凭证。
- AWS 验证令牌。根据信任策略,AWS 会发出简短的临时凭证,包括访问密钥 ID、secret 访问密钥和会话令牌,供日志收集器使用。
在启用了 STS 的集群上,如 Red Hat OpenShift Service on AWS,AWS 角色被预先配置了所需的信任策略。这允许服务帐户假定角色。因此,您可以使用 IAM 角色的 STS 为 AWS 创建 secret。然后,您可以创建或更新使用 secret 将日志转发到 CloudWatch 输出的 ClusterLogForwarder 自定义资源(CR)。如果角色预先配置了,请按照以下步骤创建 secret 和 ClusterLogForwarder CR:
- 使用现有 AWS 角色为 CloudWatch 创建 secret
- 从启用了 STS 的集群将日志转发到 Amazon CloudWatch
如果您没有使用信任策略预先配置的 AWS IAM 角色,您必须首先使用所需的信任策略创建角色。完成以下步骤,创建一个 secret、ClusterLogForwarder CR 和角色。
1.5.1. 创建 AWS IAM 角色 复制链接链接已复制到粘贴板!
创建一个 Amazon Web Services (AWS) IAM 角色,您的服务帐户可以假定该角色安全访问 AWS 资源。
以下流程演示了如何使用 AWS CLI 创建 AWS IAM 角色。您还可以使用 Cloud Credential Operator (CCO)实用程序 ccoctl。使用 ccoctl 实用程序在 IAM 角色策略中创建多个字段,ClusterLogForwarder 自定义资源(CR)不需要。CR 会忽略这些额外字段。但是,ccoctl 工具为配置 IAM 角色提供了一种便捷的方法。如需更多信息,请参阅组件 的带有简短凭证的手动模式。
先决条件
- 您可以访问为 AWS 启用并配置了安全令牌服务(STS)的 Red Hat OpenShift Logging 集群。
- 具有 AWS 帐户的管理员访问权限。
- 已安装 AWS CLI。
流程
创建一个 IAM 策略,向 CloudWatch 授予权限。
创建包含以下内容的文件,如
cw-iam-role-policy.json:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,根据前面的策略定义创建 IAM 策略:
aws iam create-policy \ --policy-name cluster-logging-allow \ --policy-document file://cw-iam-role-policy.jsonaws iam create-policy \ --policy-name cluster-logging-allow \ --policy-document file://cw-iam-role-policy.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意创建的策略的
Arn值。
创建信任策略以允许日志记录服务帐户假定 IAM 角色:
运行以下命令,根据之前定义的信任策略创建一个 IAM 角色:
aws iam create-role --role-name openshift-logger --assume-role-policy-document file://cw-trust-policy.json
$ aws iam create-role --role-name openshift-logger --assume-role-policy-document file://cw-trust-policy.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意所创建的角色的
Arn值。运行以下命令,将策略附加到角色:
aws iam put-role-policy \ --role-name openshift-logger --policy-name cluster-logging-allow \ --policy-document file://cw-role-policy.json$ aws iam put-role-policy \ --role-name openshift-logger --policy-name cluster-logging-allow \ --policy-document file://cw-role-policy.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证角色和权限策略:
aws iam get-role --role-name openshift-logger
$ aws iam get-role --role-name openshift-loggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ROLE arn:aws:iam::123456789012:role/openshift-logger ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:openshift-logging:openshift-logger PRINCIPAL arn:aws:iam::123456789012:oidc-provider/<OPENSHIFT_OIDC_PROVIDER_URL>
ROLE arn:aws:iam::123456789012:role/openshift-logger ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:openshift-logging:openshift-logger PRINCIPAL arn:aws:iam::123456789012:oidc-provider/<OPENSHIFT_OIDC_PROVIDER_URL>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.2. 使用现有 AWS 角色为 AWS CloudWatch 创建 secret 复制链接链接已复制到粘贴板!
使用 oc create secret --from-literal 命令从配置的 AWS IAM 角色为 Amazon Web Services (AWS)安全令牌服务(STS)创建一个 secret。
先决条件
- 您已创建了 AWS IAM 角色。
- 具有 Red Hat OpenShift Logging 的管理员访问权限。
流程
在 CLI 中,输入以下内容来为 AWS 生成 secret:
oc create secret generic sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/openshift-logger
$ oc create secret generic sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/openshift-loggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow Secret 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.3. 从启用了 STS 的集群将日志转发到 Amazon CloudWatch 复制链接链接已复制到粘贴板!
您可以将在带有 Amazon Web Services (AWS)安全令牌服务(STS)的集群上部署的 Red Hat OpenShift 的日志记录转发到 Amazon CloudWatch。Amazon CloudWatch 是一个服务,可帮助管理员观察和监控 AWS 上的资源和应用程序。
先决条件
- 已安装 Red Hat OpenShift Logging Operator。
- 您已配置了凭证 secret。
- 具有 Red Hat OpenShift Logging 的管理员访问权限。
流程
创建或更新
ClusterLogForwarder自定义资源(CR):Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.4. 配置内容过滤器以丢弃不需要的日志记录 复制链接链接已复制到粘贴板!
收集所有集群日志会生成大量数据,这可能会造成移动和存储的代价。要减少卷,您可以配置 drop 过滤器,以在转发前排除不需要的日志记录。日志收集器根据过滤器评估日志流,并丢弃与指定条件匹配的记录。
drop 过滤器使用 test 字段来定义一个或多个用于评估日志记录的条件。过滤器应用以下规则来检查是否丢弃记录:
- 如果所有指定条件都评估为 true,则测试通过。
- 如果测试通过,则过滤器会丢弃日志记录。
-
如果您在
drop过滤器配置中定义多个测试,如果任何测试通过,则过滤器会丢弃日志记录。 - 如果评估条件时出错,例如,没有引用的字段,则该条件评估为 false。
先决条件
- 已安装 Red Hat OpenShift Logging Operator。
- 有管理员权限。
-
您已创建了
ClusterLogForwarder自定义资源 (CR)。 -
已安装 OpenShift CLI(
oc)。
流程
提取现有的
ClusterLogForwarder配置并将其保存为本地文件。oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
$ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<name> 是您要配置的ClusterLogForwarder实例的名称。 -
<namespace> 是创建ClusterLogForwarder实例的命名空间,如openshift-logging。 -
<filename> 是保存配置的本地文件的名称。
-
添加配置,将不需要的日志记录放到
ClusterLogForwarderCR 中的filtersspec 中。ClusterLogForwarderCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定过滤器的类型。
drop过滤器丢弃与过滤器配置匹配的日志记录。 - 2
- 指定
drop过滤器的配置选项。 - 3
- 指定测试条件来评估过滤器是否丢弃日志记录。
- 4
- 指定日志记录中字段的点分隔路径。
-
每个路径片段可以包含字母数字字符和下划线、
a-z、A-Z、0-9、_,如.kubernetes.namespace_name。 -
如果片段包含不同的字符,则片段必须在引号里,例如 .
kubernetes.labels."app.version-1.2/beta"。 -
您可以在单个测试配置中包括多个字段路径,但它们都必须评估为 true 才能使测试通过,以及要应用的
drop过滤器。
-
每个路径片段可以包含字母数字字符和下划线、
- 5
- 指定一个正则表达式。如果日志记录与此正则表达式匹配,它们将被丢弃。
- 6
- 指定一个正则表达式。如果日志记录与此正则表达式不匹配,它们将被丢弃。
- 7
- 指定使用
drop过滤器的管道。
注意您可以为单个
field路径设置matches或notMatches条件,但不能同时设置这两个条件。仅保留高优先级日志记录的示例配置
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 具有多个测试的配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
ClusterLogForwarderCR:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.5. API 审计过滤器概述 复制链接链接已复制到粘贴板!
OpenShift API 服务器为每个 API 调用生成审计事件。这些事件包括请求、响应和请求者身份的详细信息。这可能导致大量数据。
API 审计过滤器帮助通过使用规则排除非主题事件并缩小事件大小,从而管理审计跟踪。规则按顺序检查,检查会在第一个匹配项时停止。事件中的数据量取决于 level 字段的值:
-
None: 事件被丢弃。 -
Metadata:事件包括审计元数据,并排除请求和响应正文。 -
Request: 事件包括审计元数据和请求正文,并排除响应正文。 -
Requestresponse :事件包括所有数据:metadata、request 正文和响应正文。响应正文可能非常大。例如,oc get pods -A生成包含集群中每个 pod 的 YAML 描述的响应正文。
只有在日志记录部署中设置了 Vector 收集器时,您只能使用 API 审计过滤器功能。
ClusterLogForwarder 自定义资源(CR)使用与标准 Kubernetes 审计策略 相同的格式。ClusterLogForwarder CR 提供以下额外功能:
- 通配符
-
用户、组、命名空间和资源的名称可以在前导或尾部带有
*星号字符。例如,openshift-\*命名空间与openshift-apiserver或openshift-authentication命名空间匹配。\*/status资源与Pod/status或Deployment/status资源匹配。 - 默认规则
与策略中任何规则不匹配的事件将被过滤,如下所示:
-
get、list和watch等只读系统事件会被丢弃。 - 服务帐户写入发生在与服务帐户相同的命名空间中的事件将被丢弃。
- 所有其他事件都会被转发,受任何配置的速率限制。
要禁用这些默认值,请使用只有一个
level字段的规则结束您的规则列表,或者添加一条空规则。-
- 省略响应代码
-
要省略的整数状态代码列表。您可以使用
OmitResponseCodes字段(没有创建事件)的 HTTP 状态代码列表根据响应中的 HTTP 状态代码丢弃事件。默认值为[404, 409, 422, 429]。如果值为空列表[],则不会省略任何状态代码。
ClusterLogForwarder CR Audit 策作为 OpenShift Container Platform 审计策略外的补充起作用。ClusterLogForwarder CR 审计过滤器更改日志收集器转发的内容,并提供按操作动词、用户、组、命名空间或资源过滤的功能。您可以创建多个过滤器,将同一审计流的不同摘要发送到不同的位置。例如,您可以将详细的流发送到本地集群日志存储,并将不太详细的流发送到远程站点。
-
您必须具有
collect-audit-logs集群角色才能收集审计日志。 - 以下示例旨在说明审计策略中可能的规则范围,不是推荐的配置。
Audit 策略示例
1.5.6. 在输入 ny 过滤应用程序日志,包括标签表达式或匹配的标签键和值 复制链接链接已复制到粘贴板!
您可以使用 input 选择器,根据标签表达式或匹配的标签键及其值包含应用程序日志。
流程
将过滤器的配置添加到
ClusterLogForwarderCR 中的inputspec 中。以下示例演示了如何配置
ClusterLogForwarderCR,使其包含基于标签表达式或匹配的标签键/值的日志:ClusterLogForwarderCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
ClusterLogForwarderCR:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.7. 配置内容过滤器以修剪日志记录 复制链接链接已复制到粘贴板!
如果配置 prune 过滤器,日志收集器在转发前会根据过滤器评估日志收集器。收集器通过删除 pod 注解等低值字段来修剪日志记录。
先决条件
- 已安装 Red Hat OpenShift Logging Operator。
- 有管理员权限。
-
您已创建了
ClusterLogForwarder自定义资源 (CR)。 -
已安装 OpenShift CLI(
oc)。
流程
提取现有的
ClusterLogForwarder配置并将其保存为本地文件。oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
$ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<name> 是您要配置的ClusterLogForwarder实例的名称。 -
<namespace> 是创建ClusterLogForwarder实例的命名空间,如openshift-logging。 -
<filename> 是保存配置的本地文件的名称。
-
将配置添加到
ClusterLogForwarderCR 的filtersspec 中。重要如果您同时指定了
in和notIn参数,则notIn数组在修剪过程中优先于。在使用notIn数组修剪记录后,会使用in数组修剪它们。ClusterLogForwarderCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定过滤器的类型。
prune过滤器根据配置的字段修剪日志记录。 - 2
- 指定
prune过滤器的配置选项。-
in和notIn字段是日志记录中字段的以点分隔的路径的数组。 -
每个路径片段可以包含字母数字字符和下划线、
a-z、A-Z、0-9、_,如.kubernetes.namespace_name。 -
如果片段包含不同的字符,则片段必须在引号里,例如 .
kubernetes.labels."app.version-1.2/beta"。
-
- 3
- 可选:指定要从日志记录中删除的字段。日志收集器保留所有其他字段。
- 4
- 可选:指定要保留在日志记录中的字段。日志收集器移除所有其他字段。
- 5
- 指定
prune过滤器应用到的管道。重要-
过滤器不能从日志记录中删除
.log_type、.log_source、.message字段。您必须在notIn字段中包含它们。 -
如果使用
googleCloudLogging输出,则必须在notIn字段中包含.hostname。
-
过滤器不能从日志记录中删除
运行以下命令来应用
ClusterLogForwarderCR:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6. 根据源过滤审计和基础架构日志输入 复制链接链接已复制到粘贴板!
您可以使用 input 选择器定义 audit 和 infrastructure 源列表,以收集日志。
流程
添加配置,以在
ClusterLogForwarderCR 中定义audit和infrastructure源。以下示例演示了如何配置
ClusterLogForwarderCR 以定义audit和infrastructure源:ClusterLogForwarderCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
ClusterLogForwarderCR:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7. 通过包含或排除命名空间或容器名称,在输入中过滤应用程序日志 复制链接链接已复制到粘贴板!
您可以使用 input 选择器根据命名空间和容器名称包含或排除应用程序日志。
流程
添加配置,以在
ClusterLogForwarderCR 中包含或排除命名空间和容器名称。以下示例演示了如何配置
ClusterLogForwarderCR 以包含或排除命名空间和容器名称:ClusterLogForwarderCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意excludes字段优先于includes字段。运行以下命令来应用
ClusterLogForwarderCR:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 2 章 配置日志存储 复制链接链接已复制到粘贴板!
您可以配置 LokiStack 自定义资源(CR)来存储应用程序、审计和基础架构相关的日志。
Loki 是一个可横向扩展的、高度可用、多租户日志聚合系统,作为 Red Hat OpenShift 的日志记录的 GA 日志存储,可以使用 OpenShift Observability UI 视觉化。OpenShift Logging 提供的 Loki 配置是一个短期日志存储,旨在让用户使用收集的日志执行快速故障排除。为此,Loki 的 Red Hat OpenShift 配置的日志记录具有短期存储,并针对非常最新的查询进行了优化。
对于长期存储或长时间查询,用户应查找其集群外部的日志存储。Loki 大小只针对短期存储(最多 30 天)进行了测试并被支持。
2.1. Loki 部署大小 复制链接链接已复制到粘贴板!
Loki 的大小使用 1x.<size> 格式,其中值 1x 是实例数量,<size> 指定性能功能。
1x.pico 配置定义了具有最少资源和限制要求的单个 Loki 部署,为所有 Loki 组件提供高可用性 (HA) 支持。此配置适用于不需要单个复制因子或自动编译的部署。
磁盘请求在大小配置之间相似,允许客户测试不同的大小,以确定其部署需求的最佳选择。
对于部署大小,无法更改 1x 值。
| 1x.demo | 1x.pico [仅限 6.1+] | 1x.extra-small | 1x.small | 1x.medium | |
|---|---|---|---|---|---|
| 数据传输 | 仅用于演示 | 50GB/day | 100GB/day | 500GB/day | 2TB/day |
| 每秒查询数 (QPS) | 仅用于演示 | 1-25 QPS at 200ms | 1-25 QPS at 200ms | 25-50 QPS at 200ms | 25-75 QPS at 200ms |
| 复制因子 | None | 2 | 2 | 2 | 2 |
| 总 CPU 请求 | None | 7 个 vCPU | 14 个 vCPU | 34 个 vCPU | 54 个 vCPU |
| 使用标尺的 CPU 请求总数 | None | 8 个 vCPU | 16 个 vCPU | 42 个 vCPU | 70 个 vCPU |
| 内存请求总数 | None | 17Gi | 31Gi | 67Gi | 139Gi |
| 使用规则器的内存请求总数 | None | 18Gi | 35Gi | 83Gi | 171Gi |
| 磁盘请求总数 | 40Gi | 590Gi | 430Gi | 430Gi | 590Gi |
| 使用标尺的磁盘请求总数 | 60Gi | 910Gi | 750Gi | 750Gi | 910Gi |
2.2. Loki 对象存储 复制链接链接已复制到粘贴板!
Loki Operator 支持 AWS S3,以及 Minio 和 OpenShift Data Foundation 等其他 S3 兼容对象存储。Azure、GCS 和 Swift 也支持。
对于 Loki 存储,推荐的 nomenclature 是 logging-loki-<your_storage_provider>。
下表显示了每个存储供应商 LokiStack 自定义资源(CR) 中的 type 值。如需更多信息,请参阅存储供应商部分。
| 存储供应商 | Secret type 值 |
|---|---|
| AWS | s3 |
| Azure | azure |
| Google Cloud | gcs |
| Minio | s3 |
| OpenShift Data Foundation | s3 |
| Swift | swift |
2.2.1. AWS 存储 复制链接链接已复制到粘贴板!
先决条件
- 已安装 Loki Operator。
-
已安装 OpenShift CLI(
oc)。 - 您在 AWS 上创建了存储桶。
- 您创建了 AWS IAM 策略和 IAM 用户。
流程
运行以下命令,创建一个名为
logging-loki-aws的对象存储 secret:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.1.1. 启用 STS 的集群的 AWS 存储 复制链接链接已复制到粘贴板!
如果您的集群启用了 STS,Cloud Credential Operator (CCO) 支持使用 AWS 令牌进行短期身份验证。
您可以运行以下命令来手动创建 Loki 对象存储 secret:
oc -n openshift-logging create secret generic "logging-loki-aws" \ --from-literal=bucketnames="<s3_bucket_name>" \ --from-literal=region="<bucket_region>" \ --from-literal=audience="<oidc_audience>"
$ oc -n openshift-logging create secret generic "logging-loki-aws" \
--from-literal=bucketnames="<s3_bucket_name>" \
--from-literal=region="<bucket_region>" \
--from-literal=audience="<oidc_audience>"
- 1
- 可选注解,默认值为
openshift。
2.2.2. Azure 存储 复制链接链接已复制到粘贴板!
先决条件
- 已安装 Loki Operator。
-
已安装 OpenShift CLI(
oc)。 - 您在 Azure 上创建了存储桶。
流程
运行以下命令,使用名称
logging-loki-azure创建对象存储 secret:oc create secret generic logging-loki-azure \ --from-literal=container="<azure_container_name>" \ --from-literal=environment="<azure_environment>" \ --from-literal=account_name="<azure_account_name>" \ --from-literal=account_key="<azure_account_key>"
$ oc create secret generic logging-loki-azure \ --from-literal=container="<azure_container_name>" \ --from-literal=environment="<azure_environment>" \1 --from-literal=account_name="<azure_account_name>" \ --from-literal=account_key="<azure_account_key>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 支持的环境值包括
AzureGlobal、AzureChinaCloud、AzureGermanCloud或AzureUSGovernment。
2.2.2.1. 为 Microsoft Entra Workload ID 启用集群的 Azure 存储 复制链接链接已复制到粘贴板!
如果您的集群启用了 Microsoft Entra Workload ID,Cloud Credential Operator (CCO) 支持使用 Workload ID 进行短期身份验证。
您可以运行以下命令来手动创建 Loki 对象存储 secret:
oc -n openshift-logging create secret generic logging-loki-azure \ --from-literal=environment="<azure_environment>" \ --from-literal=account_name="<storage_account_name>" \ --from-literal=container="<container_name>"
$ oc -n openshift-logging create secret generic logging-loki-azure \
--from-literal=environment="<azure_environment>" \
--from-literal=account_name="<storage_account_name>" \
--from-literal=container="<container_name>"
2.2.3. Google Cloud Platform 存储 复制链接链接已复制到粘贴板!
先决条件
流程
-
将从 GCP 接收的服务帐户凭证复制到名为
key.json的文件中。 运行以下命令,使用名称
logging-loki-gcs创建对象存储 secret:oc create secret generic logging-loki-gcs \ --from-literal=bucketname="<bucket_name>" \ --from-file=key.json="<path/to/key.json>"
$ oc create secret generic logging-loki-gcs \ --from-literal=bucketname="<bucket_name>" \ --from-file=key.json="<path/to/key.json>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.4. Minio 存储 复制链接链接已复制到粘贴板!
流程
运行以下命令,创建一个名为
logging-loki-minio的对象存储 secret:oc create secret generic logging-loki-minio \ --from-literal=bucketnames="<bucket_name>" \ --from-literal=endpoint="<minio_bucket_endpoint>" \ --from-literal=access_key_id="<minio_access_key_id>" \ --from-literal=access_key_secret="<minio_access_key_secret>"
$ oc create secret generic logging-loki-minio \ --from-literal=bucketnames="<bucket_name>" \ --from-literal=endpoint="<minio_bucket_endpoint>" \ --from-literal=access_key_id="<minio_access_key_id>" \ --from-literal=access_key_secret="<minio_access_key_secret>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.5. OpenShift Data Foundation 存储 复制链接链接已复制到粘贴板!
先决条件
- 已安装 Loki Operator。
-
已安装 OpenShift CLI(
oc)。 - 您已部署了 OpenShift Data Foundation。
- 为对象存储配置了 OpenShift Data Foundation 集群。https://access.redhat.com/documentation/zh-cn/red_hat_openshift_data_foundation/4.18/html/managing_and_allocating_storage_resources/adding-file-and-object-storage-to-an-existing-external-ocs-cluster
流程
在
openshift-logging命名空间中创建ObjectBucketClaim自定义资源:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从关联的
ConfigMap对象获取存储桶属性:BUCKET_HOST=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_HOST}') BUCKET_NAME=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_NAME}') BUCKET_PORT=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_PORT}')BUCKET_HOST=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_HOST}') BUCKET_NAME=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_NAME}') BUCKET_PORT=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_PORT}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从关联的 secret 获取存储桶访问密钥:
ACCESS_KEY_ID=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 -d) SECRET_ACCESS_KEY=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 -d)ACCESS_KEY_ID=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 -d) SECRET_ACCESS_KEY=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 -d)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,创建一个名为
logging-loki-odf的对象存储 secret:oc create -n openshift-logging secret generic logging-loki-odf \ --from-literal=access_key_id="<access_key_id>" \ --from-literal=access_key_secret="<secret_access_key>" \ --from-literal=bucketnames="<bucket_name>" \ --from-literal=endpoint="https://<bucket_host>:<bucket_port>"
$ oc create -n openshift-logging secret generic logging-loki-odf \ --from-literal=access_key_id="<access_key_id>" \ --from-literal=access_key_secret="<secret_access_key>" \ --from-literal=bucketnames="<bucket_name>" \ --from-literal=endpoint="https://<bucket_host>:<bucket_port>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.6. Swift 存储 复制链接链接已复制到粘贴板!
先决条件
- 已安装 Loki Operator。
-
已安装 OpenShift CLI(
oc)。 - 您在 Swift 上创建了一个存储桶。
流程
运行以下命令,创建一个名为
logging-loki-swift的对象存储 secret:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过运行以下命令来提供项目特定数据、区域或两者:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.7. 在使用短期凭证的集群中部署 Loki 日志存储 复制链接链接已复制到粘贴板!
对于某些存储供应商,您可以在安装过程中使用 Cloud Credential Operator 实用程序(ccoctl)来实现短期凭证。这些凭证在 OpenShift Container Platform 集群外创建和管理。如需更多信息,请参阅组件 的带有简短凭证的手动模式。
在使用此凭证策略的集群上,必须在 Loki Operator 的新安装过程中配置短期凭证身份验证。您无法重新配置使用不同凭证策略的现有集群,以使用此功能。
2.2.7.1. 使用工作负载身份联合进行身份验证以访问基于云的日志存储 复制链接链接已复制到粘贴板!
您可以使用带有简短令牌的工作负载身份联合来对基于云的日志存储进行身份验证。使用工作负载身份联邦时,您不必在集群中存储长期凭证,这降低了凭证泄漏的风险,并简化 secret 管理。
先决条件
- 有管理员权限。
流程
使用以下选项之一启用身份验证:
-
如果您使用 OpenShift Container Platform Web 控制台安装 Loki Operator,系统会自动检测到使用简短令牌的集群。系统将提示您创建角色,并提供 Loki Operator 所需的数据,以创建
CredentialsRequest对象,该对象填充 secret。 如果使用 OpenShift CLI (
oc)安装 Loki Operator,则必须手动创建Subscription对象。如以下示例所示,为您的存储供应商使用适当的模板。此身份验证策略仅支持示例中所示的存储供应商。Microsoft Azure 示例订阅
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Amazon Web Services (AWS)示例订阅
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Google Cloud Platform (GCP)示例订阅
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
如果您使用 OpenShift Container Platform Web 控制台安装 Loki Operator,系统会自动检测到使用简短令牌的集群。系统将提示您创建角色,并提供 Loki Operator 所需的数据,以创建
2.2.7.2. 使用 Web 控制台创建 LokiStack 自定义资源 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台创建 LokiStack 自定义资源(CR)。
先决条件
- 有管理员权限。
- 访问 OpenShift Container Platform web 控制台。
- 已安装 Loki Operator。
流程
- 进入 Operators → Installed Operators 页面。点 All instances 选项卡。
- 在 Create new 下拉列表中,选择 LokiStack。
选择 YAML 视图,然后使用以下模板来创建
LokiStackCR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 使用名称
logging-loki。 - 2
- 指定部署大小。在日志记录 5.8 及更新的版本中,Loki 实例支持的大小选项为
1x.extra-small、1x.small或1x.medium。 - 3
- 指定用于日志存储的 secret。
- 4
- 指定对应的存储类型。
- 5
- 可选字段,日志记录 5.9 及更新的版本。支持的用户配置值如下:
static是所有受支持的对象存储类型的默认身份验证模式,使用存储在 Secret 中的凭证。token是从凭证源检索的短期令牌。在这个模式中,静态配置不包含对象存储所需的凭证。相反,它们会使用服务在运行时生成,允许提供较短的凭证,以及更精细的控制。并不是所有对象存储类型都支持这个身份验证模式。当 Loki 在受管 STS 模式下运行并使用 CCO on STS/WIF 集群时,token-cco是默认值。 - 6
- 为临时存储输入存储类的名称。为获得最佳性能,请指定分配块存储的存储类。可以使用
oc get storageclasses命令列出集群的可用存储类。
2.2.7.3. 使用 CLI 为 Loki 对象存储创建 secret 复制链接链接已复制到粘贴板!
要配置 Loki 对象存储,您必须创建一个 secret。您可以使用 OpenShift CLI (oc)完成此操作。
先决条件
- 有管理员权限。
- 已安装 Loki Operator。
-
已安装 OpenShift CLI(
oc)。
流程
运行以下命令,在包含您的证书和密钥文件的目录中创建 secret:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用通用或 opaque secret 以获得最佳结果。
验证
运行以下命令验证 secret 是否已创建:
oc get secrets
$ oc get secretsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.8. 对 Loki 日志的精细访问 复制链接链接已复制到粘贴板!
Red Hat OpenShift Logging Operator 默认不授予所有用户对日志的访问权限。作为管理员,您需要配置用户访问权限,除非 Operator 已升级并且以前的配置已就位。根据您的配置和需要,您可以使用以下内容配置对日志的精细访问:
- 集群范围内的策略
- 命名空间范围策略
- 创建自定义 admin 组
作为管理员,您需要创建适合部署的角色绑定和集群角色绑定。Red Hat OpenShift Logging Operator 提供以下集群角色:
-
cluster-logging-application-view授予读取应用程序日志的权限。 -
cluster-logging-infrastructure-view授予读取基础架构日志的权限。 -
cluster-logging-audit-view授予读取审计日志的权限。
如果您从以前的版本升级,则额外的集群角色 logging-application-logs-reader 和关联的集群角色绑定 logging-all-authenticated-application-logs-reader 提供向后兼容性,允许任何经过身份验证的用户在命名空间中读取访问权限。
在查询应用程序日志时,具有命名空间权限的用户必须提供命名空间。
2.2.8.1. 集群范围内的访问 复制链接链接已复制到粘贴板!
集群角色绑定资源引用集群角色,以及设置集群范围的权限。
ClusterRoleBinding 示例
2.2.8.2. 命名空间访问 复制链接链接已复制到粘贴板!
RoleBinding 资源可用于 ClusterRole 对象来定义用户或组可以访问日志的命名空间。
RoleBinding 示例
- 1
- 指定此
RoleBinding应用到的命名空间。
2.2.8.3. 自定义 admin 组访问 复制链接链接已复制到粘贴板!
如果您的大型部署具有多个需要更广泛的权限的用户,您可以使用 adminGroup 字段创建一个自定义组。属于 LokiStack CR 的 adminGroups 字段中指定的任何组的成员的用户被视为管理员。
如果管理员还分配了 cluster-logging-application-view 角色,则管理员用户可以访问所有命名空间中的所有应用程序日志。
LokiStack CR 示例
2.2.9. 为 cluster-admin 用户角色创建新组 复制链接链接已复制到粘贴板!
以 cluster-admin 用户身份查询多个命名空间的应用程序日志,其中集群中所有命名空间的字符总和大于 5120,会导致错误 Parse error: input size too long (XXXX > 5120)。为了更好地控制 LokiStack 中日志的访问,请使 cluster-admin 用户成为 cluster-admin 组的成员。如果 cluster-admin 组不存在,请创建它并将所需的用户添加到其中。
使用以下步骤为具有 cluster-admin 权限的用户创建新组。
流程
输入以下命令创建新组:
oc adm groups new cluster-admin
$ oc adm groups new cluster-adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令将所需的用户添加到
cluster-admin组中:oc adm groups add-users cluster-admin <username>
$ oc adm groups add-users cluster-admin <username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令在组中添加
cluster-admin用户角色:oc adm policy add-cluster-role-to-group cluster-admin cluster-admin
$ oc adm policy add-cluster-role-to-group cluster-admin cluster-adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3. 增强的可靠性和性能 复制链接链接已复制到粘贴板!
使用以下配置来确保生产环境中的 Loki 的可靠性和效率。
2.3.1. Loki pod 放置 复制链接链接已复制到粘贴板!
您可以通过在 pod 上使用容忍度或节点选择器来控制 Loki pod 在哪些节点上运行,并防止其他工作负载使用这些节点。
您可以使用 LokiStack 自定义资源 (CR) 将容限应用到日志存储 pod,并将污点应用到具有节点规格的节点。节点上的污点是一个 key:value 对,它指示节点排斥所有不允许污点的 pod。通过使用不在其他 pod 上的特定 key:value 对,可确保只有日志存储 pod 能够在该节点上运行。
带有节点选择器的 LokiStack 示例
带有节点选择器和容限的 LokiStack CR 示例
要配置 LokiStack (CR) 的 nodeSelector 和 tolerations 字段,您可以使用 oc explain 命令查看特定资源的描述和字段:
oc explain lokistack.spec.template
$ oc explain lokistack.spec.template
输出示例
如需更多信息,您可以添加一个特定字段:
oc explain lokistack.spec.template.compactor
$ oc explain lokistack.spec.template.compactor
输出示例
2.3.2. 配置 Loki 以容忍节点故障 复制链接链接已复制到粘贴板!
在日志记录 5.8 及更新的版本中,Loki Operator 支持设置 pod 反关联性规则,以请求同一组件的 pod 调度到集群中的不同可用节点上。
关联性是 pod 的一个属性,用于控制它们希望调度到的节点。反关联性是 pod 的一个属性,用于阻止 pod 调度到某个节点上。
在 OpenShift Container Platform 中,可以借助 pod 关联性和 pod 反关联性来根据其他 pod 上的键/值标签限制 pod 有资格调度到哪些节点。
Operator 会为所有 Loki 组件设置默认、首选的 podAntiAffinity 规则,其中包括 compactor, distributor, gateway, indexGateway, ingester, querier, queryFrontend, 和 ruler 组件。
您可以通过在 requiredDuringSchedulingIgnoredDuringExecution 字段中配置所需的设置来覆盖 Loki 组件的首选 podAntiAffinity 设置:
ingester 组件的用户设置示例
2.3.3. 使用 Loki 启用基于流的保留 复制链接链接已复制到粘贴板!
您可以根据日志流配置保留策略。您可以在全局范围内、每个租户或两者都设置保留规则。如果同时配置这两个,则租户规则会在全局规则之前应用。
如果没有在 s3 存储桶或 LokiStack 自定义资源 (CR) 中定义保留周期,则不会修剪日志,它们会永久保留在 s3 存储桶中,这可能会填满 s3 存储。
-
虽然日志记录版本 5.9 及更新的版本支持 schema
v12,但推荐使用 schemav13以获得将来的兼容性。 为了有效地进行日志修剪,请直接在对象存储供应商上配置保留策略。使用存储供应商的生命周期管理功能来确保自动删除旧日志。这也可避免从 Loki 额外处理并删除对 S3 的请求。
如果对象存储不支持生命周期策略,您必须将 LokiStack 配置为在内部强制保留。支持的保留周期最多为 30 天。
先决条件
- 有管理员权限。
- 已安装 Loki Operator。
-
已安装 OpenShift CLI(
oc)。
流程
要启用基于流的保留,请创建一个
LokiStackCR,并将它保存为 YAML 文件。在以下示例中,它名为lokistack.yaml。S3 的全局基于流的保留示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow S3 基于每个租户流的保留示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
LokiStackCR:oc apply -f lokistack.yaml
$ oc apply -f lokistack.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.4. 配置 Loki 以容许 memberlist 创建失败 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 集群中,管理员通常使用非专用 IP 网络范围。因此,Loki memberlist 配置会失败,因为默认情况下,它只使用私有 IP 网络。
作为管理员,您可以为 memberlist 配置选择 pod 网络。您可以修改 LokiStack 自定义资源(CR)以使用 hashRing spec 中的 podIP 地址。要配置 LokiStack CR,请使用以下命令:
oc patch LokiStack logging-loki -n openshift-logging --type=merge -p '{"spec": {"hashRing":{"memberlist":{"instanceAddrType":"podIP"},"type":"memberlist"}}}'
$ oc patch LokiStack logging-loki -n openshift-logging --type=merge -p '{"spec": {"hashRing":{"memberlist":{"instanceAddrType":"podIP"},"type":"memberlist"}}}'
LokiStack 示例,使其包含 podIP
2.3.5. 集群重启过程中的 LokiStack 行为 复制链接链接已复制到粘贴板!
当 OpenShift Container Platform 集群重启时,LokiStack ingestion 和查询路径将继续在可用于节点的可用 CPU 和内存资源中运行。这意味着 OpenShift Container Platform 集群更新过程中,LokiStack 没有停机。此行为通过使用 PodDisruptionBudget 资源来实现。Loki Operator 为 Loki 置备 PodDisruptionBudget 资源,它决定了每个组件必须可用的最少 pod 数量,以确保特定条件下正常操作。
2.4. 高级部署和可扩展性 复制链接链接已复制到粘贴板!
要配置高可用性、可扩展性和错误处理,请使用以下信息:
2.4.1. 支持区域的数据复制 复制链接链接已复制到粘贴板!
Loki Operator 通过 pod 拓扑分布限制支持区感知数据复制。启用这个功能可提高可靠性,并防止出现单一区域故障的日志丢失。在将部署大小配置为 1x.extra-small, 1x.small, 或 1x.medium 时,replication.factor 字段会自动设置为 2。
为确保正确复制,您需要至少具有与复制因子指定的可用区数量。虽然可用区可能会比复制因素更多,但区域数量较少可能会导致写入失败。每个区域应托管相等的实例数量,以实现最佳操作。
启用区复制的 LokiStack CR 示例
2.4.2. 从失败的区恢复 Loki pod 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 中,当特定可用区资源无法访问时,会发生区失败。可用性区域是云提供商数据中心内的隔离区域,旨在增强冗余和容错能力。如果您的 OpenShift Container Platform 集群没有配置为处理此操作,则区失败可能会导致服务或数据丢失。
Loki pod 是 StatefulSet 的一部分,它们附带 StorageClass 对象置备的 PVC。每个 Loki pod 及其 PVC 驻留在同一区域中。当在集群中发生区故障时,StatefulSet 控制器会自动尝试恢复失败的区中受影响的 pod。
以下流程将删除失败的区中的 PVC,以及其中包含的所有数据。为了避免完成数据丢失的 LokiStack CR 的 replication factor 字段,应该始终设置为大于 1 的值,以确保 Loki 复制。
先决条件
-
验证
LokiStackCR 是否具有大于 1 的复制因素。 - control plane 检测到区失败,故障区中的节点由云供应商集成标记。
StatefulSet 控制器会自动尝试重新调度失败的区中的 pod。因为关联的 PVC 也位于失败的区中,所以自动重新调度到不同的区无法正常工作。您必须手动删除失败的区中 PVC,以便在新区中成功重新创建有状态 Loki Pod 及其置备的 PVC。
流程
运行以下命令,列出处于
Pending状态的 pod:oc get pods --field-selector status.phase==Pending -n openshift-logging
$ oc get pods --field-selector status.phase==Pending -n openshift-loggingCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods输出示例NAME READY STATUS RESTARTS AGE logging-loki-index-gateway-1 0/1 Pending 0 17m logging-loki-ingester-1 0/1 Pending 0 16m logging-loki-ruler-1 0/1 Pending 0 16m
NAME READY STATUS RESTARTS AGE1 logging-loki-index-gateway-1 0/1 Pending 0 17m logging-loki-ingester-1 0/1 Pending 0 16m logging-loki-ruler-1 0/1 Pending 0 16mCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 这些 pod 处于
Pending状态,因为它们对应的 PVC 位于失败的区中。
运行以下命令,列出处于
Pending状态的 PVC:oc get pvc -o=json -n openshift-logging | jq '.items[] | select(.status.phase == "Pending") | .metadata.name' -r
$ oc get pvc -o=json -n openshift-logging | jq '.items[] | select(.status.phase == "Pending") | .metadata.name' -rCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pvc输出示例storage-logging-loki-index-gateway-1 storage-logging-loki-ingester-1 wal-logging-loki-ingester-1 storage-logging-loki-ruler-1 wal-logging-loki-ruler-1
storage-logging-loki-index-gateway-1 storage-logging-loki-ingester-1 wal-logging-loki-ingester-1 storage-logging-loki-ruler-1 wal-logging-loki-ruler-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,删除 pod 的 PVC:
oc delete pvc <pvc_name> -n openshift-logging
$ oc delete pvc <pvc_name> -n openshift-loggingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 pod:
oc delete pod <pod_name> -n openshift-logging
$ oc delete pod <pod_name> -n openshift-loggingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功删除这些对象后,应在可用区域中自动重新调度它们。
2.4.2.1. 对处于终止状态的 PVC 进行故障排除 复制链接链接已复制到粘贴板!
如果 PVC 元数据终结器被设置为 kubernetes.io/pv-protection,PVC 可能会处于 terminating 状态。删除终结器应该允许 PVC 成功删除。
运行以下命令删除每个 PVC 的终结器,然后重试删除。
oc patch pvc <pvc_name> -p '{"metadata":{"finalizers":null}}' -n openshift-logging$ oc patch pvc <pvc_name> -p '{"metadata":{"finalizers":null}}' -n openshift-loggingCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.3. Loki 速率限制错误故障排除 复制链接链接已复制到粘贴板!
如果 Log Forwarder API 将超过速率限制的大量信息转发到 Loki,Loki 会生成速率限制(429)错误。
这些错误可能会在正常操作过程中发生。例如,当将 logging 添加到已具有某些日志的集群中时,logging 会尝试充分利用现有日志条目时可能会出现速率限制错误。在这种情况下,如果添加新日志的速度小于总速率限值,历史数据最终会被处理,并且不要求用户干预即可解决速率限制错误。
如果速率限制错误持续发生,您可以通过修改 LokiStack 自定义资源(CR)来解决此问题。
LokiStack CR 在 Grafana 托管的 Loki 上不可用。本主题不适用于 Grafana 托管的 Loki 服务器。
Conditions
- Log Forwarder API 配置为将日志转发到 Loki。
您的系统向 Loki 发送大于 2 MB 的消息块。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
oc logs -n openshift-logging -l component=collector后,集群中的收集器日志会显示包含以下错误消息之一的行:429 Too Many Requests Ingestion rate limit exceeded
429 Too Many Requests Ingestion rate limit exceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow Vector 错误消息示例
2023-08-25T16:08:49.301780Z WARN sink{component_kind="sink" component_id=default_loki_infra component_type=loki component_name=default_loki_infra}: vector::sinks::util::retries: Retrying after error. error=Server responded with an error: 429 Too Many Requests internal_log_rate_limit=true2023-08-25T16:08:49.301780Z WARN sink{component_kind="sink" component_id=default_loki_infra component_type=loki component_name=default_loki_infra}: vector::sinks::util::retries: Retrying after error. error=Server responded with an error: 429 Too Many Requests internal_log_rate_limit=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在接收结束时也会看到这个错误。例如,在 LokiStack ingester pod 中:
Loki ingester 错误消息示例
level=warn ts=2023-08-30T14:57:34.155592243Z caller=grpc_logging.go:43 duration=1.434942ms method=/logproto.Pusher/Push err="rpc error: code = Code(429) desc = entry with timestamp 2023-08-30 14:57:32.012778399 +0000 UTC ignored, reason: 'Per stream rate limit exceeded (limit: 3MB/sec) while attempting to ingest for stream
level=warn ts=2023-08-30T14:57:34.155592243Z caller=grpc_logging.go:43 duration=1.434942ms method=/logproto.Pusher/Push err="rpc error: code = Code(429) desc = entry with timestamp 2023-08-30 14:57:32.012778399 +0000 UTC ignored, reason: 'Per stream rate limit exceeded (limit: 3MB/sec) while attempting to ingest for streamCopy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
更新
LokiStackCR 中的ingestionBurstSize和ingestionRate字段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. 基于日志的警报 复制链接链接已复制到粘贴板!
2.5.1. 授权 LokiStack 规则 RBAC 权限 复制链接链接已复制到粘贴板!
管理员可以允许用户通过将集群角色绑定到 username 来创建和管理自己的警报和记录规则。集群角色定义为 ClusterRole 对象,其中包含用户所需的基于角色的访问控制(RBAC)权限。
LokiStack 有以下用于警报和记录规则的集群角色:
| 运行名称 | 描述 |
|---|---|
|
|
具有此角色的用户具有管理级别访问权限来管理警报规则。此集群角色授予在 |
|
|
具有此角色的用户可以查看与 |
|
|
具有此角色的用户有权创建、更新和删除 |
|
|
具有此角色的用户可以读取 |
|
|
具有此角色的用户具有管理记录规则的管理级别访问权限。此集群角色授予在 |
|
|
具有此角色的用户可以查看与 |
|
|
具有此角色的用户有权创建、更新和删除 |
|
|
具有此角色的用户可以读取 |
2.5.1.1. 例子 复制链接链接已复制到粘贴板!
要为用户应用集群角色,您必须将现有集群角色绑定到特定用户名。
集群角色可以是集群或命名空间范围,具体取决于您使用的角色绑定。使用 RoleBinding 对象时,如使用 oc adm policy add-role-to-user 命令时,集群角色仅适用于指定的命名空间。当使用 ClusterRoleBinding 对象时,如使用 oc adm policy add-cluster-role-to-user 命令时,集群角色会应用到集群中的所有命名空间。
以下示例命令为指定用户在集群中的特定命名空间中创建、读取、更新和删除(CRUD)权限:
特定命名空间中警报规则 CRUD 权限的集群角色绑定命令示例
oc adm policy add-role-to-user alertingrules.loki.grafana.com-v1-admin -n <namespace> <username>
$ oc adm policy add-role-to-user alertingrules.loki.grafana.com-v1-admin -n <namespace> <username>
以下命令为所有命名空间中的警报规则授予指定用户管理员权限:
管理员权限的集群角色绑定命令示例
oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
$ oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
2.5.2. 使用 Loki 创建基于日志的警报规则 复制链接链接已复制到粘贴板!
AlertingRule CR 包含一组规格和 webhook 验证定义,用于声明单个 LokiStack 实例的警报规则组。另外,webhook 验证定义支持规则验证条件:
-
如果
AlertingRuleCR 包含无效的interval周期,则它是一个无效的警报规则 -
如果
AlertingRuleCR 包含无效的for周期,则它是一个无效的警报规则 -
如果
AlertingRuleCR 包含无效的 LogQLexpr,则它是一个无效的警报规则。 -
如果
AlertingRuleCR 包含两个同名的组,则它是一个无效的警报规则。 - 如果以上都不适用,则警报规则被视为有效。
| 租户类型 | AlertingRule CR 的有效命名空间 |
|---|---|
| application |
|
| audit |
|
| infrastructure |
|
流程
创建
AlertingRule自定义资源 (CR):基础架构
AlertingRuleCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 创建此
AlertingRuleCR 的命名空间必须具有与 LokiStackspec.rules.namespaceSelector定义匹配的标签。 - 2
labels块必须与 LokiStackspec.rules.selector定义匹配。- 3
infrastructure租户的AlertingRuleCR 只在openshift-*,kube-\*, 或default命名空间中被支持。- 4
kubernetes_namespace_name:的值必须与metadata.namespace的值匹配。- 5
- 此必需字段的值必须是
critical、warning或info。 - 6
- 这个字段是必须的。
- 7
- 这个字段是必须的。
应用程序
AlertingRuleCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
AlertingRuleCR:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 3 章 Loki 中的 OTLP 数据摄入 复制链接链接已复制到粘贴板!
您可以使用带有 Logging 的 OpenTelemetry 协议(OTLP)来使用 API 端点。因为 OTLP 是一个为 Loki 特别设计的标准化格式,OTLP 需要额外的 Loki 配置将 data format 映射到 Loki 的数据模型。OTLP 缺少一些概念,如流标签或结构化元数据。相反,OTLP 以 属性 的形式提供有关日志条目的元数据,分组为以下三个类别:
- 资源
- 影响范围
- Log
您可以根据需要同时为多个条目设置元数据。
3.1. 为 OTLP 数据生成配置 LokiStack 复制链接链接已复制到粘贴板!
OpenTelemetry 协议(OTLP)输出日志转发器只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
要为 OTLP ingestion 配置 LokiStack 自定义资源 (CR),请按照以下步骤执行:
先决条件
- 确保您的 Loki 设置支持结构化元数据,在模式版本 13 中引入的,以启用 OTLP 日志 ingestion。
流程
设置 schema 版本:
在创建新的
LokiStackCR 时,在存储 schema 配置中设置version: v13。注意对于现有配置,使用
version: v13添加新 schema 条目,并在以后有effectiveDate。有关更新模式版本的更多信息,请参阅升级架构 (Grafana 文档)。
配置存储模式,如下所示:
配置存储模式示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 传递了
effectiveDate后,v13 模式将生效,使LokiStack能够存储结构化的元数据。
3.2. 属性映射 复制链接链接已复制到粘贴板!
当您将 Loki Operator 设置为 openshift-logging 模式时,Loki Operator 会自动应用一组默认的属性映射。这些映射将特定的 OTLP 属性与 Loki 的流标签和结构化元数据保持一致。
对于典型的设置,这些默认映射就足够了。但是,在以下情况下,您可能需要自定义属性映射:
- 使用自定义收集器:如果设置包含一个自定义收集器,它生成您不想存储的额外属性,请考虑自定义映射以确保 Loki 丢弃这些属性。
- 调整属性详细级别 :如果默认属性集比必要更详细,则只能将其减少到必要的属性。这可以避免过量数据存储并简化日志记录过程。
3.2.1. OpenShift 的自定义属性映射 复制链接链接已复制到粘贴板!
当在 openshift-logging 模式中使用 Loki Operator 时,属性映射遵循 OpenShift 默认值,但您可以配置自定义映射来调整默认值。在 openshift-logging 模式中,您可以根据需要为所有租户或单独的租户配置自定义属性映射。在定义自定义映射时,它们会被附加到 OpenShift 默认值。如果不需要默认标签,您可以在租户配置中禁用它们。
Loki Operator 和 Loki 之间的主要区别在于继承处理。默认情况下,Loki 仅将 default_resource_attributes_as_index_labels 复制到租户,而 Loki Operator 会将整个全局配置应用到 openshift-logging 模式中的每个租户。
在 LokiStack 中,属性映射配置通过 limits 设置进行管理。请参阅以下 LokiStack 配置示例:
您可以使用全局和租户 OTLP 配置将属性映射到流标签。
流标签仅从资源级别属性生成,LokiStack 资源结构反映。请参阅以下 LokiStack 示例配置:
您可以丢弃来自日志条目的类型、范围或日志的属性。
您可以通过设置 regex: true 来使用正则表达式,为具有相似名称的属性应用配置。
避免使用正则表达式进行流标签,因为这会增加数据卷。
默认情况下,未明确设置为流标签或从条目丢弃的属性会保存为结构化元数据。
3.2.2. 自定义 OpenShift 默认值 复制链接链接已复制到粘贴板!
在 openshift-logging 模式中,需要某些属性,且因为 OpenShift 功能的角色而无法从配置中删除。如果性能会受到影响,其他标记为 recommended 的属性可能会被丢弃。有关属性的详情,请参考 OpenTelemetry 数据模型属性。
当在没有自定义属性的情况下使用 openshift-logging 模式时,您可以立即实现与 OpenShift 工具的兼容性。如果需要额外的属性,因为流标签或需要丢弃一些属性,使用自定义配置。自定义配置可以使用默认配置合并。
3.2.3. 删除推荐的属性 复制链接链接已复制到粘贴板!
要在 openshift-logging 模式中减少默认属性,请禁用推荐的属性:
- 1
- 设置
disableRecommendedAttributes: true以删除推荐的属性,这会将默认属性限制为所需的属性或流标签。注意此设置可能会对查询性能造成负面影响,因为它会删除默认流标签。您应该将此选项与自定义属性配置配对,以保留对查询至关重要的属性。
第 4 章 OpenTelemetry 数据模型 复制链接链接已复制到粘贴板!
本文档概述了 Red Hat OpenShift Logging 的 OpenTelemetry 支持的协议和语义约定。
OpenTelemetry 协议(OTLP)输出日志转发器只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
4.1. 转发和摄入协议 复制链接链接已复制到粘贴板!
Red Hat OpenShift Logging 使用 OTLP Specification 收集和将日志转发到 OpenTelemetry 端点。OTLP 编码、传输和交付遥测数据。您还可以部署 Loki 存储,它提供了一个 OTLP 端点来摄入日志流。本文档定义了从各种 OpenShift 集群源收集的日志的语义约定。
4.2. 语义约定 复制链接链接已复制到粘贴板!
此解决方案中的日志收集器收集以下日志流:
- 容器日志
- 集群节点日志
- 集群节点 auditd 日志
- Kubernetes 和 OpenShift API 服务器日志
- OpenShift Virtual Network (OVN) 日志
您可以根据 OpenTelemetry 语义属性定义的语义约定来转发这些流。OpenTelemetry 中的语义惯例将资源定义为生成遥测的实体的不可变表示,由属性标识。例如,容器中运行的进程包括 container_name、cluster_id、pod_name、namespace 以及可能的 deployment 或 app_name 等属性。这些属性在资源对象下分组,这有助于减少重复并优化日志传输作为遥测数据。
除了资源属性外,日志也可以包含特定于检测库的范围属性,以及特定于每个日志条目的日志属性。这些属性提供有关每个日志条目的详细信息,并在存储中查询日志时增强过滤功能。
以下部分定义通常转发的属性。
4.2.1. 日志条目结构 复制链接链接已复制到粘贴板!
所有日志流都包括以下日志数据字段:
Applicable Sources 列指示每个字段应用到哪些日志源:
-
all: 此字段存在于所有日志中。 -
container:此字段存在于 Kubernetes 容器日志中,包括应用程序和基础架构。 -
audit: 此字段存在于 Kubernetes、OpenShift API 和 OVN 日志中。 -
auditd:此字段存在于节点 auditd 日志中。 -
journal: 此字段存在于节点日志中。
| Name | 适用的源 | 注释 |
|---|---|---|
|
| all | |
|
| all | |
|
| all | |
|
| container, journal | |
|
| all | (可选)转发流特定属性时演示 |
4.2.2. 属性 复制链接链接已复制到粘贴板!
日志条目根据其源包括一组资源、范围和日志属性,如下表中所述。
Location 列指定属性类型:
-
resource:指示资源属性 -
scope: 指示范围属性 -
log:指示日志属性
Storage 列指示属性是否使用默认 openshift-logging 模式存储在 LokiStack 中,并指定属性存储的位置:
流标签:- 针对特定标签启用有效的过滤和查询。
-
如果 Loki Operator 在配置中强制实施此属性,则可以被标记为
required。
结构化元数据:- 允许详细过滤和存储键值对。
- 允许用户在不需要 JSON 解析的情况下使用直接标签进行简化的查询。
使用 OTLP 时,用户可以通过标签直接过滤查询,而不是使用 JSON 解析,从而提高了查询的速度和效率。
| Name | 位置 | 适用的源 | 存储 (LokiStack) | 注释 |
|---|---|---|---|---|
|
| resource | all | 所需的流标签 |
(DEPRECATED) Compatibility attribute, contains same information as |
|
| resource | all | 所需的流标签 |
(DEPRECATED) Compatibility attribute, contains same information as |
|
| resource | container | 流标签 |
(DEPRECATED) Compatibility attribute, contains same information as |
|
| resource | all | 流标签 |
(DEPRECATED) Compatibility attribute, contains same information as |
|
| resource | container | 所需的流标签 |
(DEPRECATED) Compatibility attribute, contains same information as |
|
| resource | container | 流标签 |
(DEPRECATED) Compatibility attribute, contains same information as |
|
| resource | all |
(DEPRECATED) Compatibility attribute, contains same information as | |
|
| log | container, journal |
(DEPRECATED) Compatibility attribute, contains same information as | |
|
| resource | all | 所需的流标签 | |
|
| resource | all | 所需的流标签 | |
|
| resource | all | 所需的流标签 | |
|
| resource | all | 结构化元数据 | |
|
| resource | all | 流标签 | |
|
| resource | container | 所需的流标签 | |
|
| resource | container | 流标签 | |
|
| resource | container | 结构化元数据 | |
|
| resource | container | 流标签 | |
|
| resource | container | 结构化元数据 | |
|
| resource | container | 流标签 | 根据 pod 的创建条件转发 |
|
| resource | container | 流标签 | 根据 pod 的创建条件转发 |
|
| resource | container | 流标签 | 根据 pod 的创建条件转发 |
|
| resource | container | 流标签 | 根据 pod 的创建条件转发 |
|
| resource | container | 结构化元数据 | 根据 pod 的创建条件转发 |
|
| resource | container | 流标签 | 根据 pod 的创建条件转发 |
|
| log | container | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| log | audit | 结构化元数据 | |
|
| resource | journal | 结构化元数据 | |
|
| resource | journal | 结构化元数据 | |
|
| resource | journal | 结构化元数据 | |
|
| resource | journal | 结构化元数据 | |
|
| resource | journal | 流标签 | |
|
| log | journal | 结构化元数据 | |
|
| log | journal | 结构化元数据 |
标记为 Compatibility attribute 的属性支持最小的与 ViaQ 数据模型的兼容性。这些属性已弃用,作为兼容性层,以确保持续 UI 功能。这些属性将保持支持,直到日志记录 UI 在以后的版本中完全支持 OpenTelemetry 对应部分。
当将属性名称持久化到存储中时,Loki 会更改属性名称。该名称将被变为小写,并且集合中的字符 (.,/,-) 将被替换为下划线(_)。例如,k8s.namespace.name 将变为 k8s_namespace_name。