diff --git a/README.md b/README.md index 64ef33813a..49ba656621 100644 --- a/README.md +++ b/README.md @@ -1,117 +1,116 @@ -# Домашнее задание к занятию "`Название занятия`" - `Фамилия и имя студента` +# Домашнее задание к занятию "13.Системы мониторинга" - `Молоствов Андрей` +### Задание 1 -### Инструкция по выполнению домашнего задания +Учитывая описание (платформа HTTP, вычисления с отчетами на диск, ЦПУ интенсивно используется), я бы выделил следующие четыре категории минимальных метрик: - 1. Сделайте `fork` данного репозитория к себе в Github и переименуйте его по названию или номеру занятия, например, https://github.com/имя-вашего-репозитория/git-hw или https://github.com/имя-вашего-репозитория/7-1-ansible-hw). - 2. Выполните клонирование данного репозитория к себе на ПК с помощью команды `git clone`. - 3. Выполните домашнее задание и заполните у себя локально этот файл README.md: - - впишите вверху название занятия и вашу фамилию и имя - - в каждом задании добавьте решение в требуемом виде (текст/код/скриншоты/ссылка) - - для корректного добавления скриншотов воспользуйтесь [инструкцией "Как вставить скриншот в шаблон с решением](https://github.com/netology-code/sys-pattern-homework/blob/main/screen-instruction.md) - - при оформлении используйте возможности языка разметки md (коротко об этом можно посмотреть в [инструкции по MarkDown](https://github.com/netology-code/sys-pattern-homework/blob/main/md-instruction.md)) - 4. После завершения работы над домашним заданием сделайте коммит (`git commit -m "comment"`) и отправьте его на Github (`git push origin`); - 5. Для проверки домашнего задания преподавателем в личном кабинете прикрепите и отправьте ссылку на решение в виде md-файла в вашем Github. - 6. Любые вопросы по выполнению заданий спрашивайте в чате учебной группы и/или в разделе “Вопросы по заданию” в личном кабинете. - -Желаем успехов в выполнении домашнего задания! - -### Дополнительные материалы, которые могут быть полезны для выполнения задания +1) Бизнес-метрики (качество сервиса): -1. [Руководство по оформлению Markdown файлов](https://gist.github.com/Jekins/2bf2d0638163f1294637#Code) +*HTTP запросы: Общее количество, по методам (GET/POST), по эндпоинтам. ---- +*HTTP коды ответа: Группировка по классам (2xx, 3xx, 4xx, 5xx), особенно rate ошибок 5xx и 4xx. Это прямой индикатор доступности и корректности работы API. -### Задание 1 +*Задержка (Latency) запросов: Процентили времени ответа (p50, p95, p99). Показывает, насколько отзывчив сервис для пользователей. + +2) Метрики ресурсов (инфраструктура): + +*ЦПУ (CPU): Утилизация на ядро и в целом, время ожидания (steal, iowait если есть), load average (CPU la). Это критично, так как вычисления нагружают процессор. + +*Оперативная память (RAM): Общее использование, свободная память, использование кэша, процент использования. Позволяет избежать OOM (Out-Of-Memory) убийств процессов. -`Приведите ответ в свободной форме........` +*Диск (Disk): Свободное место на разделах, где сохраняются отчеты и где работает приложение. I/O утилизация (чтение/запись) и latency. Если отчеты пишутся на диск, его перегрузка может стать узким местом. -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. +*Inodes (иноды): Свободные иноды на диске с отчетами. Если приложение создает множество мелких файлов (отчетов, логов), их может закончиться даже при свободном месте. -``` -Поле для вставки кода... -.... -.... -.... -.... -``` +3) Метрики приложения (логика работы): -`При необходимости прикрепитe сюда скриншоты -![Название скриншота 1](ссылка на скриншот 1)` +*Количество активных/обрабатываемых вычислительных задач. +*Среднее время генерации отчета. ---- +*Очередь задач (если есть). + +4) Метрики доступности: + +*Простое «up/down» сервиса по HTTP-проверке (например, запрос на /health). ### Задание 2 -`Приведите ответ в свободной форме........` +1) Доступность (Availability) сервиса: «Сервис доступен 99.9% времени». Измеряется как доля успешных HTTP-запросов от общего числа. + +2) Скорость работы (Performance): «95% всех отчетов формируются менее чем за 10 секунд». + +3) Качество результатов (Correctness): Можно ввести метрику «количество жалоб на некорректные отчеты» (ручной ввод) или мониторить долю запросов, которые завершились ошибкой логики приложения -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. +4) Нагрузка (Volume): «Мы обрабатываем в среднем 5000 задач в час». -``` -Поле для вставки кода... -.... -.... -.... -.... -``` +5) Визуализация: Создать единый Service Level Dashboard с понятными виджетами: -`При необходимости прикрепитe сюда скриншоты -![Название скриншота 2](ссылка на скриншот 2)` +* Зеленая/красная лампочка «Сервис доступен». +* График «Время формирования отчета» с целевой линией (например, 10 сек). ---- +* Индикатор «Выполнение SLA за месяц: 99.7%». + +* Счетчик «Отчетов сгенерировано сегодня». + +Как итог: нужно договориться с менеджером о цифровых целевых показателях (SLO) по доступности, скорости и объему, а затем настроить мониторинг именно под них. ### Задание 3 -`Приведите ответ в свободной форме........` +1) Использование стека ELK/EFK на своих мощностях -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. +2) Отправка логов ошибок напрямую разработчикам -``` -Поле для вставки кода... -.... -.... -.... -.... -``` +3) Использование облачных «бесплатных» квот -`При необходимости прикрепитe сюда скриншоты -![Название скриншота](ссылка на скриншот)` +Начать с Sentry для ошибок приложений, а параллельно в тестовом окружении развернуть минимальный стек EFK (Elasticsearch, Fluent Bit, Kibana) для оценки трудозатрат. ### Задание 4 -`Приведите ответ в свободной форме........` - -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. - -``` -Поле для вставки кода... -.... -.... -.... -.... -``` - -`При необходимости прикрепитe сюда скриншоты -![Название скриншота](ссылка на скриншот)` +Ошибка в формуле. Если в системе нет 4xx и 5xx, но есть, например, 3xx (редиректы) и возможно 1xx (информационные) коды, то они входят в знаменатель (summ_all_requests), но не являются «успешными» в контексте завершенных пользовательских операций. + +### Задание 5 + +### PULL модель: +* Центр управления знает всех агентов. Легко увидеть, что пропало. + +* Центр ходит к агентам. Нужен доступ из сети мониторинга к приложениям. + +* Проблемы с сетью (файрволлы, NAT) на стороне центра. + +* Центр может стать узким местом. Нужно планировать нагрузку. + +* Центр решает, когда опрашивать. Может быть задержка в обнаружении. + +* Сложнее. Нужно заранее знать цели. + +* При падении центра данные за период простоя теряются. + +* Prometheus, Nagios + +### PUSH модель: + +* Агенты независимы. Центр не знает, кто должен отправить данные. + +* Агенты ходят к центру. Можно проще ограничить входящие соединения к центру. + +* Проблемы с сетью на стороне агентов. + +* Центр принимает данные. Масштабируется проще (через балансировку). + +* Агент отправляет данные сразу. Более оперативное оповещение. + +* Проще. Новый сервис может сам зарегистрироваться в системе мониторинга. + +* Агенты могут буферизовать и отправить данные позже. + +* StatsD, Graphite, InfluxDB + +### Задание 6 + +Чистый Push: TICK. + +Чистый Pull: Nagios (в базовом виде). + +Гибридные: Prometheus, Zabbix, VictoriaMetrics. diff --git a/img/1.jpg b/img/1.jpg new file mode 100644 index 0000000000..98079eb6dd Binary files /dev/null and b/img/1.jpg differ diff --git a/img/2.jpg b/img/2.jpg new file mode 100644 index 0000000000..617cf5e28f Binary files /dev/null and b/img/2.jpg differ diff --git a/img/3.jpg b/img/3.jpg new file mode 100644 index 0000000000..01676978f7 Binary files /dev/null and b/img/3.jpg differ diff --git a/img/4.jpg b/img/4.jpg new file mode 100644 index 0000000000..7b9fa8a61d Binary files /dev/null and b/img/4.jpg differ