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_type 为 custom 时才需要。索引可以是普通字符串,例如 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 | 否 | 字符串 | 指定接收器插件处理的数据类型。有效值包括 custom 、trace-analytics-raw 、trace-analytics-plain-raw 、trace-analytics-service-map 、log-analytics 、log-analytics-plain 、metric-analytics 、metric-analytics-plain 和 management-disabled 。要从 otel_logs_source 生成符合 Amazon Security Lake 的数据,并设置 output_format: otel ,请将 index_type 设置为 log-analytics-plain 。对于设置了 output_format: otel 的 otel_metrics_source ,请将 index_type 设置为 metric-analytics-plain 。对于设置了 output_format: otel 的 otel_trace_source ,请将 index_type 设置为 trace-analytics-plain-raw 。默认值为 custom 。 |
template_type | 否 | 字符串 | 定义要使用的 OpenSearch 模板类型。可用选项是 v1 和 index-template 。默认值是 v1 ,它使用 _template API 端点处可用的原始 OpenSearch 模板。index-template 选项使用可组合的索引模板,这些模板通过 OpenSearch _index_template API 提供。可组合索引类型比默认类型提供更大的灵活性,并且在 OpenSearch 集群包含现有索引模板时是必需的。可组合模板适用于所有版本的 OpenSearch 和某些更高版本的 Elasticsearch。当 distribution_version 设置为 es6 时,Data Prepper 将强制 template_type 为 v1 。 |
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_type 为 custom 时,用于 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 设置为 external 或 external_gte 时使用。 |
document_version_type | 否 | 字符串 | 索引操作的文档版本类型。必须是 external 、external_gte 或 internal 之一。如果设置为 external 或 external_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 批量操作。必须是 create 、index 、update 、upsert 或 delete 之一。默认值为 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,则要使用的批量操作类型。必须是 create 、index 、update 、upsert 或 delete 之一。 |
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"