...
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()) .... } |
Lastly you need to update the scrape_configs section in prometheus.yaml
scrape_configs:
- job_name: rapp
scrape_interval: 10s
metrics_path: /metrics
static_configs:
- targets:
- rapp-jwt-invoker.istio-nonrtric:80
You can Youcan then create your own dashboard in grafana using these metrics: rapps-requests.json
...