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。

流程

  1. 设置 schema 版本:

    • 在创建新的 LokiStack CR 时,在存储 schema 配置中设置 version: v13

      注意

      对于现有配置,使用 version: v13 添加新 schema 条目,并在以后有 effectiveDate。有关更新模式版本的更多信息,请参阅升级架构 (Grafana 文档)。

  2. 配置存储模式,如下所示:

    配置存储模式示例

    # ...
    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
1
全局 OTLP 属性配置。
2
openshift-logging 模式中的应用程序租户的 OTLP 属性配置。
注意

全局和每个租户 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.3. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.