Полное руководство по OpenSearch: установка, настройка и использование
Основные команды по управлению базой данных OpenSearch. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов
Categories:
Оглавление
- Введение в OpenSearch
- Установка OpenSearch
- Настройка кластера
- Основные операции с индексами
- Работа с данными (CRUD)
- Поиск и агрегации
- Индексы и маппинги
- Безопасность и RBAC
- Мониторинг и логирование
- Резервное копирование
- Интеграция с Logstash и Kibana
- Использование в Python и Go
1. Введение в OpenSearch
OpenSearch — это форк Elasticsearch, созданный AWS после изменения лицензии Elastic.
🔹 Ключевые возможности:
- Полнотекстовый поиск
- Анализ логов и временных рядов
- Поддержка REST API
- Масштабируемость и отказоустойчивость
🔹 Основные компоненты:
- OpenSearch — ядро поиска и аналитики
- OpenSearch Dashboards (аналог Kibana) — визуализация данных
- Logstash (опционально) — сбор и обработка данных
2. Установка OpenSearch
Linux (Debian/Ubuntu)
# Добавление репозитория OpenSearch
echo "deb https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-2.x.list
# Установка
wget -qO - https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo apt-key add -
sudo apt update
sudo apt install opensearch
Запуск сервиса
sudo systemctl start opensearch
sudo systemctl enable opensearch
Проверка работы
curl -X GET "https://localhost:9200" -u 'admin:admin' --insecure
Ответ:
{
"name" : "opensearch-node1",
"cluster_name" : "opensearch-cluster",
"version" : {
"distribution" : "opensearch",
"number" : "2.11.0"
}
}
3. Настройка кластера
Конфигурация находится в /etc/opensearch/opensearch.yml
.
Базовая настройка
cluster.name: opensearch-cluster
node.name: opensearch-node1
network.host: 0.0.0.0
discovery.type: single-node # Для однодоступной конфигурации
plugins.security.disabled: false # Включить безопасность
Настройка кластера из нескольких узлов
discovery.seed_hosts: ["node1:9300", "node2:9300"]
cluster.initial_master_nodes: ["node1", "node2"]
4. Основные операции с индексами
Создание индекса
curl -X PUT "https://localhost:9200/my-index" -u 'admin:admin' --insecure
Удаление индекса
curl -X DELETE "https://localhost:9200/my-index" -u 'admin:admin' --insecure
Просмотр списка индексов
curl -X GET "https://localhost:9200/_cat/indices?v" -u 'admin:admin' --insecure
5. Работа с данными (CRUD)
Добавление документа
curl -X POST "https://localhost:9200/my-index/_doc/1" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"title": "OpenSearch Guide",
"author": "admin",
"tags": ["search", "database"]
}'
Получение документа
curl -X GET "https://localhost:9200/my-index/_doc/1" -u 'admin:admin' --insecure
Обновление документа
curl -X POST "https://localhost:9200/my-index/_update/1" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"doc": {
"author": "new-author"
}
}'
Удаление документа
curl -X DELETE "https://localhost:9200/my-index/_doc/1" -u 'admin:admin' --insecure
6. Поиск и агрегации
Простой поиск
curl -X GET "https://localhost:9200/my-index/_search?q=title:OpenSearch" -u 'admin:admin' --insecure
Сложный запрос (JSON-тело)
curl -X GET "https://localhost:9200/my-index/_search" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"query": {
"match": {
"title": "OpenSearch"
}
}
}'
Агрегации (группировка по тегам)
curl -X GET "https://localhost:9200/my-index/_search" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"aggs": {
"tag_counts": {
"terms": { "field": "tags.keyword" }
}
}
}'
7. Индексы и маппинги
Создание индекса с маппингом
curl -X PUT "https://localhost:9200/books" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"mappings": {
"properties": {
"title": { "type": "text" },
"year": { "type": "integer" }
}
}
}'
Добавление нового поля
curl -X PUT "https://localhost:9200/books/_mapping" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"properties": {
"author": { "type": "keyword" }
}
}'
8. Безопасность и RBAC
Создание пользователя
curl -X PUT "https://localhost:9200/_plugins/_security/api/internalusers/user1" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"password": "secure123",
"backend_roles": ["readers"]
}'
Назначение роли
curl -X PUT "https://localhost:9200/_plugins/_security/api/roles/read_only" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"cluster_permissions": [],
"index_permissions": [{
"index_patterns": ["*"],
"allowed_actions": ["read"]
}]
}'
9. Мониторинг и логирование
Проверка состояния кластера
curl -X GET "https://localhost:9200/_cluster/health" -u 'admin:admin' --insecure
Логи OpenSearch
tail -f /var/log/opensearch/opensearch.log
10. Резервное копирование
Использование Snapshot API
curl -X PUT "https://localhost:9200/_snapshot/my-backup" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
"type": "fs",
"settings": {
"location": "/backups/opensearch"
}
}'
Создание снепшота
curl -X PUT "https://localhost:9200/_snapshot/my-backup/snapshot-1" -u 'admin:admin' --insecure
11. Интеграция с Logstash и OpenSearch Dashboards
Настройка Logstash для отправки данных
input {
file {
path => "/var/log/app.log"
start_position => "beginning"
}
}
output {
opensearch {
hosts => ["https://localhost:9200"]
index => "app-logs"
user => "admin"
password => "admin"
ssl_certificate_verification => false
}
}
Запуск OpenSearch Dashboards
sudo systemctl start opensearch-dashboards
Доступно по адресу: http://localhost:5601
12. Использование в Python и Go
Python (opensearch-py)
from opensearchpy import OpenSearch
client = OpenSearch(
hosts=["https://localhost:9200"],
http_auth=("admin", "admin"),
verify_certs=False
)
response = client.index(
index="my-index",
body={"title": "Python OpenSearch Guide"}
)
Go (opensearch-go)
package main
import (
"context"
"github.com/opensearch-project/opensearch-go"
)
func main() {
client, err := opensearch.NewClient(opensearch.Config{
Addresses: []string{"https://localhost:9200"},
Username: "admin",
Password: "admin",
})
res, err := client.Index(
"my-index",
strings.NewReader(`{"title": "Go OpenSearch Guide"}`),
)
}
Официальная документация: https://opensearch.org/docs