Я пытаюсь написать программу, которая выставляет метрики Прометея. Это простая программа, в которой я хочу увеличивать счетчик каждый раз, когда мой метод «run» вызывается в моей структуре.
import (
"log"
"net/http"
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
type myStruct struct {
errorCount prometheus.Counter
}
func (s myStruct) initialize() {
s.errorCount = prometheus.NewCounter(prometheus.CounterOpts{
Name: "my_counter",
Help: "sample prometheus counter",
})
}
func (s myStruct) run() {
s.errorCount.Add(1)
}
func main() {
s := new(myStruct)
s.initialize()
http.Handle("/metrics", promhttp.Handler())
go func() {
for {
s.run()
time.Sleep(time.Second)
}
}()
log.Fatal(http.ListenAndServe(":8080", nil))
}
Вышеприведенный код завершается с ошибкой «Failed to continue - bad access» , каждый раз, когда я пытаюсь увеличить счетчик. то есть в этой строке
s.errorCount.Inc()
Я не могу определить, почему счетчик внезапно исчезает из памяти (если я правильно понимаю сообщение об ошибке). Я определяю, упускаю ли я что-то фундаментальное из Go или неправильно использую клиентскую библиотеку Prometheus.