Elastic Slack 连接器参考

编辑

Slack 连接器使用 Elastic 连接器框架 用 Python 编写。

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

Elastic 托管连接器参考

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

此托管连接器在 Elastic 8.14.0 中作为 Elastic Cloud 上的托管服务引入。

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

此连接器处于技术预览阶段,可能会发生更改。其设计和代码不如官方 GA 功能成熟,且按原样提供,不提供任何保证。技术预览功能不受官方 GA 功能的支持 SLA 的约束。

创建 Slack 连接器
编辑

使用 UI

编辑

要创建新的 Slack 连接器

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

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

使用 API

编辑

您可以使用 Elasticsearch 创建连接器 API 来创建一个新的本地 Slack 连接器。

例如

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-slack-connector
{
  "index_name": "my-elasticsearch-index",
  "name": "Content synced from Slack",
  "service_type": "slack",
  "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 文档

用法
编辑

要在 UI 中使用此连接器,请在搜索 → 连接器下创建新连接器时选择Notion磁贴。

如果您已经熟悉连接器的工作方式,您还可以使用连接器 API

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

您需要创建一个 Slack 应用程序才能使用 Slack 进行身份验证。

创建 Slack 应用程序
编辑

创建后,您将收到连接器用于身份验证的凭据。还会创建一个新的 Bot 用户。

连接器只会同步 Bot 用户是成员的频道中的消息。

要创建应用,请执行以下步骤

  1. 转到 https://api.slack.com/apps 并单击“创建新应用”。
  2. 选择“从头开始”。
  3. 命名应用,并选择要从中同步的工作区。根据工作区的设置,您可能会收到有关需要管理员批准的警告。稍后会处理。
  4. 在侧栏中导航到“OAuth 和权限”。
  5. 向下滚动到“范围”部分并添加这些范围

    • channels:history
    • channels:read
    • users:read.

      或者,如果您希望应用机器人能够自动将自己添加到公共频道,您也可以添加 channels:join

  6. 向上滚动到“工作区的 OAuth 令牌”并安装应用程序。您的工作区可能需要您获得管理员批准。如果需要,请立即请求批准,并在获得批准后返回下一步。
  7. 复制并保存新的“Bot 用户 OAuth 令牌”。配置连接器时将使用此凭据。
配置
编辑

设置此连接器需要以下设置

token(必需)
通过创建和安装您的 Slack 应用生成的 Bot 用户 OAuth 令牌。
fetch_last_n_days(必需)
要从 Slack 获取的历史记录天数。这必须是一个正数,才能获取数据的子集,追溯到这么多天。如果设置为 0,它将获取自工作区开始以来的所有数据。默认值为 180 天。
auto_join_channels(必需)
连接器是否应让应用的 Bot 用户自动邀请自己加入所有公共频道。连接器只会同步 Bot 用户是成员的频道中的消息。默认情况下,机器人不会邀请自己加入任何频道,并且必须手动邀请到您希望同步的每个频道。如果启用此设置,您的应用必须具有 channels.join 范围。
sync_users(必需)
连接器是否应为每个 Slack 用户索引一个文档。默认情况下,连接器只会为频道和消息创建文档。但是,无论此设置的值如何,Slack 应用都需要 users.read 范围,并且会发出请求以枚举工作区的所有用户。这使得消息能够使用人类可读的用户名进行丰富,而不是依赖于无法读取的用户 UID。因此,禁用此设置不会导致速度提升,而只会减少 Elasticsearch 中的总体存储空间。
同步规则
编辑

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

当前版本中,此连接器不提供高级同步规则。

有关详细信息,请阅读同步规则的类型

内容提取
编辑

此连接器目前不支持处理 Slack 附件或其他二进制文件。

文档和同步
编辑

连接器会同步以下对象和实体

  • 频道
  • 消息
  • 用户(可配置)
  • 仅同步公共频道和来自公共频道的消息。
  • 不会同步任何权限。所有文档索引到 Elastic 部署后,所有有权访问该 Elastic 部署的用户都可以看到。
已知问题
编辑

此连接器目前没有已知问题。有关所有连接器的已知问题列表,请参阅已知问题

故障排除
编辑

请参阅故障排除

安全性
编辑

请参阅安全性

自管理连接器参考

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

此连接器作为来自 Elastic 连接器框架的自管理自管理连接器提供。

此自管理连接器与 Elastic 版本 8.10.0+ 兼容。

要使用此连接器,请满足所有自管理连接器要求

此连接器处于技术预览阶段,可能会发生更改。其设计和代码不如官方 GA 功能成熟,且按原样提供,不提供任何保证。技术预览功能不受官方 GA 功能的支持 SLA 的约束。

创建 Slack 连接器
编辑

使用 UI

编辑

要创建新的 Slack 连接器

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

使用 API

编辑

您可以使用 Elasticsearch 创建连接器 API 来创建一个新的自管理 Slack 自管理连接器。

例如

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-slack-connector
{
  "index_name": "my-elasticsearch-index",
  "name": "Content synced from Slack",
  "service_type": "slack"
}
您还需要创建一个 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 中使用连接器工作流程。

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

您需要创建一个 Slack 应用程序才能使用 Slack 进行身份验证。

创建 Slack 应用程序
编辑

创建后,您将收到连接器用于身份验证的凭据。还会创建一个新的 Bot 用户。

连接器只会同步 Bot 用户是成员的频道中的消息。

要创建应用,请执行以下步骤

  1. 转到 https://api.slack.com/apps 并单击“创建新应用”。
  2. 选择“从头开始”。
  3. 命名应用,并选择要从中同步的工作区。根据工作区的设置,您可能会收到有关需要管理员批准的警告。稍后会处理。
  4. 在侧栏中导航到“OAuth 和权限”。
  5. 向下滚动到“范围”部分并添加这些范围

    • channels:history
    • channels:read
    • users:read.

      或者,如果您希望应用机器人能够自动将自己添加到公共频道,您也可以添加 channels:join

  6. 向上滚动到“工作区的 OAuth 令牌”并安装应用程序。您的工作区可能需要您获得管理员批准。如果需要,请立即请求批准,并在获得批准后返回下一步。
  7. 复制并保存新的“Bot 用户 OAuth 令牌”。配置连接器时将使用此凭据。
使用 Docker 部署
编辑

您可以使用 Docker 将 Slack 连接器部署为自托管连接器。请按照以下说明操作。

步骤 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: slack
    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

配置
编辑

设置此连接器需要以下设置

token(必需)
通过创建和安装您的 Slack 应用生成的 Bot 用户 OAuth 令牌。
fetch_last_n_days(必需)
要从 Slack 获取的历史记录天数。这必须是一个正数,才能获取数据的子集,追溯到这么多天。如果设置为 0,它将获取自工作区开始以来的所有数据。默认值为 180 天。
auto_join_channels(必需)
连接器是否应让应用的 Bot 用户自动邀请自己加入所有公共频道。连接器只会同步 Bot 用户是成员的频道中的消息。默认情况下,机器人不会邀请自己加入任何频道,并且必须手动邀请到您希望同步的每个频道。如果启用此设置,您的应用必须具有 channels.join 范围。
sync_users(必需)
连接器是否应为每个 Slack 用户索引一个文档。默认情况下,连接器只会为频道和消息创建文档。但是,无论此设置的值如何,Slack 应用都需要 users.read 范围,并且会发出请求以枚举工作区的所有用户。这使得消息能够使用人类可读的用户名进行丰富,而不是依赖于无法读取的用户 UID。因此,禁用此设置不会导致速度提升,而只会减少 Elasticsearch 中的总体存储空间。
同步规则
编辑

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

当前版本中,此连接器不提供高级同步规则。

有关详细信息,请阅读同步规则的类型

内容提取
编辑

此连接器目前不支持处理 Slack 附件或其他二进制文件。

文档和同步
编辑

连接器会同步以下对象和实体

  • 频道
  • 消息
  • 用户(可配置)
  • 仅同步公共频道和来自公共频道的消息。
  • 不会同步任何权限。所有文档索引到 Elastic 部署后,所有有权访问该 Elastic 部署的用户都可以看到。
自托管连接器操作
编辑
端到端测试
编辑

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

要为 GitHub 连接器执行 E2E 测试,请运行以下命令

$ make ftest NAME=slack

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

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

此连接器目前没有已知问题。有关所有连接器的已知问题列表,请参阅已知问题

故障排除
编辑

请参阅故障排除

安全性
编辑

请参阅安全性