...
Code Block | ||||
---|---|---|---|---|
| ||||
import (
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var (
reqDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "rapp_http_request_duration_seconds",
Help: "Duration of the last request call.",
Buckets: []float64{0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10},
}, []string{"app", "func", "handler", "method", "code"})
reqBytes = prometheus.NewSummaryVec(prometheus.SummaryOpts{
Name: "rapp_bytes_summary",
Help: "Summary of bytes transferred over http",
}, []string{"app", "func", "handler", "method", "code"})
)
func getToken() string {
resp := &http.Response{}
...
timer := prometheus.NewTimer(prometheus.ObserverFunc(func(v float64) {
reqDuration.WithLabelValues("rapp-jwt-invoker", "getToken", resp.Request.URL.Path, resp.Request.Method,
resp.Status).Observe(v)
}))
defer timer.ObserveDuration()
resp, err = http.PostForm(keycloakUrl, url.Values{"client_assertion_type": {client_assertion_type},
"client_assertion": {client_assertion}, "grant_type": {"client_credentials"},
"client_id": {clientId}, "scope": {scope}})
if err != nil {
fmt.Println(err)
panic("Something wrong with the credentials or url ")
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
json.Unmarshal([]byte(body), &jwt)
reqBytes.WithLabelValues("rapp-jwt-invoker", "getToken", resp.Request.URL.Path, resp.Request.Method,
resp.Status).Observe(float64(resp.ContentLength))
....
}
....
func main() {
prometheus.Register(reqDuration)
prometheus.Register(reqBytes)
http.Handle("/metrics", promhttp.Handler())
go func() {
http.ListenAndServe(":9000", nil)
}()
....
}
|
Lastly you need to update the scrape_configs section in prometheus.yaml
...