Техническое задание № ТЗ-02/2026 · ООО «Пятый склад»
Устранение инцидента на сервере приёма платежей billing-02
Замеры по регламенту инцидентов, освобождение раздела журналов без потери бизнес-данных, процессы и сигналы, уровень журнала службы, права на настройки, скрипт профилактики и postmortem
Скачать ТЗ в PDFбланк с подписями, лист согласования и акт сдачи-приёмки
187 015, г. Северогорск, Складской проезд, д. 5
ИНН 9905 405 512 · КПП 990501001 · ОГРН 1199900054410
+7 (900) 505-55-05 · it@5sklad.example
от 13.10.2026
ООО «Пятый склад»
исполнителям технического задания № ТЗ-02/2026
О задачах работы
Сервис billing принимает оплату доставки на сайте и в приложении «Пятого склада» — около 6 500 платежей в сутки, ночью 300–400 в час. Каждую ночь сверка billing-report сравнивает платежи за день с выпиской банка. Утром бухгалтерия забирает результат сверки и ежемесячные выгрузки платежей.
Сегодня в 02:40 мониторинг прислал два оповещения по серверу billing-02: раздел журналов /var/log/billing заполнен на 94 % и продолжает заполняться, средняя нагрузка выше числа ядер процессора. Платежи проходят с задержкой. Когда раздел заполнится полностью, служба приёма платежей перестанет записывать журнал операций, и по ночным платежам нельзя будет разобрать жалобы клиентов.
Руководитель дежурной смены Марина Котова открыла инцидент первого уровня и вызвала дежурную пару группы эксплуатации. Работа ведётся по регламенту инцидентов РИ-04: сначала замеры, затем восстановление работы, затем причины. Перезагружать сервер нельзя: приём платежей не должен останавливаться дольше чем на несколько секунд.
В течение 24 часов после инцидента жду postmortem. По нему руководство решит, какие изменения внести в настройки и порядок работы, чтобы инцидент не повторился. Скрипт профилактики из этого задания дежурная смена будет запускать на всех серверах billing.
Требования и порядок приёмки изложены ниже. По ходу инцидента связь — с Мариной Котовой, по работе с сервером — с наставником Анной Орловой.
ООО «Пятый склад»
1. Ситуация
«Пятый склад» хранит товары интернет-магазинов и доставляет их покупателям: 14 складов в Северогорске и области, 600 курьеров, около 9 000 отправлений в день. Клиенты оформляют доставку на сайте и в приложении, оплату принимает собственный сервис billing, обращения клиентов разбирает отдел поддержки в сервисе helpdesk.
23 человека: разработка, группа эксплуатации (5 инженеров) и служба информационной безопасности. Внутренние сервисы работают на серверах Ubuntu 24.04 в собственной серверной. Группа эксплуатации устанавливает сервисы по стандарту, следит за их работой и закрывает доступ уволенным сотрудникам. С октября 2026 года в группе эксплуатации проходят производственную практику практиканты колледжа. Они работают парами, получают заявки из очереди группы и сдают работу наставнику. Изменения на рабочих серверах вносит дежурный инженер по отчёту и журналу работ пары.
Группа эксплуатации обслуживает три сервера: helpdesk-01 — сервис заявок отдела поддержки; billing-02 — приём платежей и ночная сверка с банком; ops-03 — сервер группы эксплуатации: скрипты выкладки магазина, общие папки, документы бухгалтерии. Это задание относится к серверу billing-02. Работа ведётся по регламентам компании ПЖ-03 «Политика журналов и хранения данных», РИ-04 «Регламент инцидентов», ПР-06 «Порядок работы группы эксплуатации»; выдержки из них — в Приложении Б.
1.1. Заявка
Работа начинается с заявки в очереди группы эксплуатации. Её текст приводится полностью.
Оповещения 02:40: /var/log/billing — 94 %, load average выше числа ядер. Время ответа на оплату выросло с 0,3 до 4 секунд.
На сервере работают супервизор billingd, служба приёма платежей billing-api и ночная сверка billing-report, которая должна была закончиться к 02:00. Все три работают от учётной записи billing, настройки — /etc/billing/billing.conf.
Бухгалтерия утром забирает выгрузку платежей за сентябрь. Разработчик сверки Артём Зуев будет на связи с 09:00.
1.2. Хронология и участники
События до выдачи задания и после него расположены по времени. Ниже — сотрудники, которых касается задание; их учётные записи используются в работе так, как они записаны в таблице.
| Когда | Что произошло |
|---|---|
| 01:00 | По расписанию запущена ночная сверка billing-report. |
| 02:00 | Сверка должна была завершиться; оповещения о завершении не было. |
| 02:40 | Мониторинг: раздел журналов заполнен на 94 %, нагрузка выше числа ядер. |
| 02:47 | Открыт инцидент INC-2026-0312, вызвана дежурная пара. |
| далее | Дежурная пара фиксирует замеры и ведёт хронологию в журнале работ с точным временем. |
| Сотрудник | Должность | Учётная запись | Роль в задании |
|---|---|---|---|
| Власова Елена Сергеевна | директор по информационным технологиям | — | утверждает задания и отчёты группы эксплуатации |
| Орлова Анна Викторовна | инженер эксплуатации, наставник | orlova | принимает работу практикантов, отвечает в #ops |
| Котова Марина Алексеевна | руководитель дежурной смены | — | открыла инцидент на billing-02 |
| Зуев Артём Романович | разработчик billing | — | отвечает за billing-report, перезапускает сверку после исправления |
| Лебедева Ирина Николаевна | бухгалтер | lebedeva | работает с платёжными документами в /srv/finance |
1.3. Что есть на сервере
На копии сервера, которую разворачивает стенд, находятся файлы и программы из таблицы. С них начинается осмотр сервера.
| Файл или каталог | Назначение |
|---|---|
billingd | супервизор: запускает службы и перезапускает billing-api, если та завершилась; журнал — /var/lib/billing/billingd.log |
billing-api | приём платежей; читает настройки при запуске |
billing-report | ночная сверка: запускает рабочие процессы и ждёт их |
billing.conf | уровень журнала, каталог выгрузок, адрес и пароль базы |
Из заявки и обстановки на сервере следует задача пары. Она описана в части 2 как перечень требований: каждое требование проверяется при приёмке.
2. Задача
Результат работы описывается пятью целями:
- Записать симптомы инцидента числами до любых изменений и найти все его причины.
- Освободить раздел журналов по политике хранения ПЖ-03, не потеряв бизнес-данные бухгалтерии.
- Вернуть нормальную работу процессов, не останавливая приём платежей.
- Закрыть файл настроек с паролем базы от посторонних пользователей.
- Получить скрипт профилактики
cleanup-logs.shи postmortem, по которым инцидент не повторится.
Схема показывает части работы и порядок, в котором они связаны. Номер в блоке — раздел задания, где эта часть описана.
Требования ниже сгруппированы по тем же частям. Слова «должен» и «обязательно» обозначают требование, которое проверяется при приёмке. Номер требования записывается в журнал работ рядом с командами, которые его выполняют. Если требование и регламент расходятся, выполняется требование.
2.1. Диагностика
- 2.1.1Симптомы записаны числами до любых изменений: заполнение раздела, что занимает место, нагрузка, самые загруженные процессы.
- 2.1.2Найден процесс, который заполняет журнал, и настройка, из-за которой это происходит.
2.2. Место на диске
- 2.2.1Раздел журналов заполнен не больше чем на 50 %.
- 2.2.2Политика хранения: журналы старше 7 дней удаляются. Аварийные дампы памяти
core.*на сервере не хранятся. - 2.2.3Выгрузки для бухгалтерии — данные, не журналы. Удалять их нельзя. Они перенесены в
/var/lib/billing/exportsс прежним владельцем, целостность подтверждена контрольной суммойsha256sumдо и после переноса, параметрEXPORT_DIRисправлен.
2.3. Процессы
- 2.3.1Приём платежей не останавливается дольше чем на несколько секунд. Супервизор
billingdне останавливать. - 2.3.2Отладочный уровень журнала выключен (
LOG_LEVEL=info),billing-apiперезапущен через супервизор и работает с новым уровнем. - 2.3.3Сверка
billing-reportостановлена вместе со всеми рабочими процессами. Перезапускать её не нужно: это сделает разработчик после исправления.
2.4. Безопасность
- 2.4.1В
billing.confлежит пароль базы, а файл открыт всем на запись. Владелец — root, группа —billing, остальным доступа нет. Служба после этого запускается.
2.5. Профилактика
- 2.5.1Скрипт
cleanup-logs.sh: печатает журналы старше 7 дней и дампыcore.*в/var/log/billingи удаляет их только с ключом--apply. Выгрузки скрипт не трогает ни при каком расположении.
2.6. Задачи по выбору
Эти задачи выполняются после основных требований и дают дополнительные баллы. Файлы кладутся в папку optional/; при приёмке пара запускает скрипт на стенде или показывает документ.
| Файл | Что сделать | Баллы |
|---|---|---|
disk-watch.sh | Скрипт контроля раздела: принимает каталог и порог в процентах, печатает заполнение раздела этого каталога и пять самых больших файлов в нём; если заполнение выше порога, завершается с кодом 1. | +2 |
snapshot.sh | Скрипт снимка состояния для инцидента: сохраняет в файл с датой и временем в имени вывод uptime, df -h, top -b -n 1 и дерево процессов заданного пользователя. | +2 |
Требования выполняются на копии сервера, вдвоём, в течение 14 дней. Как устроены стенд, работа в паре и этапы, описано в части 3.
3. Порядок работы
3.1. Копия сервера
Изменения на рабочем сервере billing-02 вносит дежурный инженер по отчёту пары. Пара работает на копии сервера: её разворачивает скрипт стенда в виртуальной машине с Ubuntu 24.04 из занятия 1. У каждого практиканта своя машина и свой стенд; нужно не меньше 2 ГБ свободного места и 2 ГБ памяти.
Перед первым запуском стенда в VirtualBox создаётся снимок состояния машины: к нему возвращаются, если машина перестала загружаться или потерян доступ к sudo. Стенд создаёт и удаляет учётные записи, правила sudo и каталоги служб, поэтому запускается только в виртуальной машине. Повторный запуск возвращает копию сервера в исходное состояние.
cd ~/Downloads wget https://algorthimization-course-vvodnoe.vercel.app/op05-operacionnye-sistemy-i-sredy/proekty/ekspluataciya-servera/materials/billing-stand.sh wget https://algorthimization-course-vvodnoe.vercel.app/op05-operacionnye-sistemy-i-sredy/proekty/ekspluataciya-servera/materials/billing-acceptance.sh sudo bash billing-stand.sh
Раздел журналов на стенде — файл-образ на 170 МБ, подключённый к /var/log/billing. После перезагрузки виртуальной машины стенд разворачивают заново.
Скрипт приёмки ничего не изменяет: он проверяет копию сервера и печатает OK или FAIL по каждому из 12 пунктов. Пункт FAIL показывает, какое требование не выполнено; перевод пунктов — в Приложении А. Подгонять сервер под скрипт в обход требований запрещено.
sudo bash ~/Downloads/billing-acceptance.sh | tee acceptance.txt
3.2. Работа в паре
Работа делится на две части, общую часть пара выполняет вместе. Кто из пары практикант 1 и кто практикант 2, записывается в README.md. При приёмке каждый отвечает и за свою часть, и за часть напарника.
| Кто | Что делает |
|---|---|
| Практикант 1 · диск | замеры df и du, поиск старых журналов и дампов, перенос выгрузок с контрольной суммой, очистка, скрипт cleanup-logs.sh. |
| Практикант 2 · процессы и настройки | нагрузка и самые загруженные процессы, дерево процессов billing, процесс, заполняющий журнал, настройки и их права, перезапуск billing-api, остановка сверки. |
| Вместе | хронология инцидента, приёмка, postmortem. |
У пары один репозиторий — tz-02-billing: его создаёт практикант 1 и добавляет напарника в Settings → Collaborators. Каждый работает в своей ветке (part-1, part-2) и открывает Pull Request в main. Напарник повторяет команды на своём стенде, оставляет замечания и одобряет слияние. Журнал работ runbook.md общий: время, кто из пары, команда, результат, номер требования; ошибки и откаты тоже записываются.
3.3. Этапы
День 0 — дата выдачи задания. К концу каждого этапа результат загружен в репозиторий, наставник может проверить его без предупреждения.
| Этап | Срок | Результат этапа |
|---|---|---|
| 1. Подготовка | день 2 | Репозиторий, стенд у каждого, распределение частей, паспорт сервера server-passport.md |
| 2. Части практикантов | день 7 | Каждый выполнил свою часть требований и открыл Pull Request |
| 3. Ревью | день 9 | Напарник повторил часть на своём стенде, замечания исправлены, ветки слиты |
| 4. Сведение | день 12 | Общая часть, скрипт cleanup-logs.sh, документ «postmortem», финальная приёмка на стенде заново |
| 5. Сдача | день 14 | Проверка по части 4 в присутствии обоих практикантов |
3.4. Материалы
В работе используются методичка (порядок работы, частые сообщения об ошибках, Git в паре), справочник команд, шаблоны документов и каркасы скриптов и лекции занятий 3–8. Что изучить по каждой задаче, сказано в разделе «Куда смотреть» в конце страницы. PDF этого ТЗ содержит лист согласования и акт сдачи-приёмки.
Работа заканчивается сдачей репозитория и проверкой в присутствии пары. Что сдаётся и как выставляются баллы, описано в части 4.
4. Сдача и проверка
4.1. Что сдаётся
Работа сдаётся одной ссылкой на репозиторий GitHub. README.md начинается с таблицы: практикант 1 и практикант 2, за что отвечает каждый, итог приёмки «N из 12»; ниже — команды стенда, решения и приёмки по порядку. В конце две строки: «Не получилось: ___» и «Нейросеть использовалась для: ___».
tz-02-billing/ ├── README.md состав пары, кто за что отвечает, итог приёмки ├── server-passport.md паспорт сервера до изменений ├── runbook.md журнал работ ├── postmortem.md postmortem ├── cleanup-logs.sh скрипт повторяемости ├── acceptance.txt вывод приёмки после финального прогона ├── optional/ задачи по выбору └── screenshots/ снимки из таблицы ниже
| Файл | Что в нём |
|---|---|
server-passport.md | паспорт сервера до изменений: версия системы, учётные записи и группы из задания, процессы и их владельцы, заполнение разделов, каталоги из раздела 1.3. Для каждого сведения — команда, которой оно получено. |
postmortem.md | симптом, хронология с временем, причина, действия, профилактика. Причин несколько — каждая отдельным пунктом. |
cleanup-logs.sh | скрипт профилактики. Проверка: стенд заново, sudo bash cleanup-logs.sh только печатает список, --apply удаляет, выгрузки на месте. |
runbook.md | журнал работ: время, кто из пары, команда, результат. |
screenshots/ | замеры до и после, дерево процессов billing, вывод приёмки со всеми OK. |
Шаблоны README.md, журнала работ, паспорта сервера и документа «postmortem», а также каркас скрипта cleanup-logs.sh — в архиве шаблонов. Команды и их вывод в документах — только с вашей виртуальной машины.
4.2. Проверка
Проверка проходит в присутствии обоих практикантов и состоит из пяти испытаний. Пара заранее открывает виртуальную машину со снимком, репозиторий и журнал работ. Если испытание не пройдено, пара один раз устраняет замечания в течение 3 дней.
| № | Что проверяется | Действие Заказчика | Ожидаемый результат |
|---|---|---|---|
| И-01 | Решение и приёмка | Заказчик разворачивает стенд заново. Пара выполняет решение по журналу работ и своим скриптам, затем запускает скрипт приёмки | Не дольше 30 минут; все 12 пунктов OK, вывод совпадает с acceptance.txt |
| И-02 | Повторяемость | Стенд заново, затем sudo bash cleanup-logs.sh и sudo bash cleanup-logs.sh --apply | Без ключа скрипт только печатает список; с ключом удаляет журналы старше 7 дней и дампы; выгрузки на месте |
| И-03 | Замеры | Заказчик называет число из раздела «Симптом» postmortem | Исполнитель называет команду, которой получено число, и показывает её в журнале работ со временем |
| И-04 | Дерево процессов | Показать дерево процессов учётной записи billing | Исполнитель объясняет, кто кого запускает и что происходит с billing-api после её завершения |
| И-05 | Журнал и часть напарника | Заказчик выбирает строку runbook.md из части напарника | Практикант объясняет команду, её ключи и вывод, называет номер требования |
4.3. Оценка
Работа оценивается в 30 баллов. Оценку получает пара, вклад каждого виден по коммитам, Pull Request и журналу работ.
| Что оценивается | Баллы |
|---|---|
| Приёмка на стенде, развёрнутом заново (И-01): баллы пропорциональны числу пунктов OK из 12 | 10 |
Скрипт cleanup-logs.sh выполняет свою задачу на чистом стенде (И-02) | 5 |
| Документ «postmortem»: по фактам, с командами и выводом | 5 |
| Паспорт сервера и журнал работ | 4 |
| Работа в паре: свои ветки, Pull Request, ревью с замечаниями | 3 |
| Ответы на испытаниях И-03 — И-05 | 3 |
| Итого | 30 |
| Дополнительно: задачи по выбору | +4 |
| Баллы | 27–30 | 23–26 | 18–22 | меньше 18 |
|---|---|---|---|---|
| Оценка | 5 | 4 | 3 | работа возвращается на доработку |
Работа не принимается, если решение не воспроизводится на стенде, развёрнутом заново, нет журнала работ или права ослаблены ради запуска службы или пункта приёмки.
Куда смотреть
Что изучить и чем себя проверить по каждой задаче. Сначала попробуйте разобраться сами, открывайте, когда застряли. Готовых решений здесь нет.
Замеры
Сначала замеры, потом действия. Всё, что измерили, — в журнал со временем: эти числа войдут в postmortem.
Инструментыdf -h, du -sh … | sort -h, uptime, top -b -n 1
занятие 3 · файловые системы · занятие 8 · нагрузка · занятие 8 · top и htop
Удаление
Перед любым удалением выведите список и сверьте каждую строку с требованиями ТЗ. Удаление с сервера не отменить.
Инструментыfind … -ls без -delete
Перенос данных
Целостность и владелец данных после переноса подтверждаются командой, а не на глаз.
Инструментыsha256sum, stat
занятие 3 · изменяемые данные в /var · занятие 4 · копирование и перемещение
Рост журнала
Если файл растёт, его кто-то пишет. Выясните, кто именно и почему так много.
Инструментыls -l дважды с паузой, tail, ps -u ИМЯ, /proc/PID/fd
Как устроены службы
Прежде чем посылать сигналы, разберитесь, кто кого запускает и что происходит, когда процесс завершается. Журналы служб — в каталогах из ТЗ.
Инструментыpstree -p, ps -o pid,ppid,stat,%cpu,etime,cmd
Сигналы
После каждого сигнала проверяйте, что изменилось в списке процессов, и объясняйте результат в журнале.
Инструментыpgrep -af, ps
Права на настройки
После смены прав проверьте доступ от имени службы и от имени постороннего пользователя.
Инструментыsudo -u ИМЯ cat ФАЙЛ
cleanup-logs.sh
Каркас разбирает ключ --apply, условие отбора — ваше. Проверяйте на стенде, развёрнутом заново.
Инструментыbash -n, запуск без ключа, затем с ключом
Приложение А. Пункты скрипта приёмки
Скрипт billing-acceptance.sh печатает пункты на английском языке, сгруппированные по частям. В таблице — что означает каждый пункт и какое требование части 2 он проверяет. Требования, которые скрипт проверить не может, проверяются по документам и на испытаниях части 4.
| № | Строка в выводе | Что проверяется | Требование |
|---|---|---|---|
| Disk | |||
| 1 | log partition is used at most 50 % | раздел журналов заполнен не больше чем на 50 % | 2.2.1 |
| 2 | no logs older than 7 days on the partition | на разделе нет журналов старше 7 дней | 2.2.2 |
| 3 | core dump removed | аварийного дампа нет | 2.2.2 |
| 4 | export moved to /var/lib/billing/exports intact | выгрузка перенесена без изменений, владелец прежний | 2.2.3 |
| 5 | no exports left in /var/log/billing | в каталоге журналов не осталось выгрузок | 2.2.3 |
| Configuration | |||
| 6 | EXPORT_DIR=/var/lib/billing/exports | параметр каталога выгрузок исправлен | 2.2.3 |
| 7 | LOG_LEVEL is not debug | отладочный уровень выключен | 2.3.2 |
| 8 | billing.conf: root:billing, closed for others | настройки: владелец и группа по ТЗ, остальным закрыто | 2.4.1 |
| Processes | |||
| 9 | billingd supervisor is running | супервизор работает | 2.3.1 |
| 10 | billing-api runs and started with level=info | служба перезапущена с новым уровнем журнала | 2.3.2 |
| 11 | no debug lines after the restart | после перезапуска отладочных строк нет | 2.3.2 |
| 12 | billing-report and its workers are stopped | сверка и её рабочие процессы остановлены | 2.3.3 |
Приложение Б. Выдержки из регламентов
Регламенты ИТ-отдела ООО «Пятый склад», которые относятся к этому заданию. Полные тексты хранятся во внутренней базе знаний группы эксплуатации.
ПЖ-03 «Политика журналов и хранения данных»
Сколько хранятся журналы, как включается отладка и где лежат бизнес-данные.
1. Журналы
- На серверах журналы хранятся 7 суток. Более старые журналы забирает центральное хранилище.
- Подробный (отладочный) уровень журнала включается только временно, по заявке. Включивший отвечает за выключение.
- Аварийные дампы памяти (core) на серверах не хранятся: их передают разработчикам и удаляют.
2. Бизнес-данные
- Выгрузки, отчёты и документы — бизнес-данные. Они хранятся в каталоге данных сервиса и без согласования владельца не удаляются.
- При переносе бизнес-данных целостность подтверждается контрольной суммой SHA-256 до и после переноса.
РИ-04 «Регламент инцидентов»
Порядок работы, когда сервис работает хуже обычного или не работает.
1. Уровни
- P1 — сервис для клиентов не работает или скоро перестанет работать. P2 — сервис работает с задержками. P3 — неудобство без влияния на клиентов.
2. Порядок действий
- Записать симптомы числами до любых изменений.
- Вернуть сервису работоспособность, даже если причина ещё не устранена.
- Найти причины. Причин бывает несколько.
- Устранить и проверить тем же измерением, что в начале.
- Перезагрузка сервера целиком при инциденте запрещена. Перезапуск отдельного сервиса допускается, если он занимает секунды.
3. Postmortem
- Сдаётся в течение 24 часов: симптомы, хронология с временем, причины, действия, профилактика. Профилактика — проверяемые меры с ответственным.
- Postmortem описывает причины в устройстве систем и порядке работы. Виноватых в нём не называют.
ПР-06 «Порядок работы группы эксплуатации»
Как оформляется любая работа по заявке.
1. Журнал работ
- Каждая команда, изменяющая сервер, записывается: время, кто, команда, результат. Ошибки и откаты тоже.
2. Работа в паре
- Заявку выполняет пара. Работа делится на части, каждая часть проходит ревью напарника: он повторяет её на своей копии сервера.
- Изменения хранятся в репозитории пары: ветка на каждого, Pull Request, ревью, слияние.
3. Сдача
- Работа сдаётся отчётом по форме заявки и выводом скрипта приёмки, полученным на копии сервера, развёрнутой заново.
- Ослаблять права, чтобы сервис запустился, запрещено. Причину отказа ищут в сообщении сервиса и его журнале.
Кейс ОП.05: организация, реквизиты, сотрудники, печать и подписи вымышлены.