# README
DevOps - агент и сервер мониторинга
агентом используются метрики пакетов runtime и gopsutil
Конфигурация СЕРВЕРА через переменные окружения и флаги запуска:
- флаг
-a
- ADDRESS - адрес запуска сервера (по умолчанию - 127.0.0.1:8080) - флаг
-d
- DATABASE_DSN - адрес подключения к БД (PostgreSQL v.10+) (по умолчанию - "", т.е. работаем без БД) - флаг
-f
- FILE_STORE - файл хранения метрик (по умолчанию - "/tmp/devops-metrics-db.json") - флаг
-i
- STORE_INTERVAL — интервал сброса показания сервера на диск (сек.) (по умолчанию - 300 секунд) - флаг
-r
- RESTORE — определяет, загружать ли метрики файла при старте сервера (по умолчанию - TRUE - загружать) - флаг
-k
- KEY - ключ подписи передаваемых метрик (по умолчанию отсутствует, т.е. - "")
DATABASE_DSN
имеет приоритет над FILE_STORE
, то есть использование базы данных отменяет запись метрик в файл,
но возможно считывание метрик из файла при старте сервера, при наличии RESTORE=true
Конфигурация АГЕНТА через переменные окружения и флаги запуска:
- флаг
-a
- ADDRESS - адрес сервера мониторинга (по умолчанию - 127.0.0.1:8080) - флаг
-p
- POLL_INTERVAL - интервал обновления метрик (сек.) (по умолчанию - 2 сек.) - флаг
-r
- REPORT_INTERVAL - интервал отправки метрик на сервер (сек.) (по умолчанию - 10 сек.) - флаг
-k
- KEY - ключ подписи передаваемых метрик (по умолчанию отсутствует, т.е. - "")
/cmd/server/
- здесь содержится код, который компилируется в серверную часть приложения.
пример: go run server.go -i=2m3s -r=false -k=testkey
/cmd/agent/
- здесь содержится код, который компилируется в клиентскую часть приложения.
пример: go run agent.go -r=22s -k=testkey
Переменные среды имеют приоритет над флагами.
handlers
пакет содержит все маршруты сервера, их обработчики и помощники.
storage
пакет содержит все структуры данных сервера и методы для работы с ними, поддерживаются хранилища:
- в оперативной памяти (RAM),
- в текстовом файле,
- на сервере баз данных.
В проекте используются доп. библиотеки TESTIFY, CHI, GOPSUTIL, RESTY и PGX (PostgreSQL)
Их надо предварительно зарегистрировать в модуле:
go get github.com/go-chi/chi/v5
go get github.com/go-chi/chi/v5/middleware
go get github.com/stretchr/testify/assert
go get github.com/stretchr/testify/require
go get github.com/shirou/gopsutil/v3/mem
go get github.com/go-resty/resty/v2
go get github.com/jackc/pgx/stdlib
Metrics - структура для обмена информацией о метриках между сервером и агентами мониторинга
type Metrics struct {
ID string `json:"id"` // имя метрики
MType string `json:"type"` // параметр, принимающий значение gauge или counter
Delta *int64 `json:"delta,omitempty"` // значение метрики в случае передачи counter
Value *float64 `json:"value,omitempty"` // значение метрики в случае передачи gauge
Hash string `json:"hash,omitempty"` // значение хеш-подписи
}
API агента:
поддерживаются только метрики типов gauge и counter
агент высылает метрики на сервер через эндпоинт POST /updates/
пакетом со списком метрик, в формате JSON с массивом структур Metrics
API сервера:
поддерживаются только метрики типов gauge и counter
Эндпоинт POST - принимает значение метрики через поля PATH /update/{MetricaType}/{MetricaName}/{MetricaValue}
Эндпоинт POST /updates/
- принимает в теле пакета множество метрик в формате JSON с массивом структур Metrics
Эндпоинт POST /update/
- принимает значение метрики в формате JSON со структурой Metrics
Эндпоинт POST /value/
- принимает запрос значения метрики в формате JSON в теле пакета со структурой Metrics,
с пустыми полями Delta и Value, в ответ возвращаается пакет с заполненной JSON-структурой Metrics
Эндпоинт GET - запрашивает значение метрики через поля PATH /value/{MetricaType}/{MetricaName}
,
ответ возвращаается в текстовом виде в теле пакета
Эндпоинт GET /
- запрашивает список всех сохраненных в базе метрик,
ответ возвращаается в текстовом виде в теле пакета