Link Search Menu Expand Document Documentation Menu

opensearch

您可以使用 opensearch 接收器插件将数据发送到 OpenSearch 集群、旧版 Elasticsearch 集群或 Amazon OpenSearch Service 域。

该插件支持 OpenSearch 1.0 及更高版本以及 Elasticsearch 7.3 及更高版本。

用法

要配置 opensearch 接收器,请在管道配置中指定 opensearch 选项。

pipeline:
  ...
  sink:
    opensearch:
      hosts: ["https://:9200"]
      cert: path/to/cert
      username: YOUR_USERNAME
      password: YOUR_PASSWORD
      index_type: trace-analytics-raw
      dlq_file: /your/local/dlq-file
      max_retries: 20
      bulk_size: 4

要配置 Amazon OpenSearch Service 接收器,请将域端点指定为 hosts 选项,如以下示例所示。

pipeline:
  ...
  sink:
    opensearch:
      hosts: ["https://your-amazon-opensearch-service-endpoint"]
      aws_sigv4: true
      cert: path/to/cert
      insecure: false
      index_type: trace-analytics-service-map
      bulk_size: 4

配置选项

下表描述了您可以为 opensearch 接收器配置的选项。

选项 必需 类型 描述
hosts 列表 要写入的 OpenSearch 主机列表,例如 ["https://:9200", "https://remote-cluster:9200"]
cert 字符串 安全证书的路径。例如,如果集群使用 OpenSearch 安全插件,则为 "config/root-ca.pem"
username 字符串 HTTP 基本认证的用户名。
password 字符串 HTTP 基本认证的密码。
aws AWS AWS 配置。
max_retries 整数 opensearch 接收器在认为失败之前,尝试将数据推送到 OpenSearch 服务器的最大次数。默认为 Integer.MAX_VALUE。如果未提供,接收器将无限期地尝试将数据推送到 OpenSearch 服务器,并且指数退避将增加重试前的等待时间。
aws_sigv4 布尔型 在 Data Prepper 2.7 中已弃用。默认值为 false。是否使用 AWS Identity and Access Management (IAM) 签名连接到 Amazon OpenSearch Service 域。对于您的访问密钥、秘密密钥和可选的会话令牌,OpenSearch Data Prepper 使用默认凭证链(环境变量、Java 系统属性、~/.aws/credential)。
aws_region 字符串 在 Data Prepper 2.7 中已弃用。连接到 Amazon OpenSearch Service 时域的 AWS 区域(例如 "us-east-1")。
aws_sts_role_arn 字符串 在 Data Prepper 2.7 中已弃用。插件用于签署发送到 Amazon OpenSearch Service 的请求的 IAM 角色。如果未提供此信息,则插件将使用默认凭证。
socket_timeout 整数 等待数据返回时的超时值(毫秒)(两个连续数据包之间最大不活动周期)。超时值 0 被解释为无限超时。如果此超时值为负或未设置,则底层 Apache HttpClient 将依赖操作系统设置来管理套接字超时。
connect_timeout 整数 从连接管理器请求连接时的超时值(毫秒)。超时值 0 被解释为无限超时。如果此超时值为负或未设置,则底层 Apache HttpClient 将依赖操作系统设置来管理连接超时。
insecure 布尔型 是否验证 SSL 证书。如果设置为 true,则禁用证书颁发机构 (CA) 证书验证,并改为发送不安全的 HTTP 请求。默认值为 false
proxy 字符串 转发 HTTP 代理服务器的地址。格式为 "<hostname or IP>:<port>"(例如,"example.com:8100""http://example.com:8100""112.112.112.112:8100")。端口号不能省略。
index 有条件地 字符串 导出索引的名称。仅当 index_typecustom 时才需要。索引可以是普通字符串,例如 my-index-name;可以包含 Java 日期时间模式,例如 my-index-%{yyyy.MM.dd}my-%{yyyy-MM-dd-HH}-index;可以使用字段值进行格式化,例如 my-index-${/my_field};或者使用 Data Prepper 表达式,例如 my-index-${getMetadata(\"my_metadata_field\"}。所有格式化选项可以组合使用,以便在创建静态、动态和滚动索引时提供灵活性。
index_type 字符串 指定接收器插件处理的数据类型。有效值包括 customtrace-analytics-rawtrace-analytics-plain-rawtrace-analytics-service-maplog-analyticslog-analytics-plainmetric-analyticsmetric-analytics-plainmanagement-disabled

要从 otel_logs_source 生成符合 Amazon Security Lake 的数据,并设置 output_format: otel,请将 index_type 设置为 log-analytics-plain
对于设置了 output_format: otelotel_metrics_source,请将 index_type 设置为 metric-analytics-plain
对于设置了 output_format: otelotel_trace_source,请将 index_type 设置为 trace-analytics-plain-raw

默认值为 custom
template_type 字符串 定义要使用的 OpenSearch 模板类型。可用选项是 v1index-template。默认值是 v1,它使用 _template API 端点处可用的原始 OpenSearch 模板。index-template 选项使用可组合的索引模板,这些模板通过 OpenSearch _index_template API 提供。可组合索引类型比默认类型提供更大的灵活性,并且在 OpenSearch 集群包含现有索引模板时是必需的。可组合模板适用于所有版本的 OpenSearch 和某些更高版本的 Elasticsearch。当 distribution_version 设置为 es6 时,Data Prepper 将强制 template_typev1
template_file 字符串 index_type 设置为 custom 时,JSON 索引模板文件的路径,例如 /your/local/template-file.json。有关示例模板文件,请参阅 otel-v1-apm-span-index-template.json。如果您提供模板文件,则它必须与 template_type 参数指定的模板格式匹配。
template_content JSON 包含索引 索引模板内发现的所有内联 JSON。有关模板内容的示例,请参阅示例模板内容
document_id_field 字符串 在 Data Prepper 2.7 中已弃用,请使用 document_id 代替。index_typecustom 时,用于 OpenSearch 文档 ID 的源数据字段(例如,"my-field")。
document_id 字符串 用作 OpenSearch 文档中 _id 的格式字符串。要指定事件中的单个字段,请使用 ${/my_field}。您还可以使用 Data Prepper 表达式来构造 document_id,例如 ${getMetadata(\"some_metadata_key\")}。这些选项可以组合成更复杂的格式,例如 ${/my_field}-test-${getMetadata(\"some_metadata_key\")}
document_version 字符串 用作 OpenSearch 文档中 _version 的格式字符串。要指定事件中的单个字段,请使用 ${/my_field}。您还可以使用 Data Prepper 表达式来构造 document_version,例如 ${getMetadata(\"some_metadata_key\")}。这些选项可以组合成更复杂的版本,例如 ${/my_field}${getMetadata(\"some_metadata_key\")}document_version 格式必须解析为 long 类型,并且只能在 document_version_type 设置为 externalexternal_gte 时使用。
document_version_type 字符串 索引操作的文档版本类型。必须是 externalexternal_gteinternal 之一。如果设置为 externalexternal_gte,则需要 document_version
dlq_file 字符串 您首选的死信队列文件路径(例如 /your/local/dlq-file)。当 Data Prepper 无法在 OpenSearch 集群上索引文档时,它会写入此文件。
dlq 不适用 DLQ 配置.
bulk_size 整数 (long) 发送到 OpenSearch 集群的批量请求的最大大小(MiB)。小于 0 的值表示无限大小。如果单个文档超过最大批量请求大小,则 Data Prepper 将单独发送每个请求。默认值为 5
ism_policy_file 字符串 索引状态管理 (ISM) 策略 JSON 文件的绝对文件路径。此策略文件仅在索引类型没有内置策略文件时才有效。例如,custom 索引类型是目前唯一没有内置策略文件的类型,因此如果通过此参数提供,它将使用此策略文件。有关策略 JSON 文件的更多信息,请参阅 ISM 策略
number_of_shards 整数 索引在目标 OpenSearch 服务器上应拥有的主分片数。此参数仅在接收器配置中显式提供 template_file 或内置时才有效。如果设置此参数,它将覆盖索引模板文件中的值。有关更多信息,请参阅 创建索引
number_of_replicas 整数 每个主分片在目标 OpenSearch 服务器上应拥有的副本分片数。例如,如果您有 4 个主分片并将 number_of_replicas 设置为 3,则索引将有 12 个副本分片。此参数仅在接收器配置中显式提供 template_file 或内置时才有效。如果设置此参数,它将覆盖索引模板文件中的值。有关更多信息,请参阅 创建索引
distribution_version 字符串 指示接收器的后端版本是 Elasticsearch 6 或更高版本。es6 表示 Elasticsearch 6。default 表示最新的兼容后端版本,例如 Elasticsearch 7.x、OpenSearch 1.x 或 OpenSearch 2.x。默认值为 default
enable_request_compression 布尔型 向 OpenSearch 发送请求时是否启用压缩。当 distribution_version 设置为 es6 时,默认值为 false。对于所有其他分发版本,默认值为 true
action 字符串 用于文档的 OpenSearch 批量操作。必须是 createindexupdateupsertdelete 之一。默认值为 index
actions 列表 一个操作列表,可以用作 action 的替代品,它读取为条件地确定事件要采取的批量操作的开关语句。
flush_timeout 长整型 一个长整型类,包含尝试打包批量请求达到 bulk_size 之前的超时时间(毫秒),然后刷新请求。如果此超时在批量请求达到 bulk_size 之前过期,请求将被刷新。设置为 -1 以禁用刷新超时,并在每个批次结束时刷新现有内容。默认值为 60,000,即 1 分钟。
normalize_index 布尔型 如果为 true,则 OpenSearch 接收器将尝试创建动态索引名称。使用 ${}) 中指定的格式选项的索引名称符合索引命名限制。任何无效字符都将被删除。默认值为 false
路由 字符串 一个字符串,用作在 OpenSearch 中存储文档时生成 shard_id 的哈希值。将搜索每个传入记录。如果存在,该字符串将用作文档的路由字段。如果不存在,OpenSearch 在存储文档时将使用默认路由机制 (document_id)。支持使用事件中的字段和 Data Prepper 表达式进行格式化,例如 ${/my_field}-test-${getMetadata(\"some_metadata_key\")}
document_root_key 字符串 事件中将用作文档根的键。默认值是事件的根。如果键不存在,则整个事件将被写入为文档。如果 document_root_key 是基本值类型(例如字符串或整数),则文档将具有 {"data": <value of the document_root_key>} 的结构。
serverless 布尔型 在 Data Prepper 2.7 中已弃用。请改用此选项与 aws 配置。 确定 OpenSearch 后端是否为 Amazon OpenSearch Serverless。当 opensearch 接收器的目标是 Amazon OpenSearch Serverless 集合时,将此值设置为 true。默认值为 false
serverless_options 对象 在 Data Prepper 2.7 中已弃用。请改用此选项与 aws 配置。opensearch 接收器的后端设置为 Amazon OpenSearch Serverless 时可用的网络配置选项。有关更多信息,请参阅 无服务器选项

aws

选项 必需 类型 描述
region 字符串 用于凭据的 AWS 区域。默认为标准 SDK 行为来确定区域
sts_role_arn 字符串 用于对 Amazon SQS 和 Amazon S3 请求承担的 AWS Security Token Service (AWS STS) 角色。默认为 null,这将使用标准 SDK 行为获取凭证
sts_header_overrides 映射 IAM 角色为汇流器插件承担的头覆盖映射。
sts_external_id 字符串 要附加到 AWS STS 的 AssumeRole 请求的外部 ID。
serverless 布尔型 确定 OpenSearch 后端是否为 Amazon OpenSearch Serverless。当 opensearch 接收器的目标是 Amazon OpenSearch Serverless 集合时,将此值设置为 true。默认值为 false
serverless_options 对象 opensearch 接收器的后端设置为 Amazon OpenSearch Serverless 时可用的网络配置选项。有关更多信息,请参阅 无服务器选项

actions

以下选项可以在 actions 选项中使用。

选项 必需 类型 描述
type 字符串 如果 when 条件评估为 true,则要使用的批量操作类型。必须是 createindexupdateupsertdelete 之一。
when 字符串 一个 Data Prepper 表达式,它有条件地评估事件是否将使用 type 中配置的批量操作发送到 OpenSearch。如果为空,则在事件发送到 OpenSearch 时将自动选择批量操作。

无服务器选项

以下选项可在 serverless_options 对象中使用。

选项 必需 类型 描述
network_policy_name 字符串 要创建的网络策略的名称。
collection_name 字符串 要配置的 Amazon OpenSearch Serverless 集合的名称。
vpce_id 字符串 源连接到的虚拟私有云 (VPC) 端点。

配置 max_retries

您可以在管道配置中包含 max_retries 选项,以控制源尝试以指数退避写入接收器的次数。如果您不包含此选项,管道将无限期地重试。

如果您指定了 max_retries 并且管道配置了死信队列 (DLQ),则管道将持续尝试写入接收器,直到达到最大重试次数,此时它将开始向 DLQ 发送失败数据。

如果您不指定 max_retries,则只有被接收器拒绝的数据才会写入 DLQ。管道会继续尝试将所有其他数据写入接收器。

OpenSearch 集群安全

为了使用 opensearch 接收器插件将数据发送到 OpenSearch 集群,您必须在管道配置中指定您的用户名和密码。以下 pipelines.yaml 示例文件演示了如何指定管理员安全凭证。

sink:
  - opensearch:
      username: "admin"
      password: "admin"
      ...

或者,除了管理员凭证,您还可以指定映射到具有以下部分中列出的最低权限的用户的凭证。

集群权限

  • cluster_all
  • indices:admin/template/get
  • indices:admin/template/put

索引权限

  • 索引:otel-v1*;索引权限:indices_all
  • 索引:.opendistro-ism-config;索引权限:indices_all
  • 索引:*;索引权限:manage_aliases

有关如何将用户映射到角色的说明,请参阅 将用户映射到角色

Amazon OpenSearch Service 域安全

opensearch 接收器插件可以将数据发送到使用 IAM 进行安全的 Amazon OpenSearch Service 域。该插件使用默认凭证链。使用 AWS 命令行界面 (AWS CLI) 运行 aws configure 来设置您的凭证。

确保您配置的凭证具有所需的 IAM 权限。以下域访问策略演示了最低所需的权限。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<AccountId>:user/data-prepper-user"
      },
      "Action": "es:ESHttp*",
      "Resource": [
        "arn:aws:es:us-east-1:<AccountId>:domain/<domain-name>/otel-v1*",
        "arn:aws:es:us-east-1:<AccountId>:domain/<domain-name>/_template/otel-v1*",
        "arn:aws:es:us-east-1:<AccountId>:domain/<domain-name>/_plugins/_ism/policies/raw-span-policy",
        "arn:aws:es:us-east-1:<AccountId>:domain/<domain-name>/_alias/otel-v1*",
        "arn:aws:es:us-east-1:<AccountId>:domain/<domain-name>/_alias/_bulk"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<AccountId>:user/data-prepper-user"
      },
      "Action": "es:ESHttpGet",
      "Resource": "arn:aws:es:us-east-1:<AccountId>:domain/<domain-name>/_cluster/settings"
    }
  ]
}

有关如何配置域访问策略的说明,请参阅 Amazon OpenSearch Service 文档中的基于资源的策略

细粒度访问控制

如果您的 OpenSearch Service 域使用精细访问控制,则 opensearch 接收器插件需要一些额外的配置。

将 IAM ARN 作为主用户

如果您将 IAM Amazon 资源名称 (ARN) 用作主用户,请在接收器配置中包含 aws_sigv4 选项。

...
sink:
    opensearch:
      hosts: ["https://your-fgac-amazon-opensearch-service-endpoint"]
      aws_sigv4: true

使用 AWS CLI 运行 aws configure 以使用主 IAM 用户凭证。如果您不想使用主用户,可以使用 aws_sts_role_arn 选项指定不同的 IAM 角色。然后,插件将使用此角色签署发送到域接收器的请求。您指定的 ARN 必须包含在域访问策略中。

内部用户数据库中的主用户

如果您的域使用内部用户数据库中的主用户,请指定主用户名和密码以及 aws_sigv4 选项。

sink:
    opensearch:
      hosts: ["https://your-fgac-amazon-opensearch-service-endpoint"]
      username: "master-username"
      password: "master-password"

有关更多信息,请参阅 Amazon OpenSearch Service 文档中的推荐配置

注意:您可以创建具有 all_access 权限的新 IAM 角色或内部用户数据库用户,并将其替代主用户。

OpenSearch Serverless 集合安全

opensearch 接收器插件可以将数据发送到 Amazon OpenSearch Serverless 集合。

OpenSearch Serverless 集合接收器有以下限制:

  • 您无法写入使用虚拟私有云 (VPC) 访问的集合。该集合必须可从公共网络访问。
  • OTel 跟踪组处理器目前不支持集合接收器。

创建管道角色

首先,创建一个 IAM 角色,管道将承担此角色以写入集合。该角色必须具有以下最低权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "aoss:BatchGetCollection"
            ],
            "Resource": "*"
        }
    ]
}

该角色必须具有以下信任关系,这允许管道承担它:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<AccountId>:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

创建集合

接下来,使用以下设置创建集合:

  • OpenSearch 端点和 OpenSearch Dashboards 的公共网络访问
  • 以下数据访问策略,它授予管道角色所需的权限:

    [
     {
        "Rules":[
           {
              "Resource":[
                 "index/collection-name/*"
              ],
              "Permission":[
                 "aoss:CreateIndex",
                 "aoss:UpdateIndex",
                 "aoss:DescribeIndex",
                 "aoss:WriteDocument"
              ],
              "ResourceType":"index"
           }
        ],
        "Principal":[
           "arn:aws:iam::<AccountId>:role/PipelineRole"
        ],
        "Description":"Pipeline role access"
     }
    ]
    

    重要:请务必将 Principal 元素中的 ARN 替换为您在前面步骤中创建的管道角色的 ARN。

    有关如何创建集合的说明,请参阅 Amazon OpenSearch Service 文档中的创建集合

创建管道

在您的 pipelines.yaml 文件中,将 OpenSearch Serverless 集合端点指定为 hosts 选项。此外,您必须将 serverless 选项设置为 true。在 sts_role_arn 选项中指定管道角色。

log-pipeline:
  source:
    http:
  processor:
    - date:
        from_time_received: true
        destination: "@timestamp"
  sink:
    - opensearch:
        hosts: [ "https://<serverless-public-collection-endpoint>" ]
        index: "my-serverless-index"
        aws:
          serverless: true
          sts_role_arn: "arn:aws:iam::<AccountId>:role/PipelineRole"
          region: "us-east-1"

包含 template_content 和 actions 的示例

以下示例管道包含 template_content 和条件 actions 列表。

log-pipeline:
  source:
    http:
  processor:
    - date:
        from_time_received: true
        destination: "@timestamp"
  sink:
    - opensearch:
        hosts: [ "https://<serverless-public-collection-endpoint>" ]
        index: "my-serverless-index"
        template_type: index-template
        template_content: >
          {
            "template" : {
              "mappings" : {
                "properties" : {
                  "Data" : {
                    "type" : "binary"
                  },
                  "EncodedColors" : {
                    "type" : "binary"
                  },
                  "Type" : {
                    "type" : "keyword"
                  },
                  "LargeDouble" : {
                    "type" : "double"
                  }          
                }
              }
            }
          }
        # index is the default case  
        actions:
         - type: "delete"
           when: '/operation == "delete"'
         - type: "update"
           when: '/operation == "update"'
         - type: "index"
        aws:
          sts_role_arn: "arn:aws:iam::<AccountId>:role/PipelineRole"
          region: "us-east-1"