Дерево принятия решений - Техническая поддержка SYNERGY
=========================================================
Как пользоваться этим документом
----------------------------------
Каждый входящий запрос проходит через **три уровня**:
1. **Уровень 1 — Классификация запроса** → определить тип обращения
2. **Уровень 2 — Проверка готовности** → убедиться, что предоставлены необходимые данные
3. **Уровень 3 — Диагностика** → шаги по локализации и устранению проблемы
----
Уровень 1 — Классификация запроса
-----------------------------------
.. code-block:: text
Получен запрос
│
▼
Есть ли формализованное описание проблемы?
│
├── НЕТ ──► ОТКЛОНИТЬ. Запросить описание по шаблону.
│
└── ДА
│
▼
Связан ли запрос с ошибкой штатного функционала платформы?
│
├── ДА ──► [ИНЦИДЕНТ] → перейти к Уровню 2-А
│
└── НЕТ
│
▼
Связан ли запрос с проектированием, бизнес-логикой
или кастомной реализацией клиента?
│
├── ДА ──► ОТКЛОНИТЬ или перевести в [КОНСУЛЬТАЦИЮ]
│ с уведомлением о расходе часов
│
└── НЕТ ──► [КОНСУЛЬТАЦИЯ] → перейти к Уровню 2-Б
----
Уровень 2-А — Проверка готовности: Инцидент
---------------------------------------------
Перед началом диагностики убедиться, что заявитель предоставил:
- Версию платформы
- Среду (dev / test / prod)
- Пошаговое описание воспроизведения ошибки
- Логи, скриншоты, трассировки
- Минимальный сценарий воспроизведения
**Если данные не предоставлены** → приостановить работу, запросить недостающее.
**Если данные есть** → перейти к Уровню 3-А (диагностика инцидента).
----
Уровень 2-Б — Проверка готовности: Консультация
-------------------------------------------------
Убедиться, что заявитель выполнил самостоятельную проработку:
- Изучена документация на `TDD `_
- Проверена база существующих заявок (Хранилище → Реестры → Архив обращений)
- Проведены собственные эксперименты и проверки
- Получена консультация сертифицированных коллег
- Определена категория вопроса по каталогу услуг
**Проверить баланс часов:**
.. code-block:: text
Есть свободные часы поддержки (из 4 ч/мес по dev-лицензии)?
│
├── ДА ──► Принять в работу → Уровень 3-Б
│
└── НЕТ ──► Уведомить о приостановке.
Продолжение только на платной основе.
----
Уровень 3-А — Диагностика инцидента
--------------------------------------
Шаг 1 — Проверка окружения
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Прежде чем диагностировать платформу, исключить инфраструктурные причины:
.. code-block:: text
Выполнены требования промышленной эксплуатации?
│
├── НЕТ ──► Проблема на стороне инфраструктуры.
│ Направить заявителя устранять несоответствие.
│ Зафиксировать как НЕ инцидент платформы.
│
└── ДА ──► Перейти к Шагу 2
**Контрольные параметры окружения:**
- ОЗУ: запас ≥ 20% в штатном режиме
- Диск: ≥ 20 Гб свободно на каждом разделе записи
- БД, процессы, индексы: актуальная версия
- Резервные копии: ≥ 3 консистентных, одна — не старше 24 ч
- ИБП и корректное выключение: настроено
- Мониторинг ресурсов: подключён
Шаг 2 — Первичная локализация по слою
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: text
Определить слой проблемы:
│
├──► ИНФРАСТРУКТУРА
│ Симптомы: недостаток ресурсов сервера, аварийные выключения,
│ нехватка диска/ОЗУ
│ Инструмент: htop, системные логи, мониторинг
│
├──► СУБД (MySQL)
│ Симптомы: зависание запросов, ошибки соединения, медленные операции
│ Инструмент: information_schema.processlist, /var/log/mysql
│
├──► ХРАНИЛИЩЕ / ИНДЕКСЫ (Cassandra / Elasticsearch)
│ Симптомы: ошибки индексации, отказ поиска, rejected execution
│ Инструмент: /var/log/cassandra, /var/log/elasticsearch
│
├──► ПРИЛОЖЕНИЕ (JBoss / Платформа)
│ Симптомы: ошибки в логах, stack trace, зависание процессов
│ Инструмент: /var/log/synergy/server.log, JBoss CLI
│
└──► IDE / CORE (логика приложения на платформе)
Симптомы: ошибки в конкретных реестрах, маршрутах, скриптах
Инструмент: SQL-запросы к БД, анализ app_objects
Шаг 3 — Диагностика по типу проблемы
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**3.1 — Проблема с производительностью / зависание**
.. code-block:: text
Высокая нагрузка CPU или ОЗУ?
│
├── CPU ──► Снять thread dump (kill -3 )
│ Перевести PID нагруженного потока в HEX
│ Найти поток по nid в дампе
│ → Определить: GC, бизнес-логика, deadlock?
│
└── ОЗУ ──► Снять heap dump (jmap -dump:...)
Загрузить в VisualVM / heaphero.io
→ Определить: утечка памяти, какие объекты занимают память?
**3.2 — Ошибка в логах**
.. code-block:: text
Есть stack trace в логах?
│
├── ДА ──► Определить класс и метод источника ошибки
│ Сопоставить с версией платформы
│ Проверить известные проблемы (см. раздел ниже)
│
└── НЕТ ──► Проверить логи смежных компонентов:
MySQL → /var/log/mysql
Cassandra → /var/log/cassandra
Elasticsearch → /var/log/elasticsearch
**3.3 — Ошибка после обновления платформы**
.. code-block:: text
Проблема появилась после обновления?
│
└── ДА
│
▼
Проверить:
1. Актуальность версий БД, процессов и индексов
2. Конфигурационные файлы на изменения:
/opt/synergy/jboss/standalone/configuration/
/opt/synergy/jboss/standalone/deployments/
3. Логи с момента запуска после обновления
4. Совместимость сторонних компонентов (ES, Cassandra, LibreOffice)
**3.4 — Проблема воспроизводится не везде**
.. code-block:: text
Воспроизводится на другом экземпляре платформы той же версии?
│
├── ДА ──► Вероятно инцидент платформы.
│ Зафиксировать минимальный сценарий.
│ Передать в разработку.
│
└── НЕТ ──► Проблема в конфигурации или данных конкретного стенда.
Экспортировать конфигурацию объекта с ошибкой.
Анализировать различия между стендами.
Шаг 4 — Сопоставление с известными проблемами
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
:widths: 35 30 35
* - Симптом
- Вероятная причина
- Действие
* - ``no office manager available``
- Падение инстанса LibreOffice
- Перезапустить LibreOffice и платформу
* - Бесконечные ``cancelRouteItems`` в логах
- Зацикленный условный переход
- Исправить маршрут в Configurator; остановить через REST API
* - ``Access denied`` при сохранении формы
- Фрагментация данных файлов (asf_attachment)
- POST ``/Synergy/rest/asforms/form/attachments/clear``
* - ``Cannot get pdf pages info`` + GhostScript exit code 1
- Неподходящая версия GhostScript
- Установить версию ``9.27~dfsg-2+deb10u5``
* - ``NullPointerException`` в ``arta.reports`` + NULL в ``compiledbinary``
- Битая печатка IReport
- Найти и удалить/заменить ``.jrxml`` в Configurator
* - ``ES rejected execution exception``
- Переполнение bulk-очередей Elasticsearch
- Увеличить ``thread_pool.bulk.queue_size`` в ``elasticsearch.yml``
* - ``Access denied for user 'root'@'localhost'`` при старте
- Тип аутентификации MySQL — ``auth_socket``
- ``ALTER USER ... IDENTIFIED WITH mysql_native_password``
Шаг 5 — Определение обходного пути
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Перед закрытием инцидента обязательно:
.. code-block:: text
Найден обходной путь?
│
├── ДА ──► Зафиксировать. Передать заявителю.
│ Параллельно передать дефект в разработку (если подтверждён).
│
└── НЕТ ──► Зафиксировать отсутствие обходного пути.
Оценить критичность.
При критической ошибке — запросить доступ к окружению:
security_ctkdrt@arta.pro
----
Уровень 3-Б — Диагностика консультации
----------------------------------------
.. code-block:: text
Тип консультации?
│
├──► Локализация и диагностика производительности
│ → Применить: Diagnostic Decision Tree (данный документ)
│ Synergy Health, Synergy Benchmark, Synergy Profiler
│
├──► Архитектура и разработка приложения
│ → Проверить официальную документацию TDD
│ Дать архитектурные рекомендации и паттерны использования
│ Разобрать типовые ошибки проектирования
│
├──► Сопровождение обновлений
│ → Проверить совместимость версий компонентов
│ Рекомендации по миграции данных и приложений
│ Диагностика постобновленческих проблем
│
└──► Консультационное обучение
→ Разъяснение технических решений
Демонстрация типовых сценариев
Ссылки на документацию и учебные материалы
----
Итоговая схема принятия решений
---------------------------------
.. code-block:: text
ВХОДЯЩИЙ ЗАПРОС
│
▼
[1] Есть описание проблемы? ──НЕТ──► ОТКЛОНИТЬ
│ ДА
▼
[2] Это ошибка штатного функционала? ──НЕТ──► [КОНСУЛЬТАЦИЯ]
│ ДА │
▼ ▼
[ИНЦИДЕНТ] Есть часы поддержки?
│ НЕТ ──► Уведомить, приостановить
▼ ДА ──► Диагностика консультации
[3] Предоставлены все данные? ──НЕТ──► Запросить, приостановить
│ ДА
▼
[4] Окружение соответствует требованиям? ──НЕТ──► Проблема инфраструктуры
│ ДА
▼
[5] Локализация по слою:
Инфраструктура / MySQL / ES+Cassandra / JBoss / Core
│
▼
[6] Анализ логов + дампы (thread / heap)
│
▼
[7] Сопоставление с известными проблемами
│
▼
[8] Воспроизводится на чистом стенде? ──НЕТ──► Проблема конфигурации/данных
│ ДА
▼
[9] Зафиксировать дефект + обходной путь ──► ЗАКРЫТЬ / ПЕРЕДАТЬ В РАЗРАБОТКУ
----
.. note::
Дерево принятия решений является живым документом и должно дополняться по мере выявления новых типовых проблем и паттернов диагностики.