Показаны различия между двумя версиями страницы.
| — |
архитектура_osd [2025/09/13 21:46] (текущий) kirill создано |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | # Архитектура OpenSearch Dashboards (OSD) — практический обзор | ||
| + | Этот документ описывает **логическую архитектуру OpenSearch Dashboards (OSD)**, его место в экосистеме OpenSearch и типовые потоки данных/ | ||
| + | |||
| + | > OSD — это веб‑интерфейс для визуализации и анализа данных в кластере OpenSearch. Сам по себе он **без состояния** (stateless) — все артефакты (визуализации, | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 1) Роль OSD в экосистеме OpenSearch | ||
| + | |||
| + | - **Клиентский UI (React)** для Discover/ | ||
| + | - **Прокси‑слой** к OpenSearch API: OSD не ходит напрямую в data‑узлы, | ||
| + | - **Механизм сохранённых объектов (Saved Objects)** — хранит метаданные UI в специальном системном индексе (в дистрибуциях встречаются названия `.kibana_*` или `.opensearch-dashboards*` — зависит от версии/ | ||
| + | - **Интеграция с плагином безопасности OpenSearch** (RBAC, многоарендность/ | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 2) Высокоуровневая схема | ||
| + | |||
| + | ```mermaid | ||
| + | flowchart LR | ||
| + | subgraph Users[" | ||
| + | U1[User A] | ||
| + | U2[User B] | ||
| + | end | ||
| + | |||
| + | subgraph Edge[" | ||
| + | LB[(LB: 5601/tcp)] | ||
| + | end | ||
| + | |||
| + | subgraph OSD[" | ||
| + | D1[OpenSearch Dashboards #1] | ||
| + | D2[OpenSearch Dashboards #2] | ||
| + | end | ||
| + | |||
| + | subgraph OS[" | ||
| + | CM[(Cluster Manager)] | ||
| + | C1[(Data/ | ||
| + | C2[(Data/ | ||
| + | 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/ | ||
| + | ``` | ||
| + | |||
| + | **Порты по умолчанию** | ||
| + | - OSD слушает `5601/tcp` (HTTP по умолчанию). | ||
| + | - OpenSearch API — `9200/tcp` (HTTPS при включённой безопасности). | ||
| + | - Logstash (beats input) — `5044/tcp` (если используется). | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 3) Внутренние компоненты OSD | ||
| + | |||
| + | - **Node.js‑сервер OSD** | ||
| + | - Прокси к OpenSearch, управление сессиями, | ||
| + | - Логи по умолчанию в stdout; можно направить в файл. | ||
| + | - **Платформа плагинов** | ||
| + | - Плагины UI/ | ||
| + | - **Saved Objects** | ||
| + | - Хранятся в системном индексе в кластере. | ||
| + | - Многоарендность (tenancy): артефакты разделяются по тенантам (`Global`, `Private` и настраиваемые). | ||
| + | - **Data Views (бывш. Index Patterns)** | ||
| + | - Мост между UI и индексами/ | ||
| + | - Определяет поле времени, | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 4) Аутентификация и авторизация | ||
| + | |||
| + | - **Кто аутентифицирует? | ||
| + | - **Сервисный пользователь OSD** (`kibanaserver` или аналог) — для фоновых операций OSD; не путать с пользовательскими сессиями. | ||
| + | - **Многоарендность (Tenants)** — логическое разделение артефактов UI: приватные/ | ||
| + | - **Роли и маппинги** — разрешения на индексы (`read`, `crud`, `create_index` и т. п.) + доступ к функциональности плагинов. | ||
| + | |||
| + | **Типичный поток аутентификации** | ||
| + | 1. Пользователь открывает `http(s):// | ||
| + | 2. После успешного логина OSD хранит информацию о сессии (cookie/ | ||
| + | 3. OpenSearch Security проверяет права (RBAC), тенант, | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 5) Потоки запросов и кэширование | ||
| + | |||
| + | - **Поисковые запросы**: | ||
| + | - **Агрегации/ | ||
| + | - **Кэширование**: | ||
| + | - **Большие выборки**: | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 6) Инжест и жизненный цикл данных | ||
| + | |||
| + | ```mermaid | ||
| + | sequenceDiagram | ||
| + | participant Host as Linux host | ||
| + | participant Shipper as Shipper (Fluent Bit/ | ||
| + | participant LS as Logstash (optional) | ||
| + | participant OS as OpenSearch | ||
| + | participant OSD as OSD | ||
| + | Host->> | ||
| + | Shipper->> | ||
| + | LS-->> | ||
| + | Shipper-->> | ||
| + | OS-->> | ||
| + | OSD-->> | ||
| + | ``` | ||
| + | |||
| + | - **Шаблоны/ | ||
| + | - **ISM (Index State Management)**: | ||
| + | - **Репликация**: | ||
| + | - **Именование индексов**: | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 7) Сеть и TLS | ||
| + | |||
| + | - **TLS слои** | ||
| + | 1. Браузер ⇄ OSD (`5601`): чаще TLS завершается на балансировщике/ | ||
| + | 2. OSD ⇄ OpenSearch (`9200`): HTTPS + проверка сертификатов (в прод). | ||
| + | 3. Отправители ⇄ Logstash/OS (`5044/ | ||
| + | - **Сегментация**: | ||
| + | - **Заголовки безопасности**: | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 8) Масштабирование и HA | ||
| + | |||
| + | - **OSD горизонтально**: | ||
| + | - **Статусность**: | ||
| + | - **OpenSearch**: | ||
| + | - **Снапшоты**: | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 9) Производительность и лимиты | ||
| + | |||
| + | - **OSD (Node.js)**: | ||
| + | - **OpenSearch**: | ||
| + | - **Визуализации**: | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 10) Логирование и наблюдаемость | ||
| + | |||
| + | - **OSD**: настройки логирования (stdout/ | ||
| + | - **OpenSearch**: | ||
| + | - **Метрики**: | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 11) Типовые конфигурации (фрагменты) | ||
| + | |||
| + | **OSD → OpenSearch (минимум)** | ||
| + | ```yaml | ||
| + | server.host: | ||
| + | opensearch.hosts: | ||
| + | - " | ||
| + | opensearch.ssl.verificationMode: | ||
| + | opensearch.username: | ||
| + | opensearch.password: | ||
| + | opensearch_security.multitenancy.enabled: | ||
| + | ``` | ||
| + | |||
| + | **Шаблон индексов без реплик для стенда** | ||
| + | ```bash | ||
| + | curl -k -u admin:' | ||
| + | -H ' | ||
| + | " | ||
| + | " | ||
| + | }' | ||
| + | ``` | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 12) Практические рекомендации | ||
| + | |||
| + | - **Разделяйте роли:** сервисные пользователи OSD, шипперы, | ||
| + | - **Отладка YAML/UI:** ошибки `duplicated mapping key` и кавычки в URL — самые частые при старте OSD. | ||
| + | - **RBAC по минимуму: | ||
| + | - **Tenants: | ||
| + | - **ISM вместо ILM:** в OpenSearch применяется **Index State Management**. | ||
| + | - **Документируйте Data Views:** фиксируйте шаблоны индексов и поле времени — это влияет на весь UI. | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 13) Что считать «состоянием» и как бэкапить | ||
| + | |||
| + | - **Состояние UI**: Saved Objects (визуализации, | ||
| + | - **Бэкап**: | ||
| + | - **Конфиги**: | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 14) Мини‑чеклист для прод‑ввода | ||
| + | |||
| + | - [ ] TLS на всех каналах + проверка CA. | ||
| + | - [ ] Отдельный сервисный пользователь для OSD; отдельные пользователи для шипперов и людей. | ||
| + | - [ ] HA OSD (≥2 инстанса) за LB; единые секреты сессий. | ||
| + | - [ ] OpenSearch: ≥3 узла, снапшоты, | ||
| + | - [ ] ISM‑политики для логов, тайм‑базовые индексы. | ||
| + | - [ ] Сетевые ACL: `5601` наружу (или за VPN), `9200` — только доверенным источникам. | ||
| + | - [ ] Логи OSD и аудит OpenSearch подключены в вашу SIEM/ | ||
| + | |||
| + | --- | ||
| + | |||
| + | **Итог: | ||