Как были настроены метрики? Сервис пушил метрики или их пулили?

Метрики в сервисах обычно настраиваются двумя основными способами: push и pull.

Короткий ответ

Что ответить на собеседовании

Метрики в сервисах обычно настраиваются двумя основными способами: push и pull.

Подробный разбор

Ответ с пояснениями

Метрики в сервисах обычно настраиваются двумя основными способами: push и pull.

  • Push-модель: сервисы сами отправляют (push) метрики в систему мониторинга или промежуточный сборщик (например, Prometheus Pushgateway). Это удобно для кратковременных или нестабильных сервисов, которые не могут быть постоянно доступны для опроса.
  • Pull-модель: система мониторинга периодически опрашивает (pull) сервисы по HTTP или другому протоколу, чтобы получить актуальные метрики. Это стандартный подход в Prometheus, где сервисы экспонируют метрики на специальном endpoint (/metrics).

В моих проектах чаще использовалась pull-модель с Prometheus: сервисы на Go экспонировали метрики через HTTP, а Prometheus регулярно их собирал. Это упрощает архитектуру и снижает нагрузку на сервисы.

Пример экспонирования метрик в Go с использованием библиотеки Prometheus:

import (
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
    "net/http"
)

var opsProcessed = prometheus.NewCounter(prometheus.CounterOpts{
    Name: "myapp_processed_ops_total",
    Help: "The total number of processed events",
})

func init() {
    prometheus.MustRegister(opsProcessed)
}

func main() {
    http.Handle("/metrics", promhttp.Handler())
    go func() {
        for {
            opsProcessed.Inc()
            time.Sleep(time.Second)
        }
    }()
    http.ListenAndServe(":2112", nil)
}

Таким образом, сервис сам предоставляет метрики, а система мониторинга их собирает.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее