metrics

package module
Version: v0.1.11 Latest Latest
Warning

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

Go to latest
Published: Jun 28, 2022 License: MIT Imports: 2 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       // максимальный размер пачки
	LastSendAt time.Time // дата и время последней отправки батча
	// contains filtered or unexported fields
}

Батч с метриками.

func NewBatch

func NewBatch() Batch

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

func (*Batch) AddMetric

func (b *Batch) AddMetric(metric Metric)

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

func (*Batch) MarshalJSON added in v0.1.8

func (b *Batch) MarshalJSON() ([]byte, error)

Сериализует список метрик в JSON.

func (*Batch) Reset

func (b *Batch) Reset()

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

func (*Batch) Size added in v0.1.8

func (b *Batch) Size() int

Возвращает текущий размер батча.

type Labels

type Labels map[string]string

func (Labels) With

func (l Labels) With(additional Labels) 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 Service added in v0.1.8

type Service interface {
	// Инициализирует сервис, обслуживающий метрики.
	Init() error
	// Добавляет метрику в очередь.
	AddMetric(Metric) error
	// Напрямую добавляет метрику в связанный ресурс.
	ForceAddMetric(Metric) error
	// Останавливает процесс сбора метрики, завершает работу.
	Shutdown() error
	// Запускает процесс по сбору метрики.
	Collect() error
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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