数据流

编辑

Elastic Agent 使用数据流跨多个索引存储时间序列数据,同时为您提供用于请求的单个命名资源。数据流非常适合日志、指标、跟踪和其他连续生成的数据。与其他索引策略相比,它们具有许多优势

  • 减少每个索引的字段数量:索引只需要存储数据的特定子集,这意味着不再有包含数十万个字段的索引。这可以提高空间效率并加快查询速度。另外,只有相关字段才会显示在 Discover 中。
  • 更精细的数据控制:例如,文件系统、负载、CPU、网络和进程指标会发送到不同的索引,每个索引都可能具有自己的滚动、保留和安全权限。
  • 灵活:使用自定义命名空间组件可以以对您的用例或公司有意义的方式划分和组织数据。
  • 需要较少的摄取权限:数据摄取只需要附加数据的权限。

数据流命名方案

编辑

Elastic Agent 使用 Elastic 数据流命名方案来命名数据流。命名方案根据以下组件将数据拆分为不同的流

类型
描述数据的通用 type,例如 logsmetricstracessynthetics
数据集
dataset 由集成定义,并描述每个索引的摄取数据及其结构。例如,您可能有一个用于进程指标的数据集,其中包含一个描述进程是否正在运行的字段,以及另一个用于磁盘 I/O 指标的数据集,其中包含一个描述读取的字节数的字段。
命名空间

用户可配置的任意分组,例如环境(devprodqa)、团队或战略业务部门。namespace 的长度最多可达 100 个字节(多字节字符将更快地计入此限制)。使用命名空间可以更轻松地通过使用匹配模式来搜索来自给定来源的数据。您还可以使用匹配模式在创建用户角色时授予用户访问数据的权限。

默认情况下,为 Elastic Agent 策略定义的命名空间会传播到该策略中的所有集成。如果您想为策略定义更精细的命名空间

  1. 在 Kibana 中,转到 集成
  2. 已安装的集成 选项卡上,选择您要更新的集成。
  3. 打开 集成策略 选项卡。
  4. 从集成旁边的 操作 菜单中,选择 编辑集成
  5. 打开高级选项并更新 命名空间 字段。来自集成的 Data Streams 现在将使用指定的命名空间,而不是从 Elastic Agent 策略继承的默认命名空间。

命名方案使用 - 字符分隔每个组件

<type>-<dataset>-<namespace>

例如,如果您已设置了命名空间为 prod 的 Nginx 集成,则 Elastic Agent 将使用 logs 类型、nginx.access 数据集和 prod 命名空间,将数据存储在以下数据流中

logs-nginx.access-prod

或者,如果您使用命名空间为 dev 的 APM 集成,则 Elastic Agent 将数据存储在以下数据流中

traces-apm-dev

所有数据流及其随附的预构建仪表板都可在 Fleet Data Streams 页面上查看

Data streams page

如果您熟悉索引的概念,则可以将每个数据流视为 Elasticsearch 中的单独索引。但是,在幕后,事情会更复杂一些。所有详细信息都可以在 Elasticsearch 数据流中找到。

数据视图

编辑

在 Kibana 中搜索数据时,可以使用 数据视图来搜索全部或部分数据流。

索引模板

编辑

索引模板是一种告诉 Elasticsearch 在创建索引时如何配置索引的方法。对于数据流,索引模板会在创建时配置流的后备索引。

Elasticsearch 提供了以下内置的、基于 ECS 的模板:logs-*-*metrics-*-*synthetics-*-*。Elastic Agent 集成还可以提供特定于数据集的索引模板,例如 logs-nginx.access-*。这些模板在安装集成时加载,并用于配置集成的 Data Streams。

编辑 Elasticsearch 索引模板

编辑

自定义索引映射可能会与集成定义的映射冲突,并可能破坏 Kibana 中的集成。请勿更改或自定义任何默认映射。

安装集成时,Fleet 会创建两个默认的 @custom 组件模板

  • 一个 @custom 组件模板,允许自定义给定数据流类型的所有文档,并按照以下模式命名:<data_stream_type>@custom
  • 每个数据流都有一个 @custom 组件模板,并按照以下模式命名:<name_of_data_stream>@custom

特定于数据流的 @custom 组件模板的优先级高于数据流类型 @custom 组件模板。

您可以编辑 @custom 组件模板以自定义 Elasticsearch 索引

  1. 打开 Kibana 并导航到 堆栈管理 > 索引管理 > 数据流
  2. 找到并单击集成数据流的名称,例如 logs-cisco_ise.log-default
  3. 单击数据流的索引模板链接以查看关联的组件模板列表。
  4. 导航到 堆栈管理 > 索引管理 > 组件模板
  5. 搜索数据流的自定义组件模板的名称,然后单击编辑图标。
  6. 添加任何自定义索引设置、元数据或映射。例如,您可能需要

    • 自定义应用于数据流的索引生命周期策略。请参阅 APM 指南中的 配置自定义索引生命周期策略,了解演练过程。

      索引设置 中指定生命周期名称

      {
        "index": {
          "lifecycle": {
             "name": "my_policy"
           }
        }
      }
    • 更改每个索引的 副本数量。在 索引设置 中指定副本分片的数量

      {
        "index": {
          "number_of_replicas": "2"
        }
      }

对组件模板的更改不会追溯应用于现有索引。要使更改生效,您必须为数据流创建新的写入索引。您可以使用 Elasticsearch 滚动 API 来执行此操作。

索引生命周期管理 (ILM)

编辑

使用 Elasticsearch 中的 索引生命周期管理 (ILM) 功能来管理 Elastic Agent 数据流索引的生命周期。例如,在一段时间后创建新索引,或删除过时的索引以强制执行数据保留标准。

已安装的集成可能具有一个或多个关联的数据流,每个数据流都有一个关联的 ILM 策略。默认情况下,这些数据流使用与其数据类型匹配的 ILM 策略。例如,数据流 metrics-system.logs-* 使用 metrics-system.logs 索引模板中定义的指标 ILM 策略。

想要自定义您的索引生命周期管理?请参阅 教程:自定义数据保留策略

摄取管道

编辑

Elastic Agent 集成 Data Streams 附带一个默认的 摄取管道,该管道会在索引之前预处理和丰富数据。不应直接编辑默认管道,因为更改很容易破坏集成功能。

从 8.4 版本开始,所有默认摄取管道都会调用一个不存在且未版本化的“@custom”摄取管道。如果未创建,此管道对您的数据没有影响。但是,如果将其添加到数据流并进行自定义,则此管道可用于自定义数据处理、添加字段、清理数据等。

从 8.12 版本开始,可以将摄取管道配置为在各种自定义级别处理事件。

global@custom

将处理应用于所有事件

例如,以下 管道 API 请求会为所有事件添加一个新字段 my-global-field

PUT _ingest/pipeline/global@custom
{
  "processors": [
    {
      "set": {
        "description": "Process all events",
        "field": "my-global-field",
        "value": "foo"
      }
    }
  ]
}
${type}

将处理应用于给定数据类型的所有事件。

例如,以下请求会为所有日志事件添加一个新字段 my-logs-field

PUT _ingest/pipeline/logs@custom
{
  "processors": [
    {
      "set": {
        "description": "Process all log events",
        "field": "my-logs-field",
        "value": "foo"
      }
    }
  ]
}
${type}-${package}.integration

将处理应用于集成中给定类型的所有事件

例如,以下请求创建一个 logs-nginx.integration@custom 管道,该管道会为 Nginx 集成中的所有日志事件添加一个新字段 my-nginx-field

PUT _ingest/pipeline/logs-nginx.integration@custom
{
  "processors": [
    {
      "set": {
        "description": "Process all nginx events",
        "field": "my-nginx-field",
        "value": "foo"
      }
    }
  ]
}

请注意,管道模式中包含 .integration,以避免与现有数据集管道发生可能的冲突。

${type}-${dataset}

将处理应用于特定数据集。

例如,以下请求创建一个 metrics-system.cpu@custom 管道,该管道会为系统集成中的所有 CPU 指标事件添加一个新字段 my-system.cpu-field

PUT _ingest/pipeline/metrics-system.cpu@custom
{
  "processors": [
    {
      "set": {
        "description": "Process all events in the system.cpu dataset",
        "field": "my-system.cpu-field",
        "value": "foo"
      }
    }
  ]
}

自定义管道可以直接包含处理器,或者您可以使用管道处理器来调用可在多个数据流或集成之间共享的其他管道。这些管道将在所有版本升级中保持不变。

如果您定义了一个与任何 Fleet 自定义摄取管道使用的命名方案匹配的自定义管道,则可能会产生意外的结果。例如,如果您有一个名为以下名称之一的管道

  • global@custom
  • traces@custom
  • traces-apm@custom

该管道可能会意外地被其他集成中的其他数据流调用。要避免此问题,请在命名自定义管道时避免使用上述命名方案。

有关更多详细信息和解决方法,请参阅 8.12.0 版本说明中的重大更改。

请参阅 教程:使用自定义摄取管道转换数据以开始使用。