Skip to content

antelman107/metrics

Repository files navigation

Проект должен быть размещен в $GOPATH/src/github.com/antelman107/metrics в виду использования менеджера зависимостей dep.

Зависимости подтягиваются через dep ensure.

В виду необходимости делать агрегированные запросы по метрикам, выбрана реляционная БД Postgresql. Для работы с миграциями БД используется библиотека github.com/rubenv/sql-migrate. Миграции на базу накатываются с помощью команды migrate database up.

Для работы с конфигом используется библиотека github.com/spf13/viper, для реализации интерфейса консольных комманд - github.com/spf13/cobra, для менеджмента зависимостей - github.com/sarulabs/di с собственной оберткой.

Компоненты:

  • планировщик (go run cmd/app/main.go service scheduler -c ./.bin/app/config.dist.json) - раз в минуту выбирает сайты для мониторинга и отправляет их в очередь.
  • получатель метрик (go run cmd/app/main.go service requester -c ./.bin/app/config.dist.json) - опрашивает очередь, в которую пишет scheduler, в случае получения задачи из этой очереди - выполняет запрос к сайту, сохраняет результат запроса в БД postgresql.
  • http-api (на основе веб-фреймворка echo):
    • для пользователей - /api - выдает справочник сайтов (id и урлы) и данные по метринкам. Запросы к /api трекаются через middleware Stats
    • для администраторов - /stats - выдает статистику по запросам к /api, которую собрал middleware Stats.

Технические детали:

  • Для запуска проекта локально база PostgreSQL и redis могут быть подняты с помощью docker-compose.
  • Отдельный демон requester и вообще очередь сайтов для мониторинга сделана отдельно в виду возможности масштабирования: при росте кол-ва сайтов реализация запросов внутри одного демона рано или поздно перестала бы успевать выполнить запросы в течение 1 минуты, а в нынешней реализации можно запустить несколько requester даже на нескольких хостах.
  • Для ускорения /api, данные кешируются в редисе по site_id. При добавлении новых метрик кеш сбрасывается, при получении данных из БД возобновляется.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published