Архитектура OpenSearch Dashboards (OSD) — практический обзор
Этот документ описывает логическую архитектуру OpenSearch Dashboards (OSD), его место в экосистеме OpenSearch и типовые потоки данных/аутентификации. Материал ориентирован на администраторов и инженеров эксплуатации.
OSD — это веб‑интерфейс для визуализации и анализа данных в кластере OpenSearch. Сам по себе он **без состояния** (stateless) — все артефакты (визуализации, дашборды, index patterns / data views и т. д.) хранятся в индексе в OpenSearch.
—
1) Роль OSD в экосистеме OpenSearch
Клиентский UI (React) для Discover/Visualize/Dashboards и плагинов (Observability, Security, Reports и др.).
-
Прокси‑слой к OpenSearch
API: OSD не ходит напрямую в data‑узлы, а отправляет запросы на
opensearch.hosts
(обычно координатор/ingest‑узлы или LB перед ними).
-
Механизм сохранённых объектов (Saved Objects) — хранит метаданные UI в специальном системном индексе (в дистрибуциях встречаются названия
.kibana_*
или
.opensearch-dashboards*
— зависит от версии/миграций).
-
Интеграция с плагином безопасности OpenSearch (RBAC, многоарендность/тенанты, SSO по OIDC/SAML/LDAP).
2) Высокоуровневая схема
- snippet.mermaid
flowchart LR
subgraph Users["Пользователи/браузеры"]
U1[User A]
U2[User B]
end
subgraph Edge["Балансировщик / Reverse Proxy"]
LB[(LB: 5601/tcp)]
end
subgraph OSD["OSD-узлы (stateless)"]
D1[OpenSearch Dashboards #1]
D2[OpenSearch Dashboards #2]
end
subgraph OS["Кластер OpenSearch"]
CM[(Cluster Manager)]
C1[(Data/ingest)]
C2[(Data/ingest)]
end
subgraph Ingest["Слой приёма логов"]
FB[Fluent Bit / Filebeat]
LS[Logstash]
end
U1 -- HTTP(S) --> LB --> D1
U2 -- HTTP(S) --> LB --> D2
D1 -- HTTPS (9200) --> OS
D2 -- HTTPS (9200) --> OS
FB -- 5044/HTTP(S) --> LS -- HTTPS (9200) --> OS
Порты по умолчанию
- OSD слушает 5601/tcp
(HTTP по умолчанию).
- OpenSearch API — 9200/tcp
(HTTPS при включённой безопасности).
- Logstash (beats input) — 5044/tcp
(если используется).
3) Внутренние компоненты OSD
Node.js‑сервер OSD
Прокси к OpenSearch, управление сессиями, загрузка плагинов.
- Логи по умолчанию в stdout; можно направить в файл.
- Платформа плагинов
- Плагины UI/серверной части расширяют функционал: Observability (логи/трейсы/метрики), Security (RBAC, Tenants), Anomaly Detection/ML, Reports, Alerting, Index Management/ISM и др.
- Saved Objects
- Хранятся в системном индексе в кластере.
- Многоарендность (tenancy): артефакты разделяются по тенантам (Global
, Private
и настраиваемые).
- Data Views (бывш. Index Patterns)
- Мост между UI и индексами/шаблонами в OpenSearch.
- Определяет поле времени, wildcards по индексам (logs-*
, filebeat-*
, fluentbit-*
).
4) Аутентификация и авторизация
Кто аутентифицирует? — плагин безопасности в OpenSearch. OSD передаёт ему учётные данные (Basic, OIDC/SAML, LDAP).
-
Сервисный пользователь OSD (
kibanaserver
или аналог) — для фоновых операций OSD; не путать с пользовательскими сессиями.
-
Многоарендность (Tenants) — логическое разделение артефактов UI: приватные/глобальные/командные области.
-
Роли и маппинги — разрешения на индексы (
read
,
crud
,
create_index
и т. п.) + доступ к функциональности плагинов.
Типичный поток аутентификации
1. Пользователь открывает
http(s)://osd:5601
→ OSD редиректит на страницу логина (или в IdP при SSO).
2. После успешного логина OSD хранит информацию о сессии (cookie/токен), а запросы к
API идут от имени пользователя.
3. OpenSearch Security проверяет права (RBAC), тенант, фильтры на уровне полей/документов (если настроены).
5) Потоки запросов и кэширование
Поисковые запросы: UI формирует DQL/Lucene → OSD транслирует в Query DSL и шлёт в OpenSearch.
-
Агрегации/визуализации: строятся на стороне OpenSearch (аггрегации Buckets/Metrics).
-
Кэширование: на стороне OpenSearch (query cache, request cache); OSD кэши минимальны.
-
Большие выборки: используйте
filters
/аггрегации вместо выгрузок; для экспорта — Reports/
API с пагинацией/scroll (учитывайте лимиты heap и payload).
6) Инжест и жизненный цикл данных
- snippet.mermaid
sequenceDiagram
participant Host as Linux host
participant Shipper as Shipper (Fluent Bit/Filebeat)
participant LS as Logstash (optional)
participant OS as OpenSearch
participant OSD as OSD
Host->>Shipper: Файлы/ journald
Shipper->>LS: Beats/HTTP (опц. TLS, 5044)
LS-->>OS: Bulk API (HTTPS 9200)
Shipper-->>OS: (альтернатива) напрямую по Bulk API
OS-->>OSD: Поиск/агрегации (Query DSL)
OSD-->>User: Discover/визуализации/дашборды
Шаблоны/маппинги: определяют поля (text/keyword
, даты/числа), анализаторы.
- ISM (Index State Management): ротация, перемещение, удаление старых индексов.
- Репликация: на стенде 0 реплик, в прод — ≥1 и несколько data‑узлов.
- Именование индексов: суточные префиксы fluentbit-YYYY.MM.DD
, filebeat-*
, logstash-*
— помогают с ротацией и TTL.
7) Сеть и TLS
TLS слои
1. Браузер ⇄ OSD (
5601
): чаще TLS завершается на балансировщике/реверс‑прокси.
2. OSD ⇄ OpenSearch (
9200
): HTTPS + проверка сертификатов (в прод).
3. Отправители ⇄ Logstash/
OS (
5044/9200
): включайте TLS и проверку CA.
-
Сегментация: ограничьте доступ к
9200
только доверенным источникам (OSD/Logstash/админы).
-
Заголовки безопасности: настройте HSTS/CSP на фронте, чтобы защитить UI.
8) Масштабирование и HA
OSD горизонтально: несколько экземпляров за балансировщиком; липкие сессии желательны.
- Статусность: OSD без состояния, но ключи/секреты сессий должны быть одинаковыми на всех инстансах.
- OpenSearch: минимум 3 узла для кворума (cluster‑manager и data), отдельные узлы под ingest/координатор — по нагрузке.
- Снапшоты: регулярные снапшоты на репозитории (S3/NFS). Saved Objects входят, т. к. лежат в системном индексе.
9) Производительность и лимиты
OSD (Node.js): следите за RAM/CPU, лимитируйте размер ответа и таймауты запроса.
- OpenSearch: heap JVM, file descriptors, vm.max_map_count
, SSD, настройка refresh_interval
и размеров сегментов.
- Визуализации: предпочитайте аггрегации вместо выгрузки «сырых» данных; оптимизируйте Data Views (узкие шаблоны индексов).
10) Логирование и наблюдаемость
OSD: настройки логирования (stdout/файл, verbose).
- OpenSearch: собственные логи + аудит Security плагина.
- Метрики: собственные панели Observability (лог‑панель, трейсинг через OpenTelemetry/Jaeger, метрики Prometheus → exporters).
11) Типовые конфигурации (фрагменты)
OSD → OpenSearch (минимум)
- snippet.yaml
server.host: "0.0.0.0"
opensearch.hosts:
- "https://os-coordinator:9200"
opensearch.ssl.verificationMode: full # в прод
opensearch.username: "kibanaserver" # сервисный пользователь OSD
opensearch.password: "<SECRET>"
opensearch_security.multitenancy.enabled: true
Шаблон индексов без реплик для стенда
- snippet.bash
curl -k -u admin:'...' -X PUT https://os:9200/_index_template/logs \
-H 'Content-Type: application/json' -d '{
"index_patterns": ["logs-*","fluentbit-*","filebeat-*","logstash-*"],
"template": { "settings": { "index.number_of_replicas": 0 } }
}'
12) Практические рекомендации
Разделяйте роли: сервисные пользователи OSD, шипперы, администраторы — отдельные учётки и роли.
-
Отладка YAML/UI: ошибки
duplicated mapping key
и кавычки в
URL — самые частые при старте OSD.
-
RBAC по минимуму: давайте только нужные права (наборы действий:
read
,
crud
,
create_index
и т. п.).
-
Tenants: используйте для команд/проектов, чтобы изоляционно хранить Saved Objects.
-
ISM вместо ILM: в OpenSearch применяется
Index State Management.
-
Документируйте Data Views: фиксируйте шаблоны индексов и поле времени — это влияет на весь UI.
13) Что считать «состоянием» и как бэкапить
Состояние UI: Saved Objects (визуализации, дашборды, lens, data views) — в системном индексе OpenSearch.
- Бэкап: делайте снапшоты OpenSearch (репозиторий snapshot). Для миграций между стендами — экспорт/импорт Saved Objects из UI.
- Конфиги: хранятся на узлах OSD/OpenSearch/Logstash — версионируйте в Git.
14) Мини‑чеклист для прод‑ввода
[ ] TLS на всех каналах + проверка CA.
- [ ] Отдельный сервисный пользователь для OSD; отдельные пользователи для шипперов и людей.
- [ ] HA OSD (≥2 инстанса) за LB; единые секреты сессий.
- [ ] OpenSearch: ≥3 узла, снапшоты, мониторинг heap/IO.
- [ ] ISM‑политики для логов, тайм‑базовые индексы.
- [ ] Сетевые
ACL:
5601
наружу (или за VPN),
9200
— только доверенным источникам.
- [ ] Логи OSD и аудит OpenSearch подключены в вашу SIEM/мониторинг.
Итог: OSD — тонкий UI‑слой над OpenSearch, безопасно проксирующий запросы пользователей и хранящий артефакты интерфейса в системном индексе. Масштабирование достигается горизонтальным увеличением инстансов OSD и правильной архитектурой кластера OpenSearch; безопасность — через RBAC/тенанты/TLS и сегментацию сети.