Справочник по подключению Elastic к Microsoft SQL
Подключение Elastic к Microsoft SQL — это подключение для баз данных Microsoft SQL. Это подключение написано на языке Python с использованием фреймворка подключений Elastic.
Посмотрите исходный код этого подключения (ветка 8.17, совместима с Elastic 8.17).
Ссылка на управляемое подключение Elastic
Просмотр справки по управляемому подключению Elastic
Доступность и предварительные требования
Этот коннектор доступен как управляемый коннектор в версиях Elastic 8.8.0 и более поздних. Чтобы использовать этот коннектор в Elastic Cloud, выполните все требования к управляемым коннекторам.
Создать коннектор Microsoft SQL
Использование интерфейса
Чтобы создать новый коннектор Microsoft SQL:
- В интерфейсе Kibana перейдите на страницу Поиск → Содержание → Коннекторы из основного меню или используйте поле глобального поиска.
- Следуйте инструкциям по созданию нового родного коннектора Microsoft SQL.
Для дополнительных операций см. Интерфейс коннекторов в Kibana.
Использование API
Вы можете использовать Elasticsearch API создания коннектора, чтобы создать новый родной коннектор Microsoft SQL.
Например:
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-mssql-connector
{
"index_name": "my-elasticsearch-index",
"name": "Content synced from Microsoft SQL",
"service_type": "mssql",
"is_native": true
} Вам также потребуется создать ключ API для использования коннектором.
Пользователю необходимы права кластера manage_api_key, manage_connector и write_connector_secrets для программированного создания ключей API.
Чтобы создать ключ API для коннектора:
-
Запустите следующую команду, заменив значения, где указано. Обратите внимание на
idиencodedвозвращаемые значения из ответа: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 } ] } } } -
Используйте значение
encodedдля хранения секрета коннектора и обратите внимание на возвращаемое значениеidиз этого ответа:resp = client.perform_request( "POST", "/_connector/_secret", headers={"Content-Type": "application/json"}, body={ "value": "encoded_api_key" }, ) print(resp)const response = await client.transport.request({ method: "POST", path: "/_connector/_secret", body: { value: "encoded_api_key", }, }); console.log(response);POST _connector/_secret { "value": "encoded_api_key" } -
Используйте ключ 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.
Пользователям требуется роль sysadmin SQL Server. Обратите внимание, что требуется аутентификация SQL Server. Аутентификация Windows не поддерживается.
Для дополнительных операций см. Интерфейс коннекторов в Kibana.
Совместимость
Следующие совместимы с фреймворками коннекторов Elastic:
- Microsoft SQL Server версии 2017, 2019
- Azure SQL
- Amazon RDS для SQL Server
Настройка
Для настройки коннектора требуются следующие поля конфигурации:
- Хост
-
Адрес хоста сервера, где размещен Microsoft SQL Server. Значение по умолчанию —
127.0.0.1. Примеры:-
192.158.1.38 -
demo.instance.demo-region.demo.service.com
-
- Порт
- Порт, на котором размещен Microsoft SQL Server. Значение по умолчанию —
1433. - Имя пользователя
- Имя пользователя учетной записи для Microsoft SQL Server (только аутентификация SQL Server).
- Пароль
- Пароль учетной записи, используемой для Microsoft SQL Server (только аутентификация SQL Server).
- База данных
-
Название базы данных Microsoft SQL Server. Примеры:
-
employee_database -
customer_database
-
- Список таблиц, разделенных запятыми
-
Список таблиц, разделенных запятыми. Коннектор Microsoft SQL извлечет данные из всех таблиц, присутствующих в настроенной базе данных, если значение равно
*. Значение по умолчанию —*. Примеры:-
table_1, table_2 -
*Это поле можно обойти с помощью расширенных правил синхронизации.
-
- Схема
-
Название схемы Microsoft SQL Server. Значение по умолчанию —
dbo.Примеры:
-
dbo -
custom_schema
-
- Включить SSL
- Переключатель для включения проверки SSL. Значение по умолчанию —
False. - Сертификат SSL
-
Содержимое сертификата SSL. Если SSL отключен, значение
ssl_caбудет проигнорировано.Развернуть для просмотра примера сертификата
-----BEGIN CERTIFICATE----- MIID+jCCAuKgAwIBAgIGAJJMzlxLMA0GCSqGSIb3DQEBCwUAMHoxCzAJBgNVBAYT ... 7RhLQyWn2u00L7/9Omw= -----END CERTIFICATE-----
- Проверить хост
- Переключатель для включения проверки хоста. Значение по умолчанию —
False.
Документы и синхронизации
- Таблицы без определенного первичного ключа пропускаются.
- Если
last_user_updateтаблицыsys.dm_db_index_usage_statsнедоступна для определенной таблицы и базы данных, все данные в этой таблице будут синхронизированы.
- Файлы размером более 10 МБ не будут извлечены.
- Разрешения не синхронизируются. Все документы, индексированные в развертывании Elastic, будут видны всем пользователям с доступом к этому развертыванию Elastic.
Правила синхронизации
Основные правила синхронизации одинаковы для всех коннекторов и доступны по умолчанию. Для получения дополнительной информации см. правила синхронизации.
Расширенные правила синхронизации
Этот коннектор поддерживает расширенные правила синхронизации для удаленной фильтрации. Эти правила охватывают сложные сценарии запросов и фильтрации, которые не могут быть выражены с помощью основных правил синхронизации. Расширенные правила синхронизации определяются с помощью JSON-фрагмента DSL, специфичного для источника.
Для того, чтобы расширенные правила синхронизации вступили в силу, требуется полная синхронизация.
Вот несколько примеров расширенных правил синхронизации для этого коннектора.
Развернуть для просмотра примера данных
Таблица employee
| emp_id | name | age |
|---|---|---|
3 | John | 28 |
10 | Jane | 35 |
14 | Alex | 22 |
* Таблица customer
| c_id | name | age |
|---|---|---|
2 | Elm | 24 |
6 | Pine | 30 |
9 | Oak | 34 |
Пример: Два запроса
Эти правила извлекают все записи из таблиц employee и customer. Данные из этих таблиц будут синхронизированы с Elasticsearch отдельно.
[
{
"tables": [
"employee"
],
"query": "SELECT * FROM employee"
},
{
"tables": [
"customer"
],
"query": "SELECT * FROM customer"
}
] Пример: Один запрос WHERE
Это правило извлекает только записи из таблицы employee, где значение emp_id больше 5. Только эти отфильтрованные записи будут синхронизированы с Elasticsearch.
[
{
"tables": ["employee"],
"query": "SELECT * FROM employee WHERE emp_id > 5"
}
] Пример: Один запрос JOIN
Это правило извлекает записи, выполняя INNER JOIN между таблицами employee и customer по условию, что значение emp_id в таблице employee соответствует значению c_id в таблице customer. Результат этого объединённых данных будет синхронизирован с Elasticsearch.
[
{
"tables": ["employee", "customer"],
"query": "SELECT * FROM employee INNER JOIN customer ON employee.emp_id = customer.c_id"
}
] При использовании расширенных правил, запрос может обойти поле конфигурации tables. Это произойдёт, если запрос указывает таблицу, которая не отображается в конфигурации. Это также может произойти, если конфигурация определяет * для извлечения всех таблиц, а расширенное правило синхронизации запрашивает только подмножество таблиц.
Известные проблемы
Для этого коннектора известных проблем нет. См. Известные проблемы для проблем, влияющих на все коннекторы.
Поиск и устранение неполадок
См. Поиск и устранение неполадок.
Безопасность
См. Безопасность.
Этот коннектор использует исходный код коннектора баз данных общего назначения (ветка 8.17, совместимая с Elastic 8.17).
Просмотреть дополнительный код, специфичный для этого источника данных (ветка 8.17, совместимая с Elastic 8.17).
Коннектор с самостоятельным управлением
Ссылка на просмотр подключение самостоятельного подключения
Доступность и предварительные условия
Это подключение доступно в качестве самостоятельного самостоятельного подключения. Для использования этого подключения, выполните все требования к самостоятельному подключению.
Создайте подключение к Microsoft SQL
Используйте интерфейс
Чтобы создать новое подключение к Microsoft SQL:
- В интерфейсе Kibana перейдите на страницу Поиск → Содержание → Подключения из главного меню или используйте поле глобального поиска.
- Следуйте инструкциям по созданию нового подключения к Microsoft SQL самостоятельно управляемого подключения.
Используйте API
Вы можете использовать Elasticsearch API создания подключений для создания нового самостоятельно управляемого подключения к Microsoft SQL.
Например:
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-mssql-connector
{
"index_name": "my-elasticsearch-index",
"name": "Content synced from Microsoft SQL",
"service_type": "mssql"
} Вам также потребуется создать ключ API для подключения.
Пользователю необходимы права кластера manage_api_key, manage_connector и write_connector_secrets для программного создания ключей API.
Чтобы создать ключ API для подключения:
-
Выполните следующую команду, заменив указанные значения. Обратите внимание на
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 } ] } } } - Обновите свой
config.ymlфайл с значением ключа APIencoded.
См. документацию по API Elasticsearch для получения подробной информации обо всех доступных API подключений.
Использование
Пользователи требуют роль сервера sysadmin. Обратите внимание, что требуется аутентификация SQL Server. Аутентификация Windows не поддерживается.
Чтобы использовать это подключение в качестве самостоятельного подключения, см. Самостоятельные подключения. Для дополнительных операций по использованию см. Интерфейс подключения в Kibana.
Совместимость
Следующие совместимы с рамками подключения Elastic:
- Microsoft SQL Server версии 2017, 2019
- Azure SQL
- Amazon RDS для SQL Server
Настройка
При использовании рабочего процесса самостоятельного подключения, изначально эти поля будут использовать настройки по умолчанию, заданные в исходном коде подключения. Обратите внимание, что этот источник данных использует исходный код подключения generic_database.py.
См. mssql.py для дополнительного кода, специфичного для этого источника данных. Эти настраиваемые поля будут отображаться с соответствующими метками в интерфейсе Kibana. После подключения пользователи смогут обновлять эти значения в Kibana.
Следующие поля конфигурации необходимы для настройки подключения:
-
host - Адрес хоста сервера, на котором размещен Microsoft SQL Server. Значение по умолчанию —
127.0.0.1. Примеры: -
192.158.1.38 -
demo.instance.demo-region.demo.service.com -
port - Порт, на котором размещен Microsoft SQL Server. Значение по умолчанию —
9090. -
username - Имя пользователя учетной записи для Microsoft SQL Server. (Только аутентификация SQL Server)
-
password - Пароль учетной записи, используемой для Microsoft SQL Server. (Только аутентификация SQL Server)
-
database - Имя базы данных Microsoft SQL Server. Примеры:
-
employee_database -
customer_database -
tables - Список таблиц, разделенный запятыми. Подключение Microsoft SQL будет извлекать данные из всех таблиц, присутствующих в настроенной базе данных, если значение равно
*. Значение по умолчанию —*. Примеры: -
table_1, table_2 -
*Это поле можно обойти с помощью расширенных правил синхронизации.
-
fetch_size - Количество строк, извлекаемых за один запрос.
-
retry_count - Количество попыток повторной попытки за один не удавшийся запрос.
-
schema - Имя схемы Microsoft SQL Server. Значение по умолчанию —
dbo. -
dbo -
custom_schema -
ssl_enabled - Включение проверки SSL. Значение по умолчанию —
False. -
ssl_ca - Содержимое сертификата SSL. Если SSL отключен, значение
ssl_caбудет проигнорировано. -
validate_host - Включение проверки хоста. Значение по умолчанию —
False.
Развернуть, чтобы увидеть пример сертификата
-----BEGIN CERTIFICATE----- MIID+jCCAuKgAwIBAgIGAJJMzlxLMA0GCSqGSIb3DQEBCwUAMHoxCzAJBgNVBAYT ... 7RhLQyWn2u00L7/9Omw= -----END CERTIFICATE-----
Развертывание с помощью Docker
Вы можете развернуть подключение к Microsoft SQL в качестве самостоятельного подключения с помощью Docker. Следуйте этим инструкциям.
Шаг 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
Если вы запускаете службу подключения к докеризованной версии 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: mssql
api_key: <CONNECTOR_API_KEY_FROM_KIBANA> # Optional. If not provided, the connector will use the elasticsearch.api_key instead Использование elasticsearch.api_key является рекомендуемым методом аутентификации. Однако вы также можете использовать elasticsearch.username и elasticsearch.password для аутентификации с вашим экземпляром Elasticsearch.
Примечание: Вы можете изменить другие параметры по умолчанию, просто раскомментировав соответствующие настройки в файле конфигурации и изменив их значения.
Шаг 3: Запустить образ Docker
Запустите образ Docker с службой подключения с помощью следующей команды:
docker run \ -v ~/connectors-config:/config \ --network "elastic" \ --tty \ --rm \ docker.elastic.co/enterprise-search/elastic-connectors:8.17.3 \ /app/bin/elastic-ingest \ -c /config/config.yml
См. DOCKER.md в репозитории elastic/connectors для получения дополнительной информации.
Найдите все доступные образы Docker в официальном реестре.
У нас также есть быстрый старт с опцией самостоятельного управления с помощью Docker Compose, позволяющей одновременно запустить все необходимые службы: Elasticsearch, Kibana и службу подключения. См. этот README в репозитории elastic/connectors для получения дополнительной информации.
Документы и синхронизации
- Таблицы без определенного первичного ключа пропускаются.
- Если
last_user_updateтаблицыsys.dm_db_index_usage_statsнедоступно для определенной таблицы и базы данных, то все данные в этой таблице будут синхронизированы.
- Файлы размером более 10 МБ не будут извлечены.
- Разрешения не синхронизируются. Все документы, индексированные в развертывание Elastic, будут видны всем пользователям с доступом к этому развертыванию Elastic.
Правила синхронизации
Основные правила синхронизации одинаковы для всех коннекторов и доступны по умолчанию. Для получения дополнительной информации ознакомьтесь с правилами синхронизации.
Расширенные правила синхронизации
Этот коннектор поддерживает расширенные правила синхронизации для удалённого фильтрации. Эти правила охватывают сложные сценарии запросов и фильтрации, которые нельзя выразить с помощью основных правил синхронизации. Расширенные правила синхронизации определяются с помощью JSON-фрагмента DSL, специфичного для источника.
Для того, чтобы расширенные правила синхронизации вступили в силу, необходима полная синхронизация.
Вот несколько примеров расширенных правил синхронизации для этого коннектора.
Развернуть, чтобы увидеть примерные данные
employee таблица
| emp_id | name | age |
|---|---|---|
3 | John | 28 |
10 | Jane | 35 |
14 | Alex | 22 |
* customer таблица
| c_id | name | age |
|---|---|---|
2 | Elm | 24 |
6 | Pine | 30 |
9 | Oak | 34 |
Пример: Два запроса
Эти правила извлекают все записи из обеих таблиц employee и customer. Данные из этих таблиц будут синхронизированы с Elasticsearch отдельно.
[
{
"tables": [
"employee"
],
"query": "SELECT * FROM employee"
},
{
"tables": [
"customer"
],
"query": "SELECT * FROM customer"
}
] Пример: Один запрос WHERE
Это правило извлекает только записи из таблицы employee, где значение emp_id больше 5. Только эти отфильтрованные записи будут синхронизированы с Elasticsearch.
[
{
"tables": ["employee"],
"query": "SELECT * FROM employee WHERE emp_id > 5"
}
] Пример: Один запрос JOIN
Это правило извлекает записи путём INNER JOIN между таблицами employee и customer по условию, что значение emp_id в таблице employee совпадает со значением c_id в таблице customer. Результат этих объединённых данных будет синхронизирован с Elasticsearch.
[
{
"tables": ["employee", "customer"],
"query": "SELECT * FROM employee INNER JOIN customer ON employee.emp_id = customer.c_id"
}
] При использовании расширенных правил запрос может обойти поле конфигурации tables. Это произойдёт, если запрос указывает на таблицу, которая не отображается в конфигурации. Это также может произойти, если конфигурация указывает на * для извлечения всех таблиц, в то время как расширенное правило синхронизации запрашивает только подмножество таблиц.
Конечные тесты
Фреймворк коннектора позволяет операторам проводить функциональные тесты на реальном источнике данных. Подробности см. в разделе тестирования коннекторов.
Для проведения конечного тестирования для коннектора Microsoft SQL запустите следующую команду:
make ftest NAME=mssql
Для более быстрых тестов добавьте флаг DATA_SIZE=small:
make ftest NAME=mssql DATA_SIZE=small
Известные проблемы
Для этого коннектора известных проблем нет. См. известные проблемы для проблем, затрагивающих все коннекторы.
Устранение неполадок
См. Устранение неполадок.
Безопасность
См. Безопасность.
Этот коннектор использует исходный код универсального коннектора для баз данных (ветвь 8.17, совместимый с Elastic 8.17).
Просмотреть дополнительный код, специфичный для этого источника данных (ветвь 8.17, совместимый с Elastic 8.17).
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/es-connectors-ms-sql.html