3.5. Loki 中的 OTLP 数据摄入
日志记录 6.1 使用 OpenTelemetry 协议(OTLP)启用 API 端点。因为 OTLP 是一个标准的格式,并不是专门针对 Loki 设计,因此需要在 Loki 端进行额外配置,才能将 OpenTelemetry 的数据格式映射到 Loki 的数据模型。OTLP 缺少一些概念,如流标签或结构化元数据。相反,OTLP 以属性形式提供有关日志条目的元数据,并分为三个类别:
- 资源
- 影响范围
- Log
这允许根据需要,同时为多个条目或单独条目设置元数据。
3.5.1. 为 OTLP 数据生成配置 LokiStack
OpenTelemetry 协议(OTLP)输出日志转发器只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
要为 OTLP ingestion 配置 LokiStack
自定义资源 (CR),请按照以下步骤执行:
先决条件
- 确保您的 Loki 设置支持结构化元数据,在模式版本 13 中引入的,以启用 OTLP 日志 ingestion。
流程
设置 schema 版本:
在创建新的
LokiStack
CR 时,在存储 schema 配置中设置version: v13
。注意对于现有配置,使用
version: v13
添加新 schema 条目,并在以后有effectiveDate
。有关更新模式版本的更多信息,请参阅升级架构 (Grafana 文档)。
配置存储模式,如下所示:
配置存储模式示例
# ... spec: storage: schemas: - version: v13 effectiveDate: 2024-10-25
传递了
effectiveDate
后,v13 模式将生效,使LokiStack
能够存储结构化的元数据。
3.5.2. 属性映射
当 Loki Operator 设置为 openshift-logging
模式时,它会自动应用一组默认的属性映射。这些映射将特定的 OTLP 属性与 Loki 的流标签和结构化元数据保持一致。
对于典型的设置,这些默认映射应足够。但是,在以下情况下,您可能需要自定义属性映射:
- 使用自定义 Collector:如果设置包含一个生成额外属性的自定义收集器,请考虑自定义映射以确保在 Loki 中保留这些属性。
- 调整属性详细级别 :如果默认属性集比必要更详细,则只能将其减少到必要的属性。这可以避免过量数据存储并简化日志记录过程。
没有映射到流标签或结构化元数据的属性不会存储在 Loki 中。
3.5.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
设置进行管理:
# ... spec: limits: global: otlp: {} 1 tenants: application: otlp: {} 2
全局和每个租户 OTLP 配置都可以将属性映射到流标签或结构化元数据。至少需要一个流标签才能将日志条目保存到 Loki 存储,因此请确保此配置满足要求。
流标签仅从资源级别属性生成,LokiStack
资源结构反映:
spec: limits: global: otlp: streamLabels: resourceAttributes: - name: "k8s.namespace.name" - name: "k8s.pod.name" - name: "k8s.container.name"
结构化元数据从资源、范围或日志级别属性生成:
# ... spec: limits: global: otlp: streamLabels: # ... structuredMetadata: resourceAttributes: - name: "process.command_line" - name: "k8s\\.pod\\.labels\\..+" regex: true scopeAttributes: - name: "service.name" logAttributes: - name: "http.route"
在 Loki 中映射类似属性时,通过设置 regex: true
来使用正则表达式。
避免使用正则表达式进行流标签,因为这会增加数据卷。
3.5.2.2. 自定义 OpenShift 默认值
在 openshift-logging
模式中,需要某些属性,且因为 OpenShift 功能的角色而无法从配置中删除。如果性能会受到影响,可能会禁用标记为 recommended 的其他属性。
当在没有自定义属性的情况下使用 openshift-logging
模式时,您可以立即实现与 OpenShift 工具的兼容性。如果需要其他属性作为流标签或结构化元数据,使用自定义配置。自定义配置可以使用默认配置合并。
3.5.2.3. 删除推荐的属性
要在 openshift-logging
模式中减少默认属性,请禁用推荐的属性:
# ...
spec:
tenants:
mode: openshift-logging
openshift:
otlp:
disableRecommendedAttributes: true 1
- 1
- 设置
disableRecommendedAttributes: true
以删除推荐的属性,这会将默认属性限制为必需的属性。
如果默认属性导致性能或存储问题,这个选项很有用。此设置可能会对查询性能造成负面影响,因为它会删除默认流标签。您应该将此选项与自定义属性配置配对,以保留对查询至关重要的属性。