metrics

package module
v0.1.7 Latest Latest
Warning

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

Go to latest
Published: May 14, 2022 License: MIT Imports: 7 Imported by: 0

README

metrics

Пакет, собирающий метрики из приложения и отправляющий их в специальную очередь в RabbitMQ.

Отправка метрик происходит раз в N секунд. За это отвечает специальная процедура, бесконечно наблюдающая за батчем. Все метрики собираются в специальный батч, который при полном заполнении отправляется в RabbitMQ. После этого батч очищается и готов получать новые метрики. Также, если метрики давно не отправлялись, но при этом если батч не пуст - происходит отправка всех метрик, которые в нем есть. Помимо пользовательских метрик, пакет собирает и системные.

Поддерживаемые типы метрик

  • CounterMetricType - метрика-счетчик, позволяющая рассчитывать rate на основе ее изменений.
  • GaugeMetricType - метрика-значение, позволяющая видеть ее значение в конкретный момент времени.

Конфигурация

Prometheus
Параметр Тип Описание Дефолтное значение
DefaultLabels metrics.Labels Лейблы, которые будут автоматически добавлены ко всем метрикам. metrics.Labels{}
Prefix string Префикс, добавляемый к названию всех метрик. ""
Exchange string Название обменника, через которого будут отправляться сообщения в RabbitMQ. "amq.direct"
Queue string Очередь, в которую будут складываться сообщения с метриками. "metrics.prometheus"
MessageTTL int Длительность жизни сообщений в очереди в RabbitMQ, в секундах. 3600
Period time.Duration Период мониторинга батча и отправки метрик в RabbitMQ. 5 * time.Second
BatchSize int Максимальное кол-во метрик в одном батче. 10
BatchTTL time.Duration Длительность жизни одного батча до момент форс-отправки метрик. 60 * time.Second
ClickHouse

¯\_(ツ)_/¯

Пример использования

package main

import (
  "time"
  "os"
  "syscall"
  "signal"

  "github.com/streadway/amqp"
  "git.debtfair.ru/external/metrics"
)

func main() {
  // подключение к RabbitMQ
  // ...

  // конфигурация сервиса для сбора метрик
  prometheusService := metrics.NewPrometheusService(channel)
  prometheusService.Exchange = "metrics.direct"
  prometheusService.Queue = "metrics.prometheus"
  prometheusService.MessageTTL = 60
  prometheusService.BatchSize = 100
  prometheusService.BatchTTL = time.Duration(1) * time.Second
  prometheusService.Period = time.Duration(10) * time.Second
  prometheusService.DefaultLabels = metrics.Labels{"label": "value", "env": "development"}
  defer prometheusService.Close()

  done := make(chan os.Signal, 1)
  signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)

  // фоновая горутина, отправляющая метрики в RabbitMQ
  go prometheusService.Monitor()

  // шоткат на counter-метрику
  prometheusService.Counter("counter_metric", metrics.Labels{})

  go func() {
    // шоткат на длительность выполнения
    defer prometheusService.Duration(time.Now(), "duration", metrics.Labels{})
  }()

  // ручное добавление метрики
  prometheusService.AddMetric(metrics.Metric{
    Name:   "custom_metric",
    Value:  12345.6789,
    Labels: metrics.Labels{},
    Type:   metrics.GaugeMetricType,
  })

  <-done
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Batch

type Batch struct {
	MaxSize int // максимальный размер пачки
	// contains filtered or unexported fields
}

Батч с метриками для RabbitMQ.

func NewBatch

func NewBatch() Batch

Инициализирует новый батч.

func (*Batch) AddMetric

func (b *Batch) AddMetric(metric Metric)

Добавляет метрику в общий пул.

func (*Batch) Reset

func (b *Batch) Reset()

Сбрасывает батч до начального состояния.

type Labels

type Labels map[string]string

func (Labels) With

func (l Labels) With(additional map[string]string) Labels

Добавляет к исходным лейблам новые. Возвращает новый map с объединенными лейблами.

type Metric

type Metric struct {
	Name   string     `json:"n"` // название метрики
	Value  float64    `json:"v"` // значение
	Labels Labels     `json:"l"` // лейблы
	Type   MetricType `json:"t"` // тип метрики
}

Общая структура статистической метрики.

type MetricType

type MetricType string
const (
	CounterMetricType MetricType = "counter"
	GaugeMetricType   MetricType = "gauge"
)

type PrometheusService

type PrometheusService struct {
	DefaultLabels Labels // дефолтные лейблы, присваиваемые всем метрикам
	Prefix        string // префикс, добавляемый к названию всех метрик

	Exchange   string // обменник, через который пойдет сообщение
	Queue      string // очередь с метриками
	MessageTTL int    // время жизни сообщения в очереди

	Period    time.Duration // период отправки сообщений в RabbitMQ
	BatchSize int           // размер пакета с метриками
	BatchTTL  time.Duration // время жизни одного батча
	// contains filtered or unexported fields
}

Сервис для общения с Prometheus через RabbitMQ.

func NewPrometheusService

func NewPrometheusService(connection *r.Connection) (*PrometheusService, error)

Инициализирует новый сервис для отправки метрик в Prometheus.

func (*PrometheusService) AddMetric

func (ps *PrometheusService) AddMetric(metric Metric)

Добавляет метрику в батч, который будет отправлен в очередь.

func (*PrometheusService) Close

func (ps *PrometheusService) Close() error

Завершает процесс по отправке метрик в RabbitMQ.

func (*PrometheusService) Counter

func (ps *PrometheusService) Counter(metric string, labels Labels)

Добавляет counter-метрику в Prometheus. Один вызов равняется +1 к метрике.

func (*PrometheusService) Duration

func (ps *PrometheusService) Duration(since time.Time, metric string, labels Labels)

Рассчитывает метрику длительности выполнения кода. Значение метрики вычисляется в микросекундах.

func (*PrometheusService) ForceAddMetric added in v0.1.1

func (ps *PrometheusService) ForceAddMetric(metric Metric) error

Добавляет метрику напрямую в RabbitMQ, минуя механизм с батчами.

func (*PrometheusService) Init

func (ps *PrometheusService) Init() error

Инициализирует очередь, связанную с метриками для Prometheus.

func (*PrometheusService) Monitor

func (ps *PrometheusService) Monitor() error

Запускает цикл по обработке метрик.

func (*PrometheusService) SystemMetrics added in v0.1.4

func (ps *PrometheusService) SystemMetrics() error

Добавляет системные метрики в Prometheus. В системные метрики входят:

  • CPU, %
  • Memory usage, MB

Jump to

Keyboard shortcuts

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