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

 
 
 

Contributors