数据流编辑

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

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

数据流命名方案编辑

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

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

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

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

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

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

<type>-<dataset>-<namespace>

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

logs-nginx.access-prod

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

traces-apm-dev

所有数据流以及它们附带的预构建仪表板都可以在 Fleet 数据流页面上查看

Data streams page

如果您熟悉索引的概念,则可以将每个数据流视为 Elasticsearch 中的一个单独索引。不过,在底层,事情要复杂一些。所有详细信息都可以在 Elasticsearch 数据流 中找到。

数据视图编辑

在 Kibana 中搜索数据时,可以使用 数据视图 在所有或部分数据流中进行搜索。

索引模板编辑

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

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

编辑 Elasticsearch 索引模板编辑

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

安装集成时,Fleet 会为每个数据流创建一个默认的 @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 集成数据流附带一个默认的 摄取管道,该管道在索引之前对数据进行预处理和充实。不应直接编辑默认管道,因为更改很容易破坏集成的功能。

从版本 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 发行说明中的重大更改。

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