metrics-collector

module
v0.0.0-...-c2add7f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2023 License: GPL-3.0

README

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.

Directories

Path Synopsis
cmd
docs
api
Code generated by swaggo/swag.
Code generated by swaggo/swag.
internal
agent
Package agent implements metrics gathering agent.
Package agent implements metrics gathering agent.
compression
Package compression provides means to extract compressed data from net/http request and compress net/http response.
Package compression provides means to extract compressed data from net/http request and compress net/http response.
config
Package config contains configuration parsing logic and provides metrics agent and server configuration objects.
Package config contains configuration parsing logic and provides metrics agent and server configuration objects.
entity
Package entity provides common layer for different objects and constants used across the project.
Package entity provides common layer for different objects and constants used across the project.
exporter
Package exporter provides means to export collected metrics using one of supported transports.
Package exporter provides means to export collected metrics using one of supported transports.
grpcbackend
Package grpcbackend implements gRPC API for metrics collector server.
Package grpcbackend implements gRPC API for metrics collector server.
grpcserver
Package grpcserver implements handy wrap around gRPC server to group common settings and tasks inside single entity.
Package grpcserver implements handy wrap around gRPC server to group common settings and tasks inside single entity.
httpbackend
Package httpbackend implements REST API for metrics collector server.
Package httpbackend implements REST API for metrics collector server.
httpserver
Package httpserver implements handy wrap around HTTP server to group common settings and tasks inside single entity.
Package httpserver implements handy wrap around HTTP server to group common settings and tasks inside single entity.
logging
Package logging implements basic logging routine.
Package logging implements basic logging routine.
monitoring
Package monitoring provides means to collect different types of metrics.
Package monitoring provides means to collect different types of metrics.
prof
Package prof encapsulates pprof with attached HTTP server.
Package prof encapsulates pprof with attached HTTP server.
recovery
Package recovery provides panic recovering utility which allows to resume goroutine execution if possible.
Package recovery provides panic recovering utility which allows to resume goroutine execution if possible.
security
Package security implements security-related features such as signature creation and verification, secrets processing etc.
Package security implements security-related features such as signature creation and verification, secrets processing etc.
server
Package server implements metrics collecting service.
Package server implements metrics collecting service.
services
Package services contains implementationm of business logic for different scenarios.
Package services contains implementationm of business logic for different scenarios.
storage
Package storage implements inetrface to diffent ways of storing metrics data.
Package storage implements inetrface to diffent ways of storing metrics data.
validators
Package validators provides common validators for API requests.
Package validators provides common validators for API requests.
pkg
grpcapi
Package grpcapi provides protobuf bindings to use with gRPC and various helper functions.
Package grpcapi provides protobuf bindings to use with gRPC and various helper functions.
metrics
Package metrics provides client REST API for metrics collector (server).
Package metrics provides client REST API for metrics collector (server).
noexit
Package noexit implement static analyzer which checks for use of 'os.Exit' in the main function of main package.
Package noexit implement static analyzer which checks for use of 'os.Exit' in the main function of main package.
staticlint
Package staticlint implements multichecker static analyser with different linters.
Package staticlint implements multichecker static analyser with different linters.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL