3.6. OpenTelemetry 数据模型
本文档概述了 Red Hat OpenShift Logging 的 OpenTelemetry 支持带有 Logging 6.1 的协议和语义约定。
OpenTelemetry 协议(OTLP)输出日志转发器只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
3.6.1. 转发和摄入协议
Red Hat OpenShift Logging 使用 OTLP Specification 收集和将日志转发到 OpenTelemetry 端点。OTLP 编码、传输和交付遥测数据。您还可以部署 Loki 存储,它提供了一个 OTLP 端点来摄入日志流。本文档定义了从各种 OpenShift 集群源收集的日志的语义约定。
3.6.2. 语义约定
此解决方案中的日志收集器收集以下日志流:
- 容器日志
- 集群节点日志
- 集群节点 auditd 日志
- Kubernetes 和 OpenShift API 服务器日志
- OpenShift Virtual Network (OVN) 日志
您可以根据 OpenTelemetry 语义属性定义的语义约定来转发这些流。OpenTelemetry 中的语义惯例将资源定义为生成遥测的实体的不可变表示,由属性标识。例如,容器中运行的进程包括 container_name
、cluster_id
、pod_name
、namespace
以及可能的 deployment
或 app_name
等属性。这些属性在资源对象下分组,这有助于减少重复并优化日志传输作为遥测数据。
除了资源属性外,日志也可以包含特定于检测库的范围属性,以及特定于每个日志条目的日志属性。这些属性提供有关每个日志条目的详细信息,并在存储中查询日志时增强过滤功能。
以下部分定义通常转发的属性。
3.6.2.1. 日志条目结构
所有日志流都包括以下日志数据字段:
Applicable Sources 列指示每个字段应用到哪些日志源:
-
all
: 此字段存在于所有日志中。 -
container
:此字段存在于 Kubernetes 容器日志中,包括应用程序和基础架构。 -
audit
: 此字段存在于 Kubernetes、OpenShift API 和 OVN 日志中。 -
auditd
:此字段存在于节点 auditd 日志中。 -
journal
: 此字段存在于节点日志中。
Name | 适用的源 | 注释 |
---|---|---|
| all | |
| all | |
| all | |
| container, journal | |
| all | (可选)转发流特定属性时演示 |
3.6.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
。