Skip to content
This repository has been archived by the owner on Mar 24, 2024. It is now read-only.

Практический трек «Go в DevOps»: реализация сбора (агент) и хранения (сервер) метрик.

License

Notifications You must be signed in to change notification settings

alkurbatov/metrics-collector

Repository files navigation

metrics-collector

Репозиторий для практического трека «Go в DevOps». Содержит следующие компоненты:

  • сервис сбора метрик (агент);
  • сервис хранения метрик (сервер);
  • утилита статического анализа кода (multichecker).

Задания

  1. Инкремент 1 (агент)
  2. Инкремент 2 (сервер)
  3. Инкремент 3 (web framework)
  4. Инкремент 4 (JSON API)
  5. Инкремент 5 (переменные окружения)
  6. Инкремент 6 (сохранение данных на диск)
  7. Инкремент 7 (флаги командной строки)
  8. Инкремент 8 (поддержка сжатия)
  9. Инкремент 9 (подписывание передаваемых данных)
  10. Инкремент 10 (проверка соединения с базой)
  11. Инкремент 11 (сохранение данных в базе)
  12. Инкремент 12 (отправка метрик списком)
  13. Инкремент 13 (ошибки и логирование)
  14. Инкремент 14 (метрики CPU и добавление асинхронности в агент)
  15. Инкремент 15 (профилирование)
  16. Инкремент 16 (форматирование кода)
  17. Инкремент 17 (документирование)
  18. Инкремент 18 (multichecker)
  19. Инкремент 19 (флаги сборки)
  20. Инкремент 20 (шифрование агент -> сервер)
  21. Инкремент 21 (конфигурационные файлы)
  22. Инкремент 22 (штатное завершение работы)
  23. Инкремент 23 (блокировка запросов из недоверенной подсети)
  24. Инкремент 24 (gRPC)

Разработка и тестирование

Для получения полного списка доступных команд выполните:

make help

Инструменты для разработки

golangci-lint

В проекте используется golangci-lint для локальной разработки. Для установки линтера воспользуйтесь официальной инструкцией.

pre-commit

В проекте используется pre-commit для запуска линтеров перед коммитом. Для установки утилиты воспользуйтесь официальной инструкцией, затем выполните команду:

make install-tools

protoc

Для генерации gRPC кода необходимо установить protoc, а также плагины для Go:

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

migrate

Для работы с миграциями БД необходимо установить утилиту golang-migrate:

go install -tags "postgres" github.com/golang-migrate/migrate/v4/cmd/migrate@latest

swag

Для генерации документации в формате OpenAPI (Swagger) необходимо установить swag:

go install github.com/swaggo/swag/cmd/swag@latest

Команды

Для добавления новой миграции выполните:

migrate create -ext sql -dir ./migrations -seq имя_миграции

Для применения миграций выполните команду:

migrate -database ${DATABASE_DSN} -path ./migrations up

Для возврата базы данных в первоначальное состояние выполните команду:

migrate -database ${DATABASE_DSN} -path ./migrations down -all

Запуск сервера

Для запуска сервера, отвечающего за агрегирование и хранение метрик, выполните команду:

./cmd/server/server

Настройка и значения по умолчанию

Опции командной строки

(!) Опции командной строки имеют приоритет перед конфигурационным файлом.

Для вывода списка доступных опций и их значений по умолчанию выполните команду:

./cmd/server/server --help

Переменные окружения сервера

(!) Переменные окружения имеют приоритет перед опциями командной строки.

# Адрес и порт, по которым доступно HTTP API сервера:
export ADDRESS=0.0.0.0:8080

# Адрес и порт, по которым доступно gRPC API сервера:
export GRPC_ADDRESS=0.0.0.0:50051

# Интервал времени в секундах, по истечении которого текущие показания
# сервера сбрасываются на диск (значение 0 — делает запись синхронной):
export STORE_INTERVAL=300s

# Имя файла, где хранятся значения метрик.
# Пустое значение — отключает функцию записи на диск:
export STORE_FILE="/tmp/devops-metrics-db.json"

# Загружать или нет сохраненные значения метрик из файла при старте сервера:
export RESTORE=true

# Секретный ключ для генерации подписи (по умолчанию не задан):
export KEY=

# Путь к приватному RSA ключу для расшифровывания коммуникаций агент -> сервер
# (по умолчанию не задан).
# Ключ должен быть сохранен в PEM формате.
export CRYPTO_KEY=

# Доверенная подсеть в CIDR нотации (по умолчанию не задана).
# Если эта переменная задана, сервер блокирует запросы, отправленные не из доверенной подсети.
export TRUSTED_SUBNET=

# Полный URL для установления соединения с базой (по умолчанию не задан).
# Сервер автоматически запустит все необходимые миграции после установления соединения с базой.
# (!) Поддерживается только Postgres.
export DATABASE_DSN=

# Адрес и порт, по которым доступен инструмент pprof (по умолчанию выключен).
export PPROF_ADDRESS=

# Включить вывод отладочной информации.
export DEBUG=false

# Путь к конфигурационному файлу в JSON формате (по умолчанию не задан):
# Пример конфигурационного файла: ./configs/server.example.json
export CONFIG=

Запуск агента

(!) Опции командной строки имеют приоритет перед конфигурационным файлом.

Для запуска агента, отвечающего за сбор и отправку метрик, выполните команду:

./cmd/agent/agent

Настройка и значения по умолчанию

Опции командной строки

Для вывода списка доступных опций и их значений по умолчанию выполните команду:

./cmd/agent/agent --help

Переменные окружения агента

(!) Переменные окружения имеют приоритет перед опциями командной строки.

# Адрес и порт сервера, агрегирующего метрики:
export ADDRESS=0.0.0.0:8080

# Тип транспорта используемого для сбора метрик (http или gRPC):
export TRANSPORT=http

# Интервал опроса метрик (в секундах):
export POLL_INTERVAL=2s

# Интервал отправки метрик (в секундах):
export REPORT_INTERVAL=10s

# Секретный ключ для генерации подписи (по умолчанию не задан):
export KEY=

# Путь к публичному RSA ключу для шифрования коммуникаций агент -> сервер
# (по умолчанию не задан).
# Ключ должен быть сохранен в PEM формате.
export CRYPTO_KEY=

# Включить вывод отладочной информации.
export DEBUG=false

# Путь к конфигурационному файлу в JSON формате (по умолчанию не задан):
# Пример конфигурационного файла: ./configs/agent.example.json
export CONFIG=

Запуск multichecker

./cmd/staticlint/staticlint <packages>

Для вывода всех доступных опций для тонкой настройки линтеров выполните:

./cmd/staticlint/staticlint -help

Обновление шаблона

Чтобы получать обновления автотестов и других частей шаблона, выполните следующую команду:

git remote add -m main template https://github.com/yandex-praktikum/go-musthave-devops-tpl.git

Для обновления кода автотестов выполните команду:

git fetch template && git checkout template/main .github

Лицензия

Copyright (c) 2022-2023 Alexander Kurbatov

Лицензировано по GPLv3.

About

Практический трек «Go в DevOps»: реализация сбора (агент) и хранения (сервер) метрик.

Topics

Resources

License

Stars

Watchers

Forks