Несколько конечных точек для Prometheus in Go

В настоящее время я работаю над программой, написанной на Go (golang) это контролируется Прометеем.

Теперь программа должна обслуживать две конечные точки /metrics а также /service, Когда прометей на Прометея /metrics, он должен выставлять свои собственные метрики (например, сделанные запросы, задержка запроса, ...) и при проверке на /service, он должен запросить API, получить метрики оттуда и выставить их Прометею.

Для первой части я создаю, например, счетчик через

requestCount := kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{
    Namespace: "SERVICE",
    Subsystem: "service_metrics",
    Name:      "request_count",
    Help:      "Number of requests received.",
}, fieldKeys)

и обслуживать вещи через:

http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8090", nil)

для /service часть, я запрашиваю API, извлекаю значение и обновляю другой датчик с помощью Gauge.Set(value)

  • Как мне выставить этот последний датчик на другой конечной точке, не запуская другой сервер (другой порт)?
  • Нужно ли создавать свой собственный коллектор (у меня нет пользовательских метрик, так что нет, верно?)?

0 ответов

Ты можешь использовать prometheus.NewRegistry создать пользовательский коллектор и выставить его на нужную конечную точку, используя promhttp.HandlerFor,

var (
        // custom collector
        reg = prometheus.NewRegistry()
        // some metrics
        myGauge = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
                        Name: "gauge_name",
                        Help: "guage_help",
                },
                []string{"l"},
        )
)

func init() {
        // register metrics to my collector
        reg.MustRegister(myGauge)
}

func main() {
        // instrument
        myGauge.WithLabelValues("l").Set(123)

        // expose endpoint
        http.Handle("/service", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
}
Другие вопросы по тегам