mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 23:32:37 +03:00
homework 10.1: complete main task
This commit is contained in:
91
readme.md
91
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)
|
||||
|
||||
75
src/homework/10-monitoring/10.1/readme.md
Normal file
75
src/homework/10-monitoring/10.1/readme.md
Normal 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` успешно обработанными.
|
||||
Reference in New Issue
Block a user