Label이란
Label이란 메트릭에 Key-Value형식으로 Metric을 구분하는데 많이 사용된다. Kubernetes에서는 Pod, Node, Cluster, 또는 Application 등을 Metric에서 구분하는데 많이 사용된다.
Go언어 Metric에 Label 등록하기
package main
import (
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prometheus/client_golang/prometheus/promhttp"
"net/http"
"time"
)
const (
LabelAppName = "application_name"
LabelFuncName = "function_name"
)
var (
MyCounter *prometheus.CounterVec
)
func Init() {
MyCounter = promauto.NewCounterVec(prometheus.CounterOpts{
Name: "my_test_count",
Help: "my test count",
},[]string{
LabelAppName,
LabelFuncName,
})
}
func RunFunc1() {
labels := prometheus.Labels{
LabelAppName: "my_app",
LabelFuncName: "run_func1",
}
for {
MyCounter.With(labels).Inc()
time.Sleep(time.Second * 2)
}
}
func RunFunc2() {
labels := prometheus.Labels{
LabelAppName: "my_app",
LabelFuncName: "run_func2",
}
for {
MyCounter.With(labels).Inc()
time.Sleep(time.Second * 5)
}
}
func main() {
Init()
go RunFunc1()
go RunFunc2()
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":30001", nil)
}
코드설명
기존 Metric의 코드와 크게 다르지 않다. prometheus.CounterVec를 통하여 메트릭을 생성하고 메트릭을 생성할 때 상수로 선언된 LabelAppName, LabelFuncName을 통하여 application_name, function_name이라는 Label을 등록하였습니다. 그리고 각각의 RunFunc1(), RunFunc2() 함수로 각각 별도의 function_name의 Label을 등록하였습니다.
Promql로 구분하여 검색하기
기존처럼 Metric 이름으로 검색하면 run_func1, run_func2가 모두 검색됩니다.
my_test_count
Label에 run_func1을 지정하여 특정 Label의 Metric을 검색하면 run_func1만 검색됩니다.
my_test_count{function_name="run_func1"}
결과 확인하기
'Go언어' 카테고리의 다른 글
go work 사용해보기 (0) | 2023.07.06 |
---|---|
Ubuntu(Linux)에서 Go 재설치 (0) | 2022.10.30 |
Go언어 interface reflect (0) | 2021.08.15 |
Go언어 Cron (0) | 2021.06.15 |
Prometheus Go언어 Metric 생성 (0) | 2021.06.13 |