网站建设的优点和不足,工作室团队官网源码,网站页面大小优化怎么做,如何申请小程序店铺警告#xff1a;ES|QL 的跨集群搜索目前处于技术预览阶段#xff0c;可能会在未来版本中更改或删除。Elastic 将努力解决任何问题#xff0c;但技术预览中的功能不受官方 GA 功能的支持 SLA 约束。 使用 ES|QL#xff0c;你可以跨多个集群执行单个查询。 前提#xff1a; … 警告ES|QL 的跨集群搜索目前处于技术预览阶段可能会在未来版本中更改或删除。Elastic 将努力解决任何问题但技术预览中的功能不受官方 GA 功能的支持 SLA 约束。 使用 ES|QL你可以跨多个集群执行单个查询。 前提
跨集群搜索需要远程集群。要在 Elasticsearch Service 上设置远程集群请参阅在 Elasticsearch Service 上配置远程集群。如果你在自己的硬件上运行 Elasticsearch请参阅远程集群。要确保你的远程集群配置支持跨集群搜索请参阅支持的跨集群搜索配置。要获得完整的跨集群搜索功能本地和远程集群必须处于同一订阅级别。本地协调节点必须具有 remote_cluster_client 节点角色。如果你使用嗅探模式sniff mode则本地协调节点必须能够连接到远程集群上的种子节点和网关节点。 我们建议使用能够充当协调节点的网关节点。种子节点seed nodes可以是这些网关节点的子集。如果你使用代理模式proxy mode则本地协调节点必须能够连接到配置的 proxy_address。此地址的代理必须能够将连接路由到远程集群上的网关和协调节点。跨集群搜索需要本地集群和远程集群上的不同安全权限。请参阅配置跨集群搜索和远程集群的权限。
如果你还不知道如何设置跨集群安全请参考我之前的文章 “Elasticsearch如何为 CCR 及 CCS 建立带有安全的集群之间的互信”。在那篇文章中我有详细的步骤描述如何使得两个集群互信并建立远程连接。
在 Ubuntu 机器上我们可以创建一个与 mac 电脑的远程链接 同样在 mac 机器上我们可以建立一个与 Ubuntu 机器的远程连接 安全模型
Elasticsearch 支持两种跨集群搜索 (CCS) 安全模型
TLS certificate authenticationAPI key authentication TLS 证书身份验证
TLS 证书身份验证使用双向 TLS 保护远程集群。当单个管理员完全控制两个集群时这可能是首选模型。我们通常建议两个集群中的角色及其权限相同。
请参阅 TLS 证书身份验证了解先决条件和详细设置说明。 API key authentication 注意当使用基于 API 密钥的安全模型的 ES|QL 时此版本不支持 ENRICH 以下信息涉及使用基于 API 密钥的安全模型跨集群使用 ES|QL。你需要按照该页面上的步骤获取完整的设置说明。此页面仅包含特定于 ES|QL 的其他信息。
基于 API 密钥的跨集群搜索 (CCS) 可以更精细地控制集群之间允许的操作。当你为不同的集群配备不同的管理员并希望更好地控制谁可以访问哪些数据时这可能是首选模型。在此模型中集群管理员必须明确定义授予集群和用户的访问权限。
你需要
使用创建跨集群 API 密钥 API 或使用 Kibana API 密钥 UI 在远程集群上创建 API 密钥。将 API 密钥添加到本地集群上的密钥库作为配置本地集群的步骤的一部分。来自本地集群的所有跨集群请求都受 API 密钥的权限约束。
使用基于 API 密钥的安全模型的 ES|QL 需要一些额外的权限而使用基于传统查询 DSL 的搜索时可能不需要这些权限。以下示例 API 调用创建一个角色该角色可以在使用基于 API 密钥的安全模型时使用 ES|QL 查询远程索引。
POST /_security/role/remote1
{cluster: [cross_cluster_search], # 1indices: [{names : [], # 2privileges: [read]}],remote_indices: [ # 3{names: [ logs-* ],privileges: [ read,read_cross_cluster ], # 4 clusters : [my_remote_cluster] # 5}]
}
本地集群需要 cross_cluster_search 集群权限。通常用户将具有读取本地和远程索引的权限。但是对于角色仅用于搜索远程集群的情况仍需要本地集群的 read 权限。要提供对本地集群的读取访问权限但不允许读取本地集群中的任何索引names 字段可能为空字符串。索引允许对远程集群的读取访问权限。配置的 cross-cluster API key 还必须允许读取此索引。使用基于 API 密钥的安全模型跨集群使用 ES|QL 时始终需要 read_cross_cluster 权限。这些权限适用的远程集群。必须为此远程集群配置 cross-cluster API key 并连接到远程集群然后才能查询远程索引。使用 Remote cluster info 验证连接。
然后你将需要一个具有上面创建的权限的用户或 API 密钥。以下示例 API 调用创建具有 remote1 角色的用户。
POST /_security/user/remote_user
{password : PASSWORD,roles : [ remote1 ]
}
请记住来自本地集群的所有跨集群请求都受跨集群 API 密钥的权限的约束该权限由远程集群的管理员控制。 远程集群设置
配置安全模型后你可以添加远程集群。
以下 cluster update settings 请求添加了三个远程集群cluster_one、cluster_two 和 cluster_three。
PUT _cluster/settings
{persistent: {cluster: {remote: {cluster_one: {seeds: [35.238.149.1:9300],skip_unavailable: true},cluster_two: {seeds: [35.238.149.2:9300],skip_unavailable: false},cluster_three: { seeds: [35.238.149.3:9300]}}}}
}
由于 cluster_three 上未设置 skip_unavailable因此它使用默认值 false。有关详细信息请参阅 Optional remote clusters 部分。 跨多个集群查询
在 FROM 命令中使用格式 remote_cluster_name:target 指定远程集群上的数据流和索引。例如以下 ES|QL 请求查询名为 mac 的单个远程集群上的 twitter 索引 步骤一
按照之前的文章 “Elasticsearch如何为 CCR 及 CCS 建立带有安全的集群之间的互信” 配置两个互相的集群。我们使用如下的配置 我们在 mac 电脑上打入如下的命令
PUT twitter/_doc/1
{content: This is Xiaoguo from Elastic
}我们可以在的 Ubuntu 上可以做如下的查询
POST _query?formattxt
{query: FROM mac:twitter| LIMIT 10
} 我们在 Ubuntu 电脑上也同时生成一个 twitter 索引
PUT twitter/_doc/1
{content: This is the doc from Ubuntu machine
}那么我们可以在 Ubuntu 机器上使用如下命令来查询所有的文档
POST _query?formattxt
{query: FROM twitter, *:twitter| LIMIT 10
} 跨集群丰富
ES|QL 中跨集群的丰富操作与本地丰富类似。如果丰富策略及其丰富索引在所有集群中都是一致的则只需像没有远程集群一样编写丰富命令即可。在此默认模式下ES|QL 可以在本地集群或远程集群上执行丰富命令旨在最大限度地减少计算或集群间数据传输。确保策略在本地集群和远程集群上都存在且数据一致对于 ES|QL 产生一致的查询结果至关重要。 注意当使用基于 API 密钥的安全模型的 ES|QL 时此版本不支持跨集群丰富。 我们在 mac 电脑上执行如下的命令来创建 sample_data 索引
PUT clientips
{mappings: {properties: {client.ip: {type: keyword},env: {type: keyword},location: {type: keyword}}}
}PUT sample_data/_bulk
{index: {}}
{timestamp: 2023-10-23T12:15:03.360Z, client.ip: 172.21.2.162, message: Connected to 10.1.0.3, event.duration: 3450233}
{index: {}}
{timestamp: 2023-10-23T12:27:28.948Z, client.ip: 172.21.2.113, message: Connected to 10.1.0.2, event.duration: 2764889}
{index: {}}
{timestamp: 2023-10-23T13:33:34.937Z, client.ip: 172.21.0.5, message: Disconnected, event.duration: 1232382}
{index: {}}
{timestamp: 2023-10-23T13:51:54.732Z, client.ip: 172.21.3.15, message: Connection error, event.duration: 725448}
{index: {}}
{timestamp: 2023-10-23T13:52:55.015Z, client.ip: 172.21.3.15, message: Connection error, event.duration: 8268153}
{index: {}}
{timestamp: 2023-10-23T13:53:55.832Z, client.ip: 172.21.3.15, message: Connection error, event.duration: 5033755}
{index: {}}
{timestamp: 2023-10-23T13:55:01.543Z, client.ip: 172.21.3.15, message: Connected to 10.1.0.1, event.duration: 1756467}我们在 Ubuntu 和 mac 机器上执行如下的命令
PUT clientips
{mappings: {properties: {client.ip: {type: keyword},env: {type: keyword},location: {type: keyword}}}
}
我们在 Ubuntu 和 mac 机器上执行如下的丰富策略
PUT /_enrich/policy/clientip_policy
{match: {indices: clientips,match_field: client.ip,enrich_fields: [env, location]}
}
PUT /_enrich/policy/clientip_policy/_execute
我们在 Ubuntu 机器上执行如下的命令
PUT clientips/_bulk
{ index : {}}
{ client.ip: 172.21.0.5, env: Development, location: loc1 }
{ index : {}}
{ client.ip: 172.21.2.113, env: QA, location: loc2 }
{ index : {}}
{ client.ip: 172.21.2.162, env: QA, location: loc3 }
{ index : {}}
{ client.ip: 172.21.3.15, env: Production, location:loc4 }
{ index : {}}
{ client.ip: 172.21.3.16, env: Production, location: loc5 }
我们在 Ubuntu 机器上执行如下的查询
POST _query?formattxt
{query: FROM mac:sample_data| KEEP client.ip, event.duration| EVAL client.ip TO_STRING(client.ip)| ENRICH clientip_policy ON client.ip} 从上面我们可以看出我们对 env 及 location 进行了丰富。