Термінове виправлення багів на сайті: діагностика та hotfix

Прод падає після деплою, а клієнти вже бачать помилки — рахунок іде на хвилини. Ми беремо інцидент у роботу: знаходимо причину, випускаємо виправлення та підтверджуємо результат на проді. Розбір збою під ключ — від сигналу до перевірки, з регламентом, щоб таке не повторювалося.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Термінове виправлення багів на сайті: діагностика та hotfix
Простий
~2-3 години
Часті запитання

Термінове виправлення багів: де ламається прод після випуску

Збій після випуску рідко виглядає як «сайт ліг повністю».

Частіше прод падає після релізу точково: помилка на сайті у клієнтів проявляється у частини користувачів — у тих, хто повернувся із збереженим кошиком, в окремої ролі, на мобільному браузері або в регіоні з іншим часовим поясом.

На тестовому контурі ті самі сценарії проходять зеленими, бо там немає ні реального обсягу даних, ні поведінки живих сесій.

Поки картина не зібрана, команда витрачає години на діагностику збою на проді замість усунення. Логи читаються шматками, проблему намагаються відтворити вручну, лагодять симптом в одному сценарії — і за день отримують ту саму відмову в сусідньому.

Ціна такої години не лише у втрачених заявках, а й у недовірі: клієнти вже написали в підтримку, а чіткої відповіді «що зламано і коли полагодимо» у них немає.

Діагностика впирається не в складність коду, а у відсутність контексту. Немає наскрізного трасування запиту, помилки різних сервісів лежать у різних логах, реліз випускається цілком, а не частинами.

Тому неможливо швидко відповісти на головне питання: яка зміна і який стан даних перетворили робочий сценарій на відмову.

Розбираємо, як термінове виправлення багів перетворюється на передбачувану процедуру.

Спочатку фіксуємо деградацію і відкочуємо небезпечну ділянку, потім звужуємо причину за трасуваннями й метриками, закриваємо проблему точковим патчем і додаємо перевірку — щоб той самий збій не повернувся з наступним релізом.

Що дає керований розбір збоїв замість ручних правок

Розбір збою починається не з правки, а із заміру: скількох користувачів зачеплено, які сценарії та групи операцій віддають помилку, що змінювалося в останніх випусках.

Це задає пріоритет — спочатку закривається те, що б'є по оплаті, входу й оформленню замовлення, а не те, що гучніше звучить у зверненнях.

Час від сигналу до робочої версії стає керованою величиною: типовий шлях — відкат до попередньої стабільної збірки за хвилини, а виправлення готується вже без поспіху і навмання.

Першопричину фіксуємо, а не заліковуємо симптом. Знімок стану запиту, стек викликів і журнали з Sentry дають точку відмови, а повторюваний сценарій перетворюється на перевірку, яка падає до правки і проходить після.

Звідси й зниження повторних помилок: збій не повертається через місяць в іншому місці, бо його ловить тест, а не користувач.

Наступні релізи перестають бути лотереєю. Виправлення йде через той самий контур, що й плановий випуск: регресійний набір на критичні сценарії, випуск на частку трафіку зі спостереженням, автоматичний відкат у разі зростання частки помилок. Так стабільність релізів не залежить від того, хто саме чергує вночі.

Навантаження на команду підтримки знижується не саме собою — зникає цілий клас збоїв, які щотижня розбирали вручну. Однотипні звернення згортаються в один інцидент з відомою причиною і зрозумілим порядком дій, замість листування й повторних діагностик з нуля.

Варіанти реакції на інцидент: правка, відкат, ізоляція модуля

Який варіант вибрати, визначають дві речі: де межа дефекту і наскільки дорога пауза в роботі сервісу. Відкат релізу — найшвидший хід, якщо збій прийшов разом з останнім випуском, а попередня збірка стабільна.

Точкова правка на проді виправдана, коли причина зрозуміла й локалізована в одній ділянці коду, а відкат повернув би разом із дефектом і робочий функціонал.

Варіант Коли підходить Обмеження
Відкат релізу Дефект з'явився з останнім випуском, попередня збірка робочого стану Необоротні зміни схеми даних, втрата нових доопрацювань, відкат не проходить за пов'язаних релізів
Точкова правка на проді Збій локалізовано, причину підтверджено, обсяг змін мінімальний Обходить штатний цикл перевірок, потребує швидкого повторного проходу тестів і подальшого перенесення правки в основну гілку
Ізоляція проблемного модуля Модуль не входить в основний сценарій, решта сервісу працює Частина функціоналу недоступна користувачам, потрібні заглушки й контроль залежностей
Аварійна правка без простою Правка вмикається перемикачем конфігурації Потрібна заздалегідь підготовлена точка перемикання, інакше з'являється другий шлях виконання

Окремо про перемикання конфігурації: воно дає правку за секунди, але тільки якщо точка перемикання закладена до інциденту. Коли її немає, команда отримує два розбіжні шляхи виконання і розбір причин замість відновлення.

Вибір способу фіксуємо в регламенті: хто ухвалює рішення, за якою ознакою і хто підтверджує повернення сервісу. Без цього перші хвилини інциденту йдуть на обговорення, а не на відновлення.

Порядок роботи з багами: від сигналу моніторингу до перевірки на проді

Регламент розбору інциденту фіксує не лише кроки, а й те, хто ухвалює рішення про терміновий випуск. Нижче — шлях, який проходить кожен баг: від сигналу моніторингу до підтвердження, що правка працює на проді.

  1. Прийом сигналу. Черговий інженер отримує алерт моніторингу або звернення підтримки, звіряє з журналом помилок і оцінює масштаб: частка зачеплених сесій і чи блокує збій ключовий сценарій.

  2. Відтворення помилки. Збираємо мінімальний сценарій — кроки, дані, середовище, версія релізу. Баг без стійкого відтворення відокремлюємо: правка «на око» тут не випускається.

  3. Локалізація. За трасуванням і логами звужуємо область до конкретного запиту й модуля, звіряємо з останніми змінами та зовнішніми залежностями, відсікаємо хибні версії.

  4. Правка. Готуємо мінімальний набір змін — тільки причина збою, без попутного рефакторингу: так відкат залишається однозначним, а перевірка швидкою.

  5. Перевірка правки перед випуском. Проганяємо сценарій на копії прода з близькими даними і додаємо регресійний прогін суміжними шляхами, які зачіпає зміна.

  6. Випуск. Збираємо короткий реліз із зрозумілим описом змін і можливістю повернутися на попередню збірку за один крок.

  7. Спостереження після релізу. Стежимо за графіками помилок, часом відповіді та потоком звернень у підтримку; у разі повернення симптому відкочуємо і продовжуємо розбір.

Після закриття інциденту додаємо автотест на відтворений сценарій і запис у базу знань — той самий клас відмови більше не доходить до прода.

Що залишається в проєкті: конфігурації, регламенти, документація

Разова аварійна правка прибирає симптом за хвилини, але без артефактів через місяць уже ніхто не пам'ятає, чому в конфігурації з'явився виняток і який сценарій він закривав.

Тому задача вважається закритою не в момент, коли сторінка знову відповідає, а коли замовник отримав на руки комплект документів, за якими наступна правка робиться без археології.

  • Документація по інциденту: хронологія від першого сигналу до стабілізації, симптом, відкинуті гіпотези, підтверджена причина і спосіб усунення.
  • Регламент аварійних правок: хто і на яких умовах змінює продуктивне середовище поза плановим релізом, скільки живе така зміна і коли вона повертається у звичайний цикл.
  • Політики доступу до продового середовища: ролі, мінімально необхідні права, іменні облікові записи замість спільних, строк дії та порядок ротації ключів.
  • Журнал змін: єдина стрічка «дата — автор — що змінено — посилання на збірку і на запис про інцидент», за якою відновлюється причина будь-якої відмінності конфігурації.
  • Схема розгортання з точками відмови: що від чого залежить, які параметри правилися під час аварійної правки і які значення вважаються штатними.
  • Інструкція з відкату: покроково й перевірено на тестовому контурі, щоб рішення «відкочуємося» ухвалювалося за хвилини, а не навмання.
  • Набір перевірок після правки: короткий список ключових сценаріїв плюс додані алерти, щоб повторний збій зловила система, а не клієнт.

З таким комплектом повторний збій розбирають за документами, а не за пам'яттю підрядника, що пішов: інженер відкриває журнал, знаходить причину і вносить правку за хвилини.

Заодно падає залежність проєкту від конкретної людини — введення нового фахівця йде за регламентами, а не за листуванням.

Випадок із практики: як зняли регресію після великого оновлення

Після великого оновлення каталогу й оформлення замовлення частка неуспішних сценаріїв зросла з 1,8% до 9,4%: користувачі доходили до кошика і отримували помилку на підтвердженні.

Звернення в підтримку йшли хвилею, а причина в логах не читалася — оновлення зачіпало суміжні розділи, і симптом проявлявся в різних місцях по-різному.

Спочатку ми зняли зліпок: порівняли шляхи користувачів до і після релізу, знайшли крок, де рветься ланцюжок, і зібрали панель за воронкою в Grafana.

Діагностика показала розсинхрон у шарі доступу до даних — частина запитів ішла в застарілу схему і повертала порожній результат, який клієнтська частина трактувала як збій.

Що зробили і що вийшло

Відкочувати реліз цілком було не можна: у ньому були потрібні бізнесу зміни. Тому правку випустили точково — полагодили шар доступу, додали перевірку сумісності схеми під час запуску і повтор для нестабільних запитів.

Час відновлення сервісу — 47 хвилин від підтвердження причини до робочого релізу, частка неуспішних сценаріїв повернулася до 0,4%, тобто стала нижчою, ніж до оновлення.

Щоб це не повторилося, у перевірки перед випуском додали прогін ключових сценаріїв замовлення й експрес-перевірку суміжних розділів. Повторні звернення клієнтів із тією самою проблемою впали з 63 до 4 за тиждень — отже, причину прибрали, а не зафарбували симптом.

Що робити, якщо помилка відтворюється у клієнтів уже зараз

Поки збій триває, питання «чому» підпорядковане питанню «що робити прямо зараз». Пріоритет інциденту ставимо за трьома ознаками: частка зачеплених клієнтів, відмова критичного сценарію (вхід, оплата, оформлення замовлення) або деградація, наявність обхідного шляху. Найвищий пріоритет — відновлення обслуговування, а не пошук першопричини.

Тимчасове рішення на проді вибираємо з трьох ходів, від швидкого до точкового: відкат останнього релізу до попередньої стабільної збірки, вимкнення підозрілої функції перемикачем зі збереженням решти випуску, переведення трафіку на резервний контур або віддача кешованої відповіді. Кожен крок фіксуємо в журналі з точним часом — із цих позначок потім збирається розбір.

Що повідомляти клієнтам про збій: підтвердження факту, зачеплені сценарії, відомий вплив і час наступного оновлення. Без гіпотез про причину і без обіцянок точного строку — зірваний строк б'є по довірі сильніше за саму відмову. Одна точка контакту і один майданчик публікації статусу, щоб підтримка не розходилася в показаннях.

Паралельно з ремонтом іде діагностика: логи, трасування запитів, відтворення на копії з продовими даними, звуження діапазону до конкретної умови. Після усунення додаємо регрес-тест на сценарій і правило моніторингу, щоб сигнал приходив раніше за клієнта.

Такий порядок закріплено в Регламенті реагування на інциденти, який передаємо разом із порядком ескалації черговому інженеру.

Технічні сумніви: доступи до контуру, середовища, гарантії

Доступ до репозиторію і серверів перевіряємо першим ділом — від нього залежить час до працездатного випуску. Нам достатньо читання коду і окремої гілки для змін: відгалужуємося від поточного стану основної лінії, збираємо правку там і додаємо опис зміни. Ключі видаємо персонально на інженера і відкликаємо того ж дня, коли роботу закрито.

Копію продуктивного контуру піднімаємо з того самого опису інфраструктури і з тими самими версіями залежностей, інакше перевірка бреше. Відповідальність за випуск і вікно фіксуємо письмово до старту: хто підтверджує випуск, що вважаємо відкатом, за якою ознакою зупиняємося.

Збій не відтворюється — з чого почнете?

Збираємо слід: час події, ідентифікатори запитів, знімок черг і журнали на межах. Далі звужуємо умову за навантаженням, типом клієнта і набором даних. Якщо повтор не досягається, ставимо точкове спостереження в проблемній ділянці і чекаємо на нього, а не правимо навмання.

Можна обійтися без копії прода?

Для правок у розмітці й текстах — так, достатньо тестового контуру. Для даних, прав доступу, розрахунків та інтеграцій копія обов'язкова: різниця в налаштуваннях середовищ дає відмови, які на проді вилазять у найневдаліший момент.

Хто відповідає за випуск правки?

Ми — за якість зміни і її перевірку на копії. Випуск виконує сторона з правами в продуктивному контурі: зазвичай ваша за нашою інструкцією, або ми за окремим письмовим підтвердженням. Відкат готуємо заздалегідь і описуємо в тому самому повідомленні.

Обговоримо задачу: що потрібно від вас для підключення до роботи

Щоб включитися в термінове виправлення, не потрібен повний технічний аудит — достатньо мінімального набору ввідних. Чим раніше приходять доступи й опис симптому, тим коротша діагностика: на першому дзвінку ми вже дивимося помилки в журналах, а не збираємо контекст.

Що потрібно від вас, щоб обговорити задачу предметно:

  • Симптом: що саме ламається, на яких сторінках і діях, з якого моменту, чи відтворюється стабільно і за яких умов.
  • Доступи: репозиторій, сервер або панель хостингу, складальний контур, системи моніторингу і журнали — з правами на читання й розгортання.
  • Записи за вікно збою: серверні помилки, помилки в браузері, відповіді зовнішніх сервісів і платіжного шлюзу.
  • Регламент випуску: гілки, порядок розгортання, точка відкату, вікна, коли реліз допустимий.
  • Обмеження: що не можна чіпати, які є домовленості з іншими підрядниками щодо інцидентів і код-рев'ю.
  • Контакт чергового з вашого боку і канал, у якому узгоджуємо дії.

Далі ми повертаємося з оцінкою і планом робіт: передбачувана причина, обсяг правок, порядок випуску і відкату, склад інженерів і строки першого результату.

Підключення до проєкту замовника йде за вашими доступами — переводити проєкт до нас, змінювати інфраструктуру або чекати передачі справ не потрібно. Опишіть задачу в зручному вигляді: частину ввідних ми уточнимо самі на дзвінку.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060