metrics

package module
v0.2.18 Latest Latest
Warning

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

Go to latest
Published: Jun 23, 2023 License: MIT Imports: 0 Imported by: 0

README

metrics

v0.2.7

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

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

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

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

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

Prometheus
Параметр Тип Описание Дефолтное значение
DRY bool Режим, в котором будет запущен коллектор метрик. true - эмулирование сбора метрик; false - реальный сбор метрик. false
DefaultLabels amqprometheus.Labels Лейблы, которые будут автоматически добавлены ко всем метрикам. amqprometheus.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"

  amqp "github.com/rabbitmq/amqp091-go"
  "git.debtfair.ru/external/metrics/amqprometheus"
)

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

  // конфигурация сервиса для сбора метрик
  prometheusService := amqprometheus.NewPrometheusService(context, channel)
  prometheusService.DRY = false
  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 = amqprometheus.Labels{"label": "value", "env": "development"}
  defer prometheusService.Shutdown()

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

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

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

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

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

  <-done
}

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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