Elastic Azure Blob Storage 连接器参考

编辑

Elastic Azure Blob Storage 连接器是一个用于 Azure Blob Storage连接器

此连接器是使用 Elastic 连接器框架以 Python 编写的。

查看此连接器的源代码(分支 8.17,与 Elastic 8.17 兼容)。

Elastic 托管连接器参考

编辑
查看 Elastic 托管连接器 参考
可用性和先决条件
编辑

此连接器作为 托管连接器 在 Elastic Cloud 上可用,从 8.9.1 版本开始。

要在 Elastic Cloud 中原生使用此连接器,请满足所有托管连接器要求

兼容性
编辑

此连接器尚未在 Azure Government 中进行测试。因此,我们无法保证它能与 Azure Government 端点一起工作。有关 Azure Government 与 Global Azure 相比的更多信息,请参阅官方 Microsoft 文档

创建 Azure Blob Storage 连接器
编辑

使用 UI

编辑

要创建新的 Azure Blob Storage 连接器

  1. 在 Kibana UI 中,从主菜单导航到搜索 → 内容 → 连接器页面,或使用全局搜索字段
  2. 按照说明创建新的原生Azure Blob Storage 连接器。

有关其他操作,请参阅Kibana 中的连接器 UI

使用 API

编辑

您可以使用 Elasticsearch 创建连接器 API来创建新的原生 Azure Blob Storage 连接器。

例如

resp = client.connector.put(
    connector_id="my-{service-name-stub}-connector",
    index_name="my-elasticsearch-index",
    name="Content synced from {service-name}",
    service_type="{service-name-stub}",
    is_native=True,
)
print(resp)
const response = await client.connector.put({
  connector_id: "my-{service-name-stub}-connector",
  index_name: "my-elasticsearch-index",
  name: "Content synced from {service-name}",
  service_type: "{service-name-stub}",
  is_native: true,
});
console.log(response);
PUT _connector/my-azure_blob_storage-connector
{
  "index_name": "my-elasticsearch-index",
  "name": "Content synced from Azure Blob Storage",
  "service_type": "azure_blob_storage",
  "is_native": true
}
您还需要为连接器创建一个 API 密钥供其使用。

用户需要集群权限 manage_api_keymanage_connectorwrite_connector_secrets 才能以编程方式生成 API 密钥。

要为连接器创建 API 密钥

  1. 运行以下命令,替换指示的值。请注意响应中返回的 idencoded

    resp = client.security.create_api_key(
        name="my-connector-api-key",
        role_descriptors={
            "my-connector-connector-role": {
                "cluster": [
                    "monitor",
                    "manage_connector"
                ],
                "indices": [
                    {
                        "names": [
                            "my-index_name",
                            ".search-acl-filter-my-index_name",
                            ".elastic-connectors*"
                        ],
                        "privileges": [
                            "all"
                        ],
                        "allow_restricted_indices": False
                    }
                ]
            }
        },
    )
    print(resp)
    const response = await client.security.createApiKey({
      name: "my-connector-api-key",
      role_descriptors: {
        "my-connector-connector-role": {
          cluster: ["monitor", "manage_connector"],
          indices: [
            {
              names: [
                "my-index_name",
                ".search-acl-filter-my-index_name",
                ".elastic-connectors*",
              ],
              privileges: ["all"],
              allow_restricted_indices: false,
            },
          ],
        },
      },
    });
    console.log(response);
    POST /_security/api_key
    {
      "name": "my-connector-api-key",
      "role_descriptors": {
        "my-connector-connector-role": {
          "cluster": [
            "monitor",
            "manage_connector"
          ],
          "indices": [
            {
              "names": [
                "my-index_name",
                ".search-acl-filter-my-index_name",
                ".elastic-connectors*"
              ],
              "privileges": [
                "all"
              ],
              "allow_restricted_indices": false
            }
          ]
        }
      }
    }
  2. 使用 encoded 值存储连接器机密,并记下此响应中返回的 id

    resp = client.connector.secret_post(
        body={
            "value": "encoded_api_key"
        },
    )
    print(resp)
    const response = await client.connector.secretPost({
      body: {
        value: "encoded_api_key",
      },
    });
    console.log(response);
    POST _connector/_secret
    {
      "value": "encoded_api_key"
    }
  3. 使用 API 密钥 id 和连接器机密 id 更新连接器

    resp = client.connector.update_api_key_id(
        connector_id="my_connector_id>",
        api_key_id="API key_id",
        api_key_secret_id="secret_id",
    )
    print(resp)
    const response = await client.connector.updateApiKeyId({
      connector_id: "my_connector_id>",
      api_key_id: "API key_id",
      api_key_secret_id: "secret_id",
    });
    console.log(response);
    PUT /_connector/my_connector_id>/_api_key_id
    {
      "api_key_id": "API key_id",
      "api_key_secret_id": "secret_id"
    }

有关所有可用的连接器 API 的详细信息,请参阅Elasticsearch API 文档

用法
编辑

要将此连接器用作托管连接器,请参阅Elastic 托管连接器

有关其他操作,请参阅Kibana 中的连接器 UI

配置
编辑

以下配置字段是设置连接器所必需的

帐户名称
Azure Blob Storage 帐户的名称。
帐户密钥
Azure Blob Storage 帐户的帐户密钥
Blob 端点
Blob 服务的端点。
容器
要索引的容器列表。* 将索引所有容器。
文档和同步
编辑

连接器将获取容器中所有可用数据。

  • 不会提取大于 10 MB 的文件的内容。(自托管连接器可以使用自托管本地提取服务来处理更大的二进制文件。)
  • 权限不会同步。所有索引到 Elastic 部署的文档都将对所有有权访问该 Elastic 部署的用户可见。
同步类型
编辑

默认情况下,所有连接器都支持完全同步

此连接器还支持增量同步

同步规则
编辑

基本同步规则对于所有连接器都是相同的,并且默认可用。

当前版本中,此连接器不提供高级同步规则。目前,筛选是通过采集管道控制的。

内容提取
编辑

请参阅内容提取

已知问题
编辑

此连接器存在以下已知问题

  • lease datatier 字段未在 Elasticsearch 索引中更新

    这是因为 Blob 时间戳未更新。请参阅Github 问题

故障排除
编辑

请参阅故障排除

安全性
编辑

请参阅安全性

查看此连接器的源代码(分支 8.17,与 Elastic 8.17 兼容)

自托管连接器

编辑
查看 自托管连接器 参考
可用性和先决条件
编辑

此连接器作为自托管的自托管连接器提供。此自托管连接器与 Elastic 版本 8.6.0+ 兼容。要使用此连接器,请满足所有自托管连接器要求

兼容性
编辑

此连接器尚未在 Azure Government 中进行测试。因此,我们无法保证它能与 Azure Government 端点一起工作。有关 Azure Government 与 Global Azure 相比的更多信息,请参阅官方 Microsoft 文档

创建 Azure Blob Storage 连接器
编辑

使用 UI

编辑

要创建新的 Azure Blob Storage 连接器

  1. 在 Kibana UI 中,从主菜单导航到搜索 → 内容 → 连接器页面,或使用全局搜索字段
  2. 按照说明创建新的Azure Blob Storage 自托管连接器。

使用 API

编辑

您可以使用 Elasticsearch 创建连接器 API 来创建新的自托管 Azure Blob Storage 自托管连接器。

例如

resp = client.connector.put(
    connector_id="my-{service-name-stub}-connector",
    index_name="my-elasticsearch-index",
    name="Content synced from {service-name}",
    service_type="{service-name-stub}",
)
print(resp)
const response = await client.connector.put({
  connector_id: "my-{service-name-stub}-connector",
  index_name: "my-elasticsearch-index",
  name: "Content synced from {service-name}",
  service_type: "{service-name-stub}",
});
console.log(response);
PUT _connector/my-azure_blob_storage-connector
{
  "index_name": "my-elasticsearch-index",
  "name": "Content synced from Azure Blob Storage",
  "service_type": "azure_blob_storage"
}
您还需要为连接器创建一个 API 密钥供其使用。

用户需要集群权限 manage_api_keymanage_connectorwrite_connector_secrets 才能以编程方式生成 API 密钥。

要为连接器创建 API 密钥

  1. 运行以下命令,替换指示的值。请注意响应中返回的 encoded

    resp = client.security.create_api_key(
        name="connector_name-connector-api-key",
        role_descriptors={
            "connector_name-connector-role": {
                "cluster": [
                    "monitor",
                    "manage_connector"
                ],
                "indices": [
                    {
                        "names": [
                            "index_name",
                            ".search-acl-filter-index_name",
                            ".elastic-connectors*"
                        ],
                        "privileges": [
                            "all"
                        ],
                        "allow_restricted_indices": False
                    }
                ]
            }
        },
    )
    print(resp)
    const response = await client.security.createApiKey({
      name: "connector_name-connector-api-key",
      role_descriptors: {
        "connector_name-connector-role": {
          cluster: ["monitor", "manage_connector"],
          indices: [
            {
              names: [
                "index_name",
                ".search-acl-filter-index_name",
                ".elastic-connectors*",
              ],
              privileges: ["all"],
              allow_restricted_indices: false,
            },
          ],
        },
      },
    });
    console.log(response);
    POST /_security/api_key
    {
      "name": "connector_name-connector-api-key",
      "role_descriptors": {
        "connector_name-connector-role": {
          "cluster": [
            "monitor",
            "manage_connector"
          ],
          "indices": [
            {
              "names": [
                "index_name",
                ".search-acl-filter-index_name",
                ".elastic-connectors*"
              ],
              "privileges": [
                "all"
              ],
              "allow_restricted_indices": false
            }
          ]
        }
      }
    }
  2. 使用 API 密钥 encoded 值更新您的 config.yml 文件。

有关所有可用的连接器 API 的详细信息,请参阅Elasticsearch API 文档

用法
编辑

要将此连接器用作自托管连接器,请参阅自托管连接器。有关其他用法操作,请参阅Kibana 中的连接器 UI

配置
编辑

当使用自托管连接器工作流时,这些字段最初将使用连接器源代码中设置的默认配置。这些设置在 get_default_configuration 函数定义中。

这些可配置字段将在 Kibana UI 中使用其各自的标签呈现。连接后,您将能够在 Kibana 中更新这些值。

以下配置字段是设置连接器所必需的

account_name
Azure Blob Storage 帐户的名称。
account_key
Azure Blob Storage 帐户的帐户密钥
blob_endpoint
Blob 服务的端点。
containers
要索引的容器列表。* 将索引所有容器。
retry_count
在调用失败后重试尝试的次数。默认值为 3
concurrent_downloads
获取内容的并发下载数。默认值为 100
use_text_extraction_service
需要单独部署Elastic 文本提取服务。要求采集管道设置禁用文本提取。默认值为 False
使用 Docker 进行部署
编辑

您可以使用 Docker 将 Azure Blob Storage 连接器部署为自托管连接器。请按照这些说明进行操作。

步骤 1:下载示例配置文件

下载示例配置文件。您可以手动下载或运行以下命令

curl https://raw.githubusercontent.com/elastic/connectors/main/config.yml.example --output ~/connectors-config/config.yml

如果您的目录名称不同,或者您想使用不同的配置文件名,请记住更新 --output 参数值。

步骤 2:更新自托管连接器的配置文件

使用以下设置更新配置文件以匹配您的环境

  • elasticsearch.host
  • elasticsearch.api_key
  • connectors

如果您正在针对 Docker 化版本的 Elasticsearch 和 Kibana 运行连接器服务,您的配置文件将如下所示

# When connecting to your cloud deployment you should edit the host value
elasticsearch.host: http://host.docker.internal:9200
elasticsearch.api_key: <ELASTICSEARCH_API_KEY>

connectors:
  -
    connector_id: <CONNECTOR_ID_FROM_KIBANA>
    service_type: azure_blob_storage
    api_key: <CONNECTOR_API_KEY_FROM_KIBANA> # Optional. If not provided, the connector will use the elasticsearch.api_key instead

建议使用 elasticsearch.api_key 作为身份验证方法。但是,您也可以使用 elasticsearch.usernameelasticsearch.password 来使用您的 Elasticsearch 实例进行身份验证。

注意:您可以通过简单地取消注释配置文件中的特定设置并修改其值来更改其他默认配置。

步骤 3:运行 Docker 镜像

使用以下命令使用连接器服务运行 Docker 镜像

docker run \
-v ~/connectors-config:/config \
--network "elastic" \
--tty \
--rm \
docker.elastic.co/enterprise-search/elastic-connectors:8.17.0.0 \
/app/bin/elastic-ingest \
-c /config/config.yml

有关更多详细信息,请参阅 elastic/connectors 存储库中的 DOCKER.md

官方注册表中查找所有可用的 Docker 镜像。

我们还提供使用 Docker Compose 的快速启动自托管选项,因此您可以一次启动所有必需的服务:Elasticsearch、Kibana 和连接器服务。有关更多信息,请参阅 elastic/connectors 存储库中的此 README

文档和同步
编辑

连接器将获取容器中所有可用数据。

  • 默认情况下,不会提取大于 10 MB 的文件内容。您可以使用自管理本地提取服务来处理更大的二进制文件。
  • 权限不会同步。所有索引到 Elastic 部署的文档都将对所有有权访问该 Elastic 部署的用户可见。
同步类型
编辑

默认情况下,所有连接器都支持完全同步

此连接器还支持增量同步

同步规则
编辑

基本同步规则对于所有连接器都是相同的,并且默认可用。

当前版本中,此连接器不提供高级同步规则。目前,筛选是通过采集管道控制的。

内容提取
编辑

请参阅内容提取

端到端测试
编辑

连接器框架使操作员能够针对真实数据源运行功能测试。有关更多详细信息,请参阅连接器测试

要为 Azure Blob 存储连接器执行 E2E 测试,请运行以下命令

$ make ftest NAME=azure_blob_storage

要加快测试速度,请添加 DATA_SIZE=small 标志

make ftest NAME=azure_blob_storage DATA_SIZE=small
已知问题
编辑

此连接器存在以下已知问题

  • lease datatier 字段未在 Elasticsearch 索引中更新

    这是因为 blob 时间戳未更新。请参考 Github 问题

故障排除
编辑

请参阅故障排除

安全性
编辑

请参阅安全性