Дерево принятия решений - Техническая поддержка 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:: Дерево принятия решений является живым документом и должно дополняться по мере выявления новых типовых проблем и паттернов диагностики.