Показаны различия между двумя версиями страницы.
— |
архитектура_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/ | ||
+ | |||
+ | --- | ||
+ | |||
+ | **Итог: |