app/vlinsert: Add vl_http_request_duration_seconds metrics (#4934)

This commit is contained in:
crossoverJie 2023-09-16 21:10:29 +08:00 committed by Aliaksandr Valialkin
parent 55d25fb844
commit fb13887573
No known key found for this signature in database
GPG key ID: A72BEC6CD3D0DED1
4 changed files with 20 additions and 4 deletions

View file

@ -86,6 +86,7 @@ func RequestHandler(path string, w http.ResponseWriter, r *http.Request) bool {
return true return true
case "/_bulk": case "/_bulk":
startTime := time.Now() startTime := time.Now()
defer bulkRequestDuration.UpdateDuration(startTime)
bulkRequestsTotal.Inc() bulkRequestsTotal.Inc()
cp, err := insertutils.GetCommonParams(r) cp, err := insertutils.GetCommonParams(r)
@ -116,7 +117,8 @@ func RequestHandler(path string, w http.ResponseWriter, r *http.Request) bool {
} }
var ( var (
bulkRequestsTotal = metrics.NewCounter(`vl_http_requests_total{path="/insert/elasticsearch/_bulk"}`) bulkRequestsTotal = metrics.NewCounter(`vl_http_requests_total{path="/insert/elasticsearch/_bulk"}`)
bulkRequestDuration = metrics.NewSummary(`vl_http_request_duration_seconds{path="/insert/elasticsearch/_bulk"}`)
) )
func readBulkRequest(r io.Reader, isGzip bool, timeField, msgField string, func readBulkRequest(r io.Reader, isGzip bool, timeField, msgField string,

View file

@ -19,8 +19,11 @@ import (
"github.com/VictoriaMetrics/metrics" "github.com/VictoriaMetrics/metrics"
) )
var jsonlineRequestDuration = metrics.NewSummary(`vl_http_request_duration_seconds{path="/insert/jsonline"}`)
// RequestHandler processes jsonline insert requests // RequestHandler processes jsonline insert requests
func RequestHandler(w http.ResponseWriter, r *http.Request) bool { func RequestHandler(w http.ResponseWriter, r *http.Request) bool {
defer jsonlineRequestDuration.UpdateDuration(time.Now())
w.Header().Add("Content-Type", "application/json") w.Header().Add("Content-Type", "application/json")
if r.Method != "POST" { if r.Method != "POST" {

View file

@ -2,6 +2,7 @@ package loki
import ( import (
"net/http" "net/http"
"time"
"github.com/VictoriaMetrics/metrics" "github.com/VictoriaMetrics/metrics"
@ -10,8 +11,10 @@ import (
) )
var ( var (
lokiRequestsJSONTotal = metrics.NewCounter(`vl_http_requests_total{path="/insert/loki/api/v1/push",format="json"}`) lokiRequestsJSONTotal = metrics.NewCounter(`vl_http_requests_total{path="/insert/loki/api/v1/push",format="json"}`)
lokiRequestsProtobufTotal = metrics.NewCounter(`vl_http_requests_total{path="/insert/loki/api/v1/push",format="protobuf"}`) lokiRequestsProtobufTotal = metrics.NewCounter(`vl_http_requests_total{path="/insert/loki/api/v1/push",format="protobuf"}`)
lokiRequestJSONDuration = metrics.NewSummary(`vl_http_request_duration_seconds{path="/insert/loki/api/v1/push",format="json"}`)
lokiRequestProtobufDuration = metrics.NewSummary(`vl_http_request_duration_seconds{path="/insert/loki/api/v1/push",format="protobuf"}`)
) )
// RequestHandler processes Loki insert requests // RequestHandler processes Loki insert requests
@ -34,10 +37,12 @@ func handleInsert(r *http.Request, w http.ResponseWriter) bool {
contentType := r.Header.Get("Content-Type") contentType := r.Header.Get("Content-Type")
switch contentType { switch contentType {
case "application/json": case "application/json":
defer lokiRequestJSONDuration.UpdateDuration(time.Now())
lokiRequestsJSONTotal.Inc() lokiRequestsJSONTotal.Inc()
return handleJSON(r, w) return handleJSON(r, w)
default: default:
// Protobuf request body should be handled by default accoring to https://grafana.com/docs/loki/latest/api/#push-log-entries-to-loki // Protobuf request body should be handled by default according to https://grafana.com/docs/loki/latest/api/#push-log-entries-to-loki
defer lokiRequestProtobufDuration.UpdateDuration(time.Now())
lokiRequestsProtobufTotal.Inc() lokiRequestsProtobufTotal.Inc()
return handleProtobuf(r, w) return handleProtobuf(r, w)
} }

View file

@ -81,6 +81,8 @@ The response by default contains [`_msg`](https://docs.victoriametrics.com/Victo
[`_time`](https://docs.victoriametrics.com/VictoriaLogs/keyConcepts.html#time-field) fields plus the explicitly mentioned fields. [`_time`](https://docs.victoriametrics.com/VictoriaLogs/keyConcepts.html#time-field) fields plus the explicitly mentioned fields.
See [these docs](https://docs.victoriametrics.com/VictoriaLogs/LogsQL.html#querying-specific-fields) for details. See [these docs](https://docs.victoriametrics.com/VictoriaLogs/LogsQL.html#querying-specific-fields) for details.
The duration of requests to `/insert/elasticsearch/_bulk` can be monitored with `vl_http_request_duration_seconds{path="/insert/elasticsearch/_bulk"}` metric.
See also: See also:
- [How to debug data ingestion](#troubleshooting). - [How to debug data ingestion](#troubleshooting).
@ -133,6 +135,8 @@ The response by default contains [`_msg`](https://docs.victoriametrics.com/Victo
[`_time`](https://docs.victoriametrics.com/VictoriaLogs/keyConcepts.html#time-field) fields plus the explicitly mentioned fields. [`_time`](https://docs.victoriametrics.com/VictoriaLogs/keyConcepts.html#time-field) fields plus the explicitly mentioned fields.
See [these docs](https://docs.victoriametrics.com/VictoriaLogs/LogsQL.html#querying-specific-fields) for details. See [these docs](https://docs.victoriametrics.com/VictoriaLogs/LogsQL.html#querying-specific-fields) for details.
The duration of requests to `/insert/jsonline` can be monitored with `vl_http_request_duration_seconds{path="/insert/jsonline"}` metric.
See also: See also:
- [How to debug data ingestion](#troubleshooting). - [How to debug data ingestion](#troubleshooting).
@ -172,6 +176,8 @@ The response by default contains [`_msg`](https://docs.victoriametrics.com/Victo
[`_time`](https://docs.victoriametrics.com/VictoriaLogs/keyConcepts.html#time-field) fields plus the explicitly mentioned fields. [`_time`](https://docs.victoriametrics.com/VictoriaLogs/keyConcepts.html#time-field) fields plus the explicitly mentioned fields.
See [these docs](https://docs.victoriametrics.com/VictoriaLogs/LogsQL.html#querying-specific-fields) for details. See [these docs](https://docs.victoriametrics.com/VictoriaLogs/LogsQL.html#querying-specific-fields) for details.
The duration of requests to `/insert/loki/api/v1/push` can be monitored with `vl_http_request_duration_seconds{path="/insert/loki/api/v1/push"}` metric.
See also: See also:
- [How to debug data ingestion](#troubleshooting). - [How to debug data ingestion](#troubleshooting).