﻿# Диагностика ELMA Cortex

> [HTML Version](cortex-troubleshooting.html)

При ошибках и сбоях в **ELMA Cortex** используйте диагностику для поиска проблем. Диагностические файлы можно изучить для самостоятельного устранения неполадок или предоставить в техподдержку для анализа.

Доступно несколько способов диагностики:

- [скрипт диагностики](#script);

- [команды для диагностики вручную](#commands);

- [сбор HAR‑файлов в браузере](#har-files).

## Запуск скрипта диагностики

1. Перейдите в папку установки **ELMA Cortex**:

````
cd ~/elma-cortex

2. ````
Если вы запускаете диагностику впервые, настройте права доступа:

````
chmod +x ./diagnose.sh

3. ````
Запустите скрипт диагностики — по умолчанию произойдёт сбор логов за последние 30 дней:

````
./diagnose.sh

````
Скрипт создаст архив `<имя-проекта>-diagnostics-<timestamp>.tar.gz`, содержащий всю собранную диагностическую информацию.

Чтобы изменить настройки для сбора диагностической информации, при запуске скрипта используйте параметры, описанные ниже.

### Параметры скрипта диагностики

| | | |
|------|------|------|
| **Параметр** | **Описание** | **Значение по умолчанию** |
| \[OBJECT\] | Название проекта или стека Docker Swarm для диагностики | Из файла переменных окружения `.env`. Если название не задано, используется значение `elma-cortex` |
| \[OBJECT\] | Период времени для сбора логов | Формат:<br>- `30m` — 30 минут;<br>- `1h` — 1 час;<br>- `2h` — 2 часа;<br>- `24h` — 24 часа;<br>- `7d` — 7 дней.<br>По умолчанию — 30 дней |
| \[OBJECT\] | Название выходного файла диагностики | Указывается только название, без расширения `.tar.gz`<br>Формат: `<имя-проекта>-diagnostics-<timestamp>` |
| \[OBJECT\] | Вызов списка доступных параметров | — |


### Примеры сбора диагностических данных

Рассмотрим примеры команд для запуска диагностики:

- за последние два часа:

````
./diagnose.sh --logs-since 2h

- ````
за последние 24 часа с заданным именем файла:

````
./diagnose.sh --logs-since 24h --output issue-diagnostics

- ````
за неделю, если при настройке переменных окружения задано пользовательское название проекта:

````
./diagnose.sh --project-name my-cortex --logs-since 7d

### ````
Содержание файлов с диагностическими данными

Скрипт диагностики собирает информацию о работе **ELMA Cortex** по нескольким папкам, которые объединяются в архив:

- [system](#system) — системная информация об установке и окружении;

- [logs](#logs) — логи сервисов;

- [containers и services](#containers-services) — информация:

	- о контейнерах при использовании Docker Compose;

	- о сервисах при использовании Docker Swarm;

- [config](#config) — конфигурация Docker и окружения. Стандартная конфиденциальная информация, такая как пароли и API‑ключи, в файле конфигурации окружения автоматически заменяется на значение `\*\*\*MASKED\*\*\*`.

````
начало внимание

````
Перед отправкой файлов диагностики в техподдержку проверьте, что в них не содержатся чувствительные данные.

````
конец внимание

````
Рассмотрим, какую информацию собирает скрипт диагностики.

1. **Системная информация**

| | |
|------|------|
| **Файл** | **Содержимое** |
| \[OBJECT\] | Версия ОС, память, дисковое пространство, информация о CPU |
| \[OBJECT\] | Версия Docker и конфигурация |
| \[OBJECT\] | Статус сервисов Docker Compose — только при использовании Docker Compose |
| \[OBJECT\] | Узлы Swarm и информация о кластере — только при использовании Docker Swarm |
| \[OBJECT\] | Сервисы стека и реплики — только при использовании Docker Swarm |
| \[OBJECT\] | История задач, включая сбои — только при использовании Docker Swarm |
| \[OBJECT\] | Запущенные и остановленные контейнеры |
| \[OBJECT\] | Конфигурация сетей Docker |
| \[OBJECT\] | Информация о томах Docker |
| \[OBJECT\] | Метаданные секретов Docker — только при использовании Docker Swarm |
| \[OBJECT\] | Проверки работоспособности сервисов |
| \[OBJECT\] | Недавние события Docker |


2. **Логи сервисов**.

Лог-файлы всех сервисов **ELMA Cortex**:

- `gamma-apps.log` — основной сервис приложения;

- `gamma-tasks.log` — фоновый обработчик задач;

- `caddy.log` — обратный прокси;

- `mongo-db.log` — MongoDB;

- `rabbit.log` — RabbitMQ;

- `redis.log` — Redis;

- `minio.log` — хранилище MinIO S3;

- `qdrant.log` — векторная база данных.

3. **Детали контейнеров или сервисов**:

- данные о конфигурации, состояние и метаинформация по каждому запущенному контейнеру или сервису в формате JSON;

- данные задач Docker — только при использовании Docker Swarm.

4. **Конфигурация**:

- файлы `docker-compose.yml` при использовании Docker Compose или `stack-\*.yml`** **при использовании Docker Swarm;

- файл `env-sanitized.txt` — конфигурация окружения с замаскированными паролями;

- файл `install.md` — документация по установке.

### Устранение неполадок скрипта диагностики

Рассмотрим проблемы, которые могут возникать при использовании скрипта диагностики.

1. **Отказано в доступе (ошибка “Permission Denied”)**.

Если вы получаете ошибку доступа, примените команды:

````
chmod +x diagnose.sh  
./diagnose.sh

2. ````
**Скрипт не найден при использовании Docker Compose**.

Убедитесь, что во время запуска скрипта вы находитесь в правильной папке:

````
ls -la diagnose.sh 

````
Если скрипт отсутствует в нужной папке, скопируйте его из архива установки.

3. **Проблемы с правами в Docker**.

Если команды Docker завершаются с ошибками доступа, вы можете:

- запускать скрипт с помощью утилиты `sudo`:

````
sudo ./diagnose.sh

- ````
добавить пользователя в группу `docker`. Для этого потребуется повторный вход:

````
sudo usermod -aG docker \$USER

## ````
Команды для диагностики вручную

Рассмотрим команды, которые можно использовать для сбора данных вручную.

### Диагностика в Docker Compose

1. Проверить статус сервисов:

````
docker compose ps --all

2. ````
Посмотреть логи определённого сервиса:

````
docker compose logs gamma-apps --since 1h

3. ````
Посмотреть объединённые логи:

````
docker compose logs --since 1h

4. ````
Получить данные контейнера:

````
docker inspect \$(docker compose ps -q gamma-apps)

5. ````
Проверить готовность сервиса к работе:

````
docker exec \$(docker compose ps -q gamma-apps) curl -sf http://localhost:8080/api/int/v1/info/application/health

### ````
Диагностика в Docker Swarm

1. Получить список сервисов стека:

````
docker stack services elma-cortex

2. ````
Получить список задач стека, включая завершённые с ошибкой:

````
docker stack ps elma-cortex --no-trunc

3. ````
Просмотреть логи сервиса:

````
docker service logs elma-cortex\_gamma-apps --since 1h

4. ````
Получить данные сервиса:

````
docker service inspect elma-cortex\_gamma-apps

5. ````
Проверить статусы узлов Swarm:

````
docker node ls

## ````
Сбор HAR-файлов из браузера

Файлы HAR содержат запись сетевого взаимодействия между браузером и сервером. Они помогают при диагностике: проблем с API, ошибок аутентификации, сбоев при работе интерфейса. Способ записи HAR‑файла зависит от используемого браузера и описан в его документации.

HAR-файл содержит:

- HTTP-запросы и ответы;

- заголовки запросов и ответов;

- тела запросов и ответов;

- информацию о времени;

- значения cookie.

**Важно**: HAR-файлы включают конфиденциальную информацию, включая:

- токены аутентификации и cookies;

- данные сессии;

- персональные данные из ответов API.

Перед отправкой HAR-файлов в техподдержку:

1. Проверьте, что в файле не содержится конфиденциальная информация.

2. Записывайте активность в течение минимального времени, необходимого для воспроизведения проблемы.

3. По возможности используйте тестовую учётную запись.