Skip to content

Commit

Permalink
Added support for tail to query frontend (grafana#2032)
Browse files Browse the repository at this point in the history
* Added support for tail to query frontend

* cleanup WsTailProxy

* used httputil.NewSingleHostReverseProxy insted of custom implementation, added tailproxy config

* proxy all unknown requests

* rename proxy to tailProxy

* default handler, if tailproxy url is set up default proxy is tailproxy

* embedded lokifrontend conf which adds tail_proxy_url

* fixed tail_proxy_url flag
  • Loading branch information
tivvit authored Jul 24, 2020
1 parent 4e2b37b commit 2e1fd42
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 3 deletions.
3 changes: 2 additions & 1 deletion pkg/loki/loki.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
"github.com/grafana/loki/pkg/distributor"
"github.com/grafana/loki/pkg/ingester"
"github.com/grafana/loki/pkg/ingester/client"
"github.com/grafana/loki/pkg/lokifrontend"
"github.com/grafana/loki/pkg/querier"
"github.com/grafana/loki/pkg/querier/queryrange"
"github.com/grafana/loki/pkg/storage"
Expand All @@ -54,7 +55,7 @@ type Config struct {
LimitsConfig validation.Limits `yaml:"limits_config,omitempty"`
TableManager chunk.TableManagerConfig `yaml:"table_manager,omitempty"`
Worker frontend.WorkerConfig `yaml:"frontend_worker,omitempty"`
Frontend frontend.Config `yaml:"frontend,omitempty"`
Frontend lokifrontend.Config `yaml:"frontend,omitempty"`
QueryRange queryrange.Config `yaml:"query_range,omitempty"`
RuntimeConfig runtimeconfig.ManagerConfig `yaml:"runtime_config,omitempty"`
MemberlistKV memberlist.KVConfig `yaml:"memberlist"`
Expand Down
21 changes: 19 additions & 2 deletions pkg/loki/modules.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import (
"errors"
"fmt"
"net/http"
"net/http/httputil"
"net/url"
"os"
"sort"
"time"
Expand Down Expand Up @@ -267,7 +269,7 @@ func (t *Loki) initStore() (_ services.Service, err error) {

func (t *Loki) initQueryFrontend() (_ services.Service, err error) {
level.Debug(util.Logger).Log("msg", "initializing query frontend", "config", fmt.Sprintf("%+v", t.cfg.Frontend))
t.frontend, err = frontend.New(t.cfg.Frontend, util.Logger, prometheus.DefaultRegisterer)
t.frontend, err = frontend.New(t.cfg.Frontend.Config, util.Logger, prometheus.DefaultRegisterer)
if err != nil {
return
}
Expand Down Expand Up @@ -297,6 +299,21 @@ func (t *Loki) initQueryFrontend() (_ services.Service, err error) {
serverutil.NewPrepopulateMiddleware(),
).Wrap(t.frontend.Handler())

var defaultHandler http.Handler
if t.cfg.Frontend.TailProxyUrl != "" {
httpMiddleware := middleware.Merge(
t.httpAuthMiddleware,
queryrange.StatsHTTPMiddleware,
)
tailURL, err := url.Parse(t.cfg.Frontend.TailProxyUrl)
if err != nil {
return nil, err
}
tp := httputil.NewSingleHostReverseProxy(tailURL)
defaultHandler = httpMiddleware.Wrap(tp)
} else {
defaultHandler = frontendHandler
}
t.server.HTTP.Handle("/loki/api/v1/query_range", frontendHandler)
t.server.HTTP.Handle("/loki/api/v1/query", frontendHandler)
t.server.HTTP.Handle("/loki/api/v1/label", frontendHandler)
Expand All @@ -308,7 +325,7 @@ func (t *Loki) initQueryFrontend() (_ services.Service, err error) {
t.server.HTTP.Handle("/api/prom/label/{name}/values", frontendHandler)
t.server.HTTP.Handle("/api/prom/series", frontendHandler)
// fallback route
t.server.HTTP.PathPrefix("/").Handler(frontendHandler)
t.server.HTTP.PathPrefix("/").Handler(defaultHandler)

return services.NewIdleService(nil, func(_ error) error {
t.frontend.Close()
Expand Down
17 changes: 17 additions & 0 deletions pkg/lokifrontend/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package lokifrontend

import (
"flag"
"github.com/cortexproject/cortex/pkg/querier/frontend"
)

type Config struct {
frontend.Config `yaml:",inline"`
TailProxyUrl string `yaml:"tail_proxy_url"`
}

// RegisterFlags adds the flags required to config this to the given FlagSet.
func (cfg *Config) RegisterFlags(f *flag.FlagSet) {
cfg.Config.RegisterFlags(f)
f.StringVar(&cfg.TailProxyUrl, "frontend.tail-proxy-url", "", "URL of querier for tail proxy.")
}

0 comments on commit 2e1fd42

Please sign in to comment.