homework 10.1: complete main task

This commit is contained in:
2022-09-21 10:40:24 +07:00
parent 3d932f172e
commit c9168ad6e1
2 changed files with 121 additions and 45 deletions

View File

@@ -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)

View File

@@ -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` успешно обработанными.