Вы работаете в крупной компанию, которая строит систему на основе микросервисной архитектуры. Вам как DevOps специалисту необходимо выдвинуть предложение по организации инфраструктуры, для разработки и эксплуатации.
Предложите решение для обеспечения процесса разработки: хранение исходного кода, непрерывная интеграция и непрерывная поставка. Решение может состоять из одного или нескольких программных продуктов и должно описывать способы и принципы их взаимодействия.
Решение должно соответствовать следующим требованиям:
- Облачная система;
- Система контроля версий Git;
- Репозиторий на каждый сервис;
- Запуск сборки по событию из системы контроля версий;
- Запуск сборки по кнопке с указанием параметров;
- Возможность привязать настройки к каждой сборке;
- Возможность создания шаблонов для различных конфигураций сборок;
- Возможность безопасного хранения секретных данных: пароли, ключи доступа;
- Несколько конфигураций для сборки из одного репозитория;
- Кастомные шаги при сборке;
- Собственные докер образы для сборки проектов;
- Возможность развернуть агентов сборки на собственных серверах;
- Возможность параллельного запуска нескольких сборок;
- Возможность параллельного запуска тестов;
Обоснуйте свой выбор.
Предложите решение для обеспечения сбора и анализа логов сервисов в микросервисной архитектуре. Решение может состоять из одного или нескольких программных продуктов и должно описывать способы и принципы их взаимодействия.
Решение должно соответствовать следующим требованиям:
- Сбор логов в центральное хранилище со всех хостов обслуживающих систему;
- Минимальные требования к приложениям, сбор логов из stdout;
- Гарантированная доставка логов до центрального хранилища;
- Обеспечение поиска и фильтрации по записям логов;
- Обеспечение пользовательского интерфейса с возможностью предоставления доступа разработчикам для поиска по записям логов;
- Возможность дать ссылку на сохраненный поиск по записям логов;
Обоснуйте свой выбор.
Предложите решение для обеспечения сбора и анализа состояния хостов и сервисов в микросервисной архитектуре. Решение может состоять из одного или нескольких программных продуктов и должно описывать способы и принципы их взаимодействия.
Решение должно соответствовать следующим требованиям:
- Сбор метрик со всех хостов, обслуживающих систему;
- Сбор метрик состояния ресурсов хостов: CPU, RAM, HDD, Network;
- Сбор метрик потребляемых ресурсов для каждого сервиса: CPU, RAM, HDD, Network;
- Сбор метрик, специфичных для каждого сервиса;
- Пользовательский интерфейс с возможностью делать запросы и агрегировать информацию;
- Пользовательский интерфейс с возможность настраивать различные панели для отслеживания состояния системы;
Обоснуйте свой выбор.
Продолжить работу по задаче API Gateway: сервисы используемые в задаче пишут логи в stdout.
Добавить в систему сервисы для сбора логов Vector + ElasticSearch + Kibana со всех сервисов обеспечивающих работу API.
docker compose файл запустив который можно перейти по адресу http://localhost:8081 по которому доступна Kibana. Логин в Kibana должен быть admin пароль qwerty123456
Продолжить работу по задаче API Gateway: сервисы используемые в задаче предоставляют набор метрик в формате prometheus:
- Сервис security по адресу /metrics
- Сервис uploader по адресу /metrics
- Сервис storage (minio) по адресу /minio/v2/metrics/cluster
Добавить в систему сервисы для сбора метрик (Prometheus и Grafana) со всех сервисов обеспечивающих работу API. Построить в Graphana dashboard показывающий распределение запросов по сервисам.
docker compose файл запустив который можно перейти по адресу http://localhost:8081 по которому доступна Grafana с настроенным Dashboard. Логин в Grafana должен быть admin пароль qwerty123456
В целом все современные популярные решения для процесса разработки +/- обеспечивают требования предъявляемые к системе.
Это такие системы как:
- GitLab Ci/CD, для использования собственных докер образов можно использовать docker hub или artifactory
- Azure DevOps Services, для использования собственных докер образов можно использовать docker hub или artifactory
- TeamCity, но помимо использования отдельного хранилища для собственных образов необходимо подключать и системы контроля версий, например GitHub.
Я бы предложил использовать Azure DevOps Services (Azure DevOps Server) так как он наиболее полно закрывает заявленные потребности, имеет наибольшую гибкость в настройке процессов и позволяет управлять и использовать все необходимые инструменты в одном окружении
В качестве решения задачи предлагаю использовать Telegraf для сбора и доставки логов, для БД использовать Elasticsearch, а пользовательский интерфейс обеспечит Kibana.
Решение | Задача |
---|---|
Telegraf | - Сбор логов в центральное хранилище со всех хостов обслуживающих систему - Минимальные требования к приложениям, сбор логов из stdout - Гарантированная доставка логов до центрального хранилища |
Elasticsearch | - Обеспечение поиска и фильтрации по записям логов |
Kibana | - Обеспечение пользовательского интерфейса с возможностью предоставления доступа разработчикам для поиска по записям логов - Возможность дать ссылку на сохраненный поиск по записям логов |
Полученное решение будет достаточно лёгким, удобным, надёжным и гибким в масштабировании
Предлагаю использовать Prometheus и Grafana.
- Prometheus с его многочисленными exporter позволит собирать и хранить метрики с чего угодно дополняя их своими кастомными метриками, а при необходимости можно написать свой exporter
- Grafana - это мощное средство визуализации метрик хранящихся в Prometheus, позволяющее создавать свои панели и дашборды, или даже подобрать готовые. Так же Grafana позволяет настроить нотификации при возникновении предупреждений и включать в них снимки панелей, что бы наглядно видеть проблему не посещая саму систему