Репозиторий для практического трека «Go в DevOps». Содержит следующие компоненты:
- сервис сбора метрик (агент);
- сервис хранения метрик (сервер);
- утилита статического анализа кода (
multichecker
).
- Инкремент 1 (агент)
- Инкремент 2 (сервер)
- Инкремент 3 (web framework)
- Инкремент 4 (JSON API)
- Инкремент 5 (переменные окружения)
- Инкремент 6 (сохранение данных на диск)
- Инкремент 7 (флаги командной строки)
- Инкремент 8 (поддержка сжатия)
- Инкремент 9 (подписывание передаваемых данных)
- Инкремент 10 (проверка соединения с базой)
- Инкремент 11 (сохранение данных в базе)
- Инкремент 12 (отправка метрик списком)
- Инкремент 13 (ошибки и логирование)
- Инкремент 14 (метрики CPU и добавление асинхронности в агент)
- Инкремент 15 (профилирование)
- Инкремент 16 (форматирование кода)
- Инкремент 17 (документирование)
- Инкремент 18 (multichecker)
- Инкремент 19 (флаги сборки)
- Инкремент 20 (шифрование агент -> сервер)
- Инкремент 21 (конфигурационные файлы)
- Инкремент 22 (штатное завершение работы)
- Инкремент 23 (блокировка запросов из недоверенной подсети)
- Инкремент 24 (gRPC)
Для получения полного списка доступных команд выполните:
make help
В проекте используется golangci-lint
для локальной разработки. Для установки линтера воспользуйтесь официальной инструкцией.
В проекте используется pre-commit
для запуска линтеров перед коммитом. Для установки утилиты воспользуйтесь официальной инструкцией, затем выполните команду:
make install-tools
Для генерации 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
Для работы с миграциями БД необходимо установить утилиту golang-migrate:
go install -tags "postgres" github.com/golang-migrate/migrate/v4/cmd/migrate@latest
Для генерации документации в формате 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=
./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.