From c9168ad6e14d2dd8c00a9561ab2c012fc34e88e4 Mon Sep 17 00:00:00 2001 From: dannc Date: Wed, 21 Sep 2022 10:40:24 +0700 Subject: [PATCH] homework 10.1: complete main task --- readme.md | 91 ++++++++++++----------- src/homework/10-monitoring/10.1/readme.md | 75 +++++++++++++++++++ 2 files changed, 121 insertions(+), 45 deletions(-) create mode 100644 src/homework/10-monitoring/10.1/readme.md diff --git a/readme.md b/readme.md index 47e05b0..a514612 100644 --- a/readme.md +++ b/readme.md @@ -2,48 +2,49 @@ ## Homeworks -* [1.1 Введение в DevOps](/src/homework/01-intro/1.1) -* [2.1 Системы контроля версий](/src/homework/02-git/2.1) -* [2.2 Основы Git](/src/homework/02-git/2.2) -* [2.3 Ветвления в Git](/src/homework/02-git/2.3) -* [2.4 Ветвления в Git](/src/homework/02-git/2.4) -* [3.1 Работа в терминале, лекция 1](/src/homework/03-sysadmin/3.1) -* [3.2 Работа в терминале, лекция 2](/src/homework/03-sysadmin/3.2) -* [3.3. Операционные системы, лекция 1](/src/homework/03-sysadmin/3.3) -* [3.4. Операционные системы, лекция 2](/src/homework/03-sysadmin/3.4) -* [3.5. Файловые системы](/src/homework/03-sysadmin/3.5) -* [3.6. Компьютерные сети, лекция 1](/src/homework/03-sysadmin/3.6) -* [3.7. Компьютерные сети, лекция 2](/src/homework/03-sysadmin/3.7) -* [3.8. Компьютерные сети, лекция 3](/src/homework/03-sysadmin/3.8) -* [3.9. Элементы безопасности информационных систем](/src/homework/03-sysadmin/3.9) -* [4.1. Командная оболочка Bash: Практические навыки](/src/homework/04-script/4.1) -* [4.2. Использование Python для решения типовых DevOps задач](/src/homework/04-script/4.2) -* [4.3. Языки разметки JSON и YAML](/src/homework/04-script/4.3) -* [5.1. Основы виртуализации](/src/homework/05-virtualization/5.1) -* [5.2. Применение принципов IaaC в работе с виртуальными машинами](/src/homework/05-virtualization/5.2) -* [5.3. Введение. Экосистема. Архитектура. Жизненный цикл Docker контейнера](/src/homework/05-virtualization/5.3) -* [5.4. Оркестрация группой Docker контейнеров на примере Docker Compose](/src/homework/05-virtualization/5.4) -* [5.5. Оркестрация кластером Docker контейнеров на примере Docker Swarm](/src/homework/05-virtualization/5.5) -* [6.1. Типы и структура СУБД](/src/homework/06-database/6.1) -* [6.2. SQL](/src/homework/06-database/6.2) -* [6.3. MySQL](/src/homework/06-database/6.3) -* [6.4. PostgreSQL](/src/homework/06-database/6.4) -* [6.5. Elasticsearch](/src/homework/06-database/6.5) -* [6.6. Troubleshooting](/src/homework/06-database/6.6) -* [7.1. Инфраструктура как код](/src/homework/07-terraform/7.1) -* [7.2. Облачные провайдеры и синтаксис Terraform](/src/homework/07-terraform/7.2) -* [7.3. Основы и принцип работы Terraform](/src/homework/07-terraform/7.3) -* [7.4. Средства командной работы над инфраструктурой](/src/homework/07-terraform/7.4) -* [7.5. Основы golang](/src/homework/07-terraform/7.5) -* [7.6. Написание собственных провайдеров для Terraform](/src/homework/07-terraform/7.6) -* [8.1. Введение в Ansible](/src/homework/08-ansible/8.1) -* [8.2. Работа с Playbook](/src/homework/08-ansible/8.2) -* [8.3. Использование Yandex Cloud](/src/homework/08-ansible/8.3) -* [8.4. Работа с Roles](/src/homework/08-ansible/8.4) -* [8.5. Тестирование Roles](/src/homework/08-ansible/8.5) -* [8.6. Создание собственных modules](/src/homework/08-ansible/8.6) -* [9.1. Жизненный цикл ПО](/src/homework/09-ci/9.1) -* [9.3. CI\CD](/src/homework/09-ci/9.3) -* [9.4 Jenkins](/src/homework/09-ci/9.4) -* [9.5. Teamcity](/src/homework/09-ci/9.5) -* [9.6. Gitlab](/src/homework/09-ci/9.6) +* [01.1 Введение в DevOps](/src/homework/01-intro/1.1) +* [02.1 Системы контроля версий](/src/homework/02-git/2.1) +* [02.2 Основы Git](/src/homework/02-git/2.2) +* [02.3 Ветвления в Git](/src/homework/02-git/2.3) +* [02.4 Ветвления в Git](/src/homework/02-git/2.4) +* [03.1 Работа в терминале, лекция 1](/src/homework/03-sysadmin/3.1) +* [03.2 Работа в терминале, лекция 2](/src/homework/03-sysadmin/3.2) +* [03.3. Операционные системы, лекция 1](/src/homework/03-sysadmin/3.3) +* [03.4. Операционные системы, лекция 2](/src/homework/03-sysadmin/3.4) +* [03.5. Файловые системы](/src/homework/03-sysadmin/3.5) +* [03.6. Компьютерные сети, лекция 1](/src/homework/03-sysadmin/3.6) +* [03.7. Компьютерные сети, лекция 2](/src/homework/03-sysadmin/3.7) +* [03.8. Компьютерные сети, лекция 3](/src/homework/03-sysadmin/3.8) +* [03.9. Элементы безопасности информационных систем](/src/homework/03-sysadmin/3.9) +* [04.1. Командная оболочка Bash: Практические навыки](/src/homework/04-script/4.1) +* [04.2. Использование Python для решения типовых DevOps задач](/src/homework/04-script/4.2) +* [04.3. Языки разметки JSON и YAML](/src/homework/04-script/4.3) +* [05.1. Основы виртуализации](/src/homework/05-virtualization/5.1) +* [05.2. Применение принципов IaaC в работе с виртуальными машинами](/src/homework/05-virtualization/5.2) +* [05.3. Введение. Экосистема. Архитектура. Жизненный цикл Docker контейнера](/src/homework/05-virtualization/5.3) +* [05.4. Оркестрация группой Docker контейнеров на примере Docker Compose](/src/homework/05-virtualization/5.4) +* [05.5. Оркестрация кластером Docker контейнеров на примере Docker Swarm](/src/homework/05-virtualization/5.5) +* [06.1. Типы и структура СУБД](/src/homework/06-database/6.1) +* [06.2. SQL](/src/homework/06-database/6.2) +* [06.3. MySQL](/src/homework/06-database/6.3) +* [06.4. PostgreSQL](/src/homework/06-database/6.4) +* [06.5. Elasticsearch](/src/homework/06-database/6.5) +* [06.6. Troubleshooting](/src/homework/06-database/6.6) +* [07.1. Инфраструктура как код](/src/homework/07-terraform/7.1) +* [07.2. Облачные провайдеры и синтаксис Terraform](/src/homework/07-terraform/7.2) +* [07.3. Основы и принцип работы Terraform](/src/homework/07-terraform/7.3) +* [07.4. Средства командной работы над инфраструктурой](/src/homework/07-terraform/7.4) +* [07.5. Основы golang](/src/homework/07-terraform/7.5) +* [07.6. Написание собственных провайдеров для Terraform](/src/homework/07-terraform/7.6) +* [08.1. Введение в Ansible](/src/homework/08-ansible/8.1) +* [08.2. Работа с Playbook](/src/homework/08-ansible/8.2) +* [08.3. Использование Yandex Cloud](/src/homework/08-ansible/8.3) +* [08.4. Работа с Roles](/src/homework/08-ansible/8.4) +* [08.5. Тестирование Roles](/src/homework/08-ansible/8.5) +* [08.6. Создание собственных modules](/src/homework/08-ansible/8.6) +* [09.1. Жизненный цикл ПО](/src/homework/09-ci/9.1) +* [09.3. CI\CD](/src/homework/09-ci/9.3) +* [09.4 Jenkins](/src/homework/09-ci/9.4) +* [09.5. Teamcity](/src/homework/09-ci/9.5) +* [09.6. Gitlab](/src/homework/09-ci/9.6) +* [10.1. Зачем и что нужно мониторить](/src/homework/10-monitoring/10.1) diff --git a/src/homework/10-monitoring/10.1/readme.md b/src/homework/10-monitoring/10.1/readme.md new file mode 100644 index 0000000..f489b2f --- /dev/null +++ b/src/homework/10-monitoring/10.1/readme.md @@ -0,0 +1,75 @@ +Выполнение [домашнего задания](https://github.com/netology-code/mnt-homeworks/blob/MNT-13/10-monitoring-01-base/README.md) +по теме "10.1. Зачем и что нужно мониторить" + +## Q/A + +### Задание 1 + +> Обязательные задания +> +> 1. Вас пригласили настроить мониторинг на проект. На онбординге вам рассказали, что проект представляет собой +> платформу для вычислений с выдачей текстовых отчетов, которые сохраняются на диск. Взаимодействие с платформой +> осуществляется по протоколу http. Также вам отметили, что вычисления загружают ЦПУ. Какой минимальный набор метрик вы +> выведите в мониторинг и почему? + +Стоит выделить несколько основных метрик для мониторинга: +1. метрики дисков, а именно: + * оставшееся свободное место, чтобы иметь возможность вовремя среагировать на отсутствие места для сохранения отчётов + * скорость чтения/записи с заранее определённой максимально допустимой скоростью как threshold. + Это необходимо, чтобы понимать, в какой момент скорость работы приложения упирается в "железо", + а когда есть проблемы со скоростью обработки вычислений внутри самого приложения. +2. метрики web-сервера + * количество входящих запросов в секунду (общая и по каждому endpoint), чтобы была возможность отследить неожиданные всплески запросов + и, возможно, закрыть доступ по ip-адресу. + * скорость выполнения запросов по каждому endpoint для контроля скорости работы приложения. + В дальнейшем на основе этой метрики стоит построить мониторинг по процентилям (например, чтобы 98% запросов выполнялись в рамках определённого времени). +3. метрики процессора + * загруженность ядер виртуальной машины, чтобы иметь возможность увидеть возможную проблему быстродействия приложения. +4. метрики сетевого интерфейса + * скорость приёма и отдачи информации по сети + * общий размер принятой и отданной информации + + Данные метрики необходимы для анализа динамики сетевого взаимодействия и дальнейшего планирования + апгрейда сетевых интерфейсов. + +> 2. Менеджер продукта посмотрев на ваши метрики сказал, что ему непонятно что такое RAM/inodes/CPUla. Также он сказал, +> что хочет понимать, насколько мы выполняем свои обязанности перед клиентами и какое качество обслуживания. Что вы +> можете ему предложить? + +В данном случае стоит определить конкретные SLA и SLO. + +Например, можно определить следующие SLO (цели уровня обслуживания) с обсуждаемыми в дальнейшем значениями: +* 99.98% запросов обрабатываются успешно +* 90% запросов обрабатываются в течение 5 секунд + +И возможно определение следующих SLA (соглашений об уровне обслуживания): +* доступность системы - 99.98% +* реагирование на инциденты: + * при высокой нагрузке на процессор в течение некоторого времени (н-р, загрузка всех ядер >90% в течение 1 часа) + команда произведёт горизонтальное масштабирование системы для распределения нагрузки в течение 3 часов. + * при критическом уровне свободного места (н-р <3GB) будет подключен дополнительный физический/сетевой диск в течение 3 часов. + * реагирование на резкий и неожиданный всплеск входящих запросов в течение 1 часа + +> 3. Вашей DevOps команде в этом году не выделили финансирование на построение системы сбора логов. Разработчики в свою +> очередь хотят видеть все ошибки, которые выдают их приложения. Какое решение вы можете предпринять в этой ситуации, +> чтобы разработчики получали ошибки приложения? + +Если нет финансирования, значит необходимо искать варианты среди решений с открытым исходным кодом (или свободных решений). +Из вариантов: +* elk-стек ([elasticsearch](https://hub.docker.com/_/elasticsearch) + [logstash](https://hub.docker.com/_/logstash) + [kibana](https://hub.docker.com/_/kibana)) + сбор логов при помощи [logstash](https://hub.docker.com/r/elastic/filebeat)/[fluentd](https://hub.docker.com/_/fluentd) +* [clickhouse](https://hub.docker.com/r/yandex/clickhouse-server) + [grafana](https://clickhouse.com/docs/en/connect-a-ui/grafana-and-clickhouse/) + [vector](https://hub.docker.com/r/timberio/vector). +vector используется в качестве принимающей точки, так и для непосредственно сбора логов. +* [grafana loki](https://hub.docker.com/r/grafana/loki) + grafana + сбор логов при помощи [fluentd](https://hub.docker.com/_/fluentd). + +> 4. Вы, как опытный SRE, сделали мониторинг, куда вывели отображения выполнения SLA=99% по http кодам ответов. +> Вычисляете этот параметр по следующей формуле: summ_2xx_requests/summ_all_requests. Данный параметр не поднимается выше +> 70%, но при этом в вашей системе нет кодов ответа 5xx и 4xx. Где у вас ошибка? + +По всей видимости не учитываются возможные ответы со статусами `3xx` (редиректы). +Необходимо добавить метрику `summ_3xx_requests` и изменить формулу на следующую: + +```text +(summ_2xx_requests+summ_3xx_requests)/summ_all_requests +``` + +В данном случае считаем ответы `3xx` успешно обработанными.