Categorygithub.com/Constantine-IT/devops
module
0.0.0-20220602001127-034cc0ed5e66
Repository: https://github.com/constantine-it/devops.git
Documentation: pkg.go.dev

# README

DevOps - агент и сервер мониторинга

агентом используются метрики пакетов runtime и gopsutil

Конфигурация СЕРВЕРА через переменные окружения и флаги запуска:

  1. флаг -a - ADDRESS - адрес запуска сервера (по умолчанию - 127.0.0.1:8080)
  2. флаг -d - DATABASE_DSN - адрес подключения к БД (PostgreSQL v.10+) (по умолчанию - "", т.е. работаем без БД)
  3. флаг -f - FILE_STORE - файл хранения метрик (по умолчанию - "/tmp/devops-metrics-db.json")
  4. флаг -i - STORE_INTERVAL — интервал сброса показания сервера на диск (сек.) (по умолчанию - 300 секунд)
  5. флаг -r - RESTORE — определяет, загружать ли метрики файла при старте сервера (по умолчанию - TRUE - загружать)
  6. флаг -k - KEY - ключ подписи передаваемых метрик (по умолчанию отсутствует, т.е. - "")

DATABASE_DSN имеет приоритет над FILE_STORE, то есть использование базы данных отменяет запись метрик в файл, но возможно считывание метрик из файла при старте сервера, при наличии RESTORE=true

Конфигурация АГЕНТА через переменные окружения и флаги запуска:

  1. флаг -a - ADDRESS - адрес сервера мониторинга (по умолчанию - 127.0.0.1:8080)
  2. флаг -p - POLL_INTERVAL - интервал обновления метрик (сек.) (по умолчанию - 2 сек.)
  3. флаг -r - REPORT_INTERVAL - интервал отправки метрик на сервер (сек.) (по умолчанию - 10 сек.)
  4. флаг -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 / - запрашивает список всех сохраненных в базе метрик, ответ возвращаается в текстовом виде в теле пакета

# Packages

No description provided by the author