mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-15 16:30:55 +01:00
5b3cbd4db1
* app/vlinsert: add support of loki push protocol - implemented loki push protocol for both Protobuf and JSON formats - added examples in documentation - added example docker-compose Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com> * app/vlinsert: move protobuf metric into its own file Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com> * deployment/docker/victorialogs/promtail: update reference to docker image Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com> * deployment/docker/victorialogs/promtail: make volume name unique Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com> * app/vlinsert/loki: add license reference Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com> * deployment/docker/victorialogs/promtail: fix volume name Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com> * docs/VictoriaLogs/data-ingestion: add stream fields for loki JSON ingestion example Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com> * app/vlinsert/loki: move entities to places where those are used Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com> * app/vlinsert/loki: refactor to use common components - use CommonParameters from insertutils - stop ingestion after first error similar to elasticsearch and jsonline Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com> * app/vlinsert/loki: address review feedback - add missing logstorage.PutLogRows calls - refactor tenant ID parsing to use common function - reduce number of allocations for parsing by reusing logfields slices - add tests and benchmarks for requests processing funcs Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com> --------- Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com>
44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
package vlinsert
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/app/vlinsert/elasticsearch"
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/app/vlinsert/jsonline"
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/app/vlinsert/loki"
|
|
)
|
|
|
|
// Init initializes vlinsert
|
|
func Init() {
|
|
}
|
|
|
|
// Stop stops vlinsert
|
|
func Stop() {
|
|
}
|
|
|
|
// RequestHandler handles insert requests for VictoriaLogs
|
|
func RequestHandler(w http.ResponseWriter, r *http.Request) bool {
|
|
path := r.URL.Path
|
|
if !strings.HasPrefix(path, "/insert/") {
|
|
// Skip requests, which do not start with /insert/, since these aren't our requests.
|
|
return false
|
|
}
|
|
path = strings.TrimPrefix(path, "/insert")
|
|
path = strings.ReplaceAll(path, "//", "/")
|
|
|
|
if path == "/jsonline" {
|
|
return jsonline.RequestHandler(w, r)
|
|
}
|
|
switch {
|
|
case strings.HasPrefix(path, "/elasticsearch/"):
|
|
path = strings.TrimPrefix(path, "/elasticsearch")
|
|
return elasticsearch.RequestHandler(path, w, r)
|
|
case strings.HasPrefix(path, "/loki/"):
|
|
path = strings.TrimPrefix(path, "/loki")
|
|
return loki.RequestHandler(path, w, r)
|
|
default:
|
|
return false
|
|
}
|
|
}
|