Загрузка данных


Ниже — вариант выполнения заданий. В реальном анализе формулировки уточняются по логам, метрикам и данным мониторинга.

Часть 1. Алгоритмы анализа ошибок

Задание 1. Метод «5 Почему»

Сценарий А: «Неверное имя пользователя или пароль»

Почему пользователи не могут войти?
→ Система отклоняет учётные данные как неверные.

Почему система отклоняет учётные данные?
→ Введённый пароль не совпадает с хэшем пароля в БД/AD.

Почему пароль не совпадает?
→ Пользователи вводят старый пароль.

Почему пользователи вводят старый пароль?
→ Пароли были централизованно изменены/сброшены, но пользователи не получили уведомление.

Почему пользователи не получили уведомление?
→ Нет регламента оповещения и проверки после массового изменения политики аутентификации.

Корневая причина: отсутствие change management и уведомления пользователей при массовом изменении учётных данных.
Решение: уведомить пользователей, выдать временные пароли/инструкцию сброса, добавить обязательное оповещение и проверку на тестовой группе перед массовым изменением.

Сценарий Б: «500 Internal Server Error» при оформлении заказа

Почему возникает ошибка 500?
→ В сервисе заказов возникает необработанное исключение.

Почему возникает необработанное исключение?
→ NullReferenceException при расчёте доставки/создании заказа.

Почему возникает NullReferenceException?
→ В заказе отсутствует обязательное поле, например адрес или способ доставки.

Почему поле отсутствует?
→ API и фронтенд принимают неполные данные, валидация не срабатывает.

Почему валидация не срабатывает?
→ Требования и тесты не покрывали этот кейс; нет обязательной серверной проверки входных данных.

Корневая причина: отсутствие входной валидации и обработки ошибок при оформлении заказа.
Решение: добавить серверную и клиентскую валидацию, проверки на null, глобальный обработчик ошибок, автотесты и мониторинг.

---

Задание 2. Диаграмма Исикавы

Проблема: «За последнюю неделю время отклика системы выросло с 0.5 до 3.5 секунд».

Категория Возможные причины
Люди (People) Рост нагрузки из-за маркетинговой рассылки; ошибки при релизе; недостаточная квалификация; отсутствие дежурного
Процессы (Process) Неоптимизированные запросы; нет code review; нет нагрузочного тестирования; частые релизы без rollback
Оборудование (Equipment) Нехватка CPU/RAM; медленные диски; износ серверов; перегрузка виртуальной машины
Материалы (Materials) Рост объёма БД; большие логи; неоптимизированные изображения/файлы; тяжёлые ответы API
Среда (Environment) Рост числа пользователей; сетевые задержки; внешние API; «шумные соседи» в виртуализации
Управление (Management) Нет SLA и мониторинга; нет capacity planning; не выделен бюджет; нет регламента реагирования

Текстовый вид:

```text
Люди                    Процессы                    Оборудование
   |                       |                           |
   |-- Рост нагрузки       |-- Нет оптимизации          |-- Нехватка CPU/RAM
   |-- Ошибки релиза       |-- Нет load-тестов          |-- Медленные диски
   |-- Нет дежурного       |-- Нет code review          |-- Перегрузка ВМ
   |                       |                           |
   +-----------------------|---------------------------+
                           |
                    ПРОБЛЕМА: Время отклика
                     выросло с 0.5 до 3.5 сек
                           |
   +-----------------------|---------------------------+
   |                       |                           |
   |-- Рост БД             |-- Рост пользователей       |-- Нет SLA/мониторинга
   |-- Большие логи        |-- Сетевые задержки         |-- Нет capacity planning
   |-- Тяжёлые файлы       |-- Внешние API              |-- Нет бюджета
   |                       |                           |
Материалы               Среда                       Управление
```

---

Задание 3. Метод Pareto

Исходные данные: всего 140 инцидентов.

Тип ошибки Кол-во % от общего Накопленный %
Ошибка подключения к БД 45 32,14% 32,14%
Таймаут при загрузке страницы 30 21,43% 53,57%
Ошибка интеграции с API 20 14,29% 67,86%
NullReferenceException 12 8,57% 76,43%
Другое 10 7,14% 83,57%
Ошибка валидации данных 8 5,71% 89,29%
Ошибка сессии (истекла) 7 5,00% 94,29%
Недостаточно прав доступа 5 3,57% 97,86%
Повреждение данных 3 2,14% 100,00%
Итого 140 100% 

Какие типы ошибок составляют 80% всех инцидентов?
→ Ошибка подключения к БД, таймаут при загрузке страницы, ошибка интеграции с API, NullReferenceException, «Другое». Суммарно они дают 117 инцидентов = 83,57%.

На какие типы ошибок следует направить усилия в первую очередь?
→ В первую очередь: ошибка подключения к БД и таймаут при загрузке страницы, затем ошибка интеграции с API.

Меры для двух самых частых типов ошибок:

1. Ошибка подключения к БД: увеличить/настроить пул соединений, найти утечки соединений, оптимизировать запросы, настроить retry/circuit breaker, мониторить БД и диск.
2. Таймаут при загрузке страницы: профилирование, индексы, кэширование, CDN, асинхронные операции, балансировка нагрузки, контроль SLA по времени ответа.

---

Часть 2. Практическое применение алгоритмов анализа

Задание 4. Комплексный анализ ошибки (RCA)

Классификация ошибки:

· Тип: Конфигурационная / эксплуатационная.
· Компонент: SQL Server, БД PortalDB, диск C:, пул JDBC-соединений.
· Критичность: Critical.
· Влияние на пользователей: 250 заявок за 45 минут, вход в корпоративный портал невозможен, бизнес-процессы остановлены.

Метод «5 Почему»:

1. Почему пользователи не могли войти?
      → Приложение не могло получить соединение с БД, возникал JDBC timeout.
2. Почему приложение не могло получить соединение?
      → Пул соединений исчерпался, БД была недоступна/не отвечала.
3. Почему БД была недоступна?
      → SQL Server не мог корректно работать с PortalDB: журнал транзакций заполнен.
4. Почему журнал транзакций заполнен?
      → Диск C: был заполнен на 99%, журнал не мог расти и не очищался.
5. Почему диск был заполнен и не очищался?
      → Не было мониторинга свободного места, автоматического обслуживания журналов БД и контроля роста логов.

Корневая причина: отсутствие мониторинга и регламента обслуживания дискового пространства и журналов БД, что привело к заполнению диска, остановке БД и недоступности портала.

Краткосрочное решение:
→ В 14:50 очистили логи БД и дисковое пространство, освободили место, проверили/перезапустили сервисы. Система восстановлена в 15:08.

Долгосрочное решение:
→ Настроить мониторинг диска и журналов с алертами на 80%/90%; автоматические бэкапы и очистку/truncate журналов; ротацию логов; расширение диска; capacity planning; health-check БД и пула соединений; runbook для дежурных; регулярные нагрузочные тесты.

Оценка RTO и RPO:

· RTO системы: 4 часа. Фактическое время простоя: 45 минут.
    → Соблюдено.
· RPO системы: 15 минут. Потери данных: 35 минут.
    → Не соблюдено.

---

Задание 5. Дерево решений для ошибки «Приложение не открывается»

```text
Приложение не открывается
├── Ошибка у одного пользователя?
│   ├── Да → локальная проблема
│   │   ├── Проверить права доступа
│   │   │   ├── Нет прав → выдать права / обратиться к администратору
│   │   │   └── Права есть → перейти к сети
│   │   ├── Проверить сетевое подключение / VPN
│   │   │   ├── Нет сети/VPN → восстановить подключение
│   │   │   └── Сеть есть → перейти к браузеру/клиенту
│   │   ├── Проверить кэш, cookies, версию браузера
│   │   │   ├── Ошибка исчезла → очистить кэш, обновить браузер
│   │   │   └── Не исчезла → переустановить клиент/проверить устройство
│   │   └── Собрать логи клиента, скриншот, время ошибки
│   └── Нет → ошибка у всех пользователей
│       ├── Проверить доступность сервера
│       │   ├── Сервер жив?
│       │   │   ├── Нет → восстановить сервер/ВМ
│       │   │   └── Да → проверить службы приложения
│       │   │       ├── Служба остановлена → запустить
│       │   │       └── Служба работает → проверить БД
│       │   └── Сеть работает?
│       │       ├── Нет → восстановить сеть/DNS/балансировщик
│       │       └── Да → проверить БД
│       ├── Проверить БД
│       │   ├── БД недоступна → восстановить / переключить на реплику
│       │   ├── Диск или журнал заполнен → очистить / расширить
│       │   └── БД доступна → проверить пул соединений
│       └── Проверить обновления и конфигурацию
│           ├── Было обновление сегодня?
│           │   ├── Да → откатить обновление / исправить конфиг
│           │   └── Нет → проверить логи, метрики, последние изменения
│           └── Проверить внешние зависимости/API
└── Не удалось классифицировать → эскалация, сбор логов, запуск RCA
```

---

Задание 6. Анализ ошибок в логах

Типы ошибок и количество:

Тип Количество
Pool empty. Unable to fetch a connection in 30 seconds 3
NullReferenceException 3
Connection timeout. Unable to acquire JDBC Connection 3
WARNING: Disk space: 15% remaining on drive C: 1

Итого: 9 ERROR и 1 WARNING.

Самая частая ошибка:
→ Три ошибки встречаются по 3 раза: Pool empty, NullReferenceException, Connection timeout. Если считать только ERROR, они делят первое место.

Самая критичная ошибка:
→ Pool empty / Connection timeout — они блокируют работу с БД и делают приложение недоступным.

Есть ли предупреждение?
→ Да: Disk space: 15% remaining on drive C:.

Какая ошибка, скорее всего, является корневой причиной для остальных?
→ Нехватка дискового пространства и связанная с ней недоступность/перегрузка БД.
Обоснование: warning о диске, затем Connection timeout, Pool empty, а NullReferenceException выглядит как вторичное следствие неполученного соединения или некорректной обработки ошибки.

Решение для самой частой ошибки / группы ошибок:
→ Освободить диск и обслужить журналы БД; проверить доступность SQL Server; увеличить/настроить пул соединений; устранить утечки соединений; настроить таймауты, retry и circuit breaker; добавить мониторинг диска, БД и пула соединений; исправить обработку NullReferenceException, чтобы ошибка не скрывала первопричину.