From 0182f845e8c59cfe46e26dbd2b9ed623d59bf812 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Mon, 19 Nov 2018 21:06:45 +0000 Subject: [PATCH] Make it a single binary. Signed-off-by: Tom Wilkie --- .gitignore | 4 +- cmd/distributor/Dockerfile | 4 - cmd/distributor/main.go | 66 ---------------- cmd/ingester/Dockerfile | 4 - cmd/ingester/main.go | 57 ------------- cmd/querier/Dockerfile | 4 - cmd/querier/main.go | 69 ---------------- cmd/tempo/Dockerfile | 4 + cmd/tempo/main.go | 158 +++++++++++++++++++++++++++++++++++++ 9 files changed, 163 insertions(+), 207 deletions(-) delete mode 100644 cmd/distributor/Dockerfile delete mode 100644 cmd/distributor/main.go delete mode 100644 cmd/ingester/Dockerfile delete mode 100644 cmd/ingester/main.go delete mode 100644 cmd/querier/Dockerfile delete mode 100644 cmd/querier/main.go create mode 100644 cmd/tempo/Dockerfile create mode 100644 cmd/tempo/main.go diff --git a/.gitignore b/.gitignore index 0c5a3c8fa515..eec62096ec32 100644 --- a/.gitignore +++ b/.gitignore @@ -4,9 +4,7 @@ vendor/github.com/cortexproject/cortex/pkg/ingester/client/cortex.pb.go vendor/github.com/cortexproject/cortex/pkg/ring/ring.pb.go .pkg .cache -cmd/distributor/distributor -cmd/ingester/ingester -cmd/querier/querier +cmd/tempo/tempo cmd/promtail/promtail *.output /images/ diff --git a/cmd/distributor/Dockerfile b/cmd/distributor/Dockerfile deleted file mode 100644 index b8b386de83c8..000000000000 --- a/cmd/distributor/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM alpine:3.4 -COPY distributor /bin/distributor -EXPOSE 80 -ENTRYPOINT [ "/bin/distributor" ] diff --git a/cmd/distributor/main.go b/cmd/distributor/main.go deleted file mode 100644 index b85acb00c9c7..000000000000 --- a/cmd/distributor/main.go +++ /dev/null @@ -1,66 +0,0 @@ -package main - -import ( - "flag" - "net/http" - "os" - - "github.com/opentracing-contrib/go-stdlib/nethttp" - opentracing "github.com/opentracing/opentracing-go" - log "github.com/sirupsen/logrus" - "github.com/weaveworks/common/middleware" - "github.com/weaveworks/common/server" - - "github.com/cortexproject/cortex/pkg/ring" - "github.com/cortexproject/cortex/pkg/util" - "google.golang.org/grpc" - - "github.com/grafana/tempo/pkg/distributor" - "github.com/grafana/tempo/pkg/flagext" -) - -func main() { - var ( - flagset = flag.NewFlagSet("", flag.ExitOnError) - serverConfig = server.Config{ - MetricsNamespace: "tempo", - GRPCMiddleware: []grpc.UnaryServerInterceptor{ - middleware.ServerUserHeaderInterceptor, - }, - } - ringConfig ring.Config - distributorConfig distributor.Config - ) - flagext.RegisterConfigs(flagset, &serverConfig, &ringConfig, &distributorConfig) - flagset.Parse(os.Args[1:]) - util.InitLogger(&serverConfig) - - r, err := ring.New(ringConfig) - if err != nil { - log.Fatalf("Error initializing ring: %v", err) - } - defer r.Stop() - - distributor, err := distributor.New(distributorConfig, r) - if err != nil { - log.Fatalf("Error initializing distributor: %v", err) - } - - server, err := server.New(serverConfig) - if err != nil { - log.Fatalf("Error initializing server: %v", err) - } - defer server.Shutdown() - - operationNameFunc := nethttp.OperationNameFunc(func(r *http.Request) string { - return r.URL.RequestURI() - }) - server.HTTP.Handle("/api/prom/push", middleware.Merge( - middleware.Func(func(handler http.Handler) http.Handler { - return nethttp.Middleware(opentracing.GlobalTracer(), handler, operationNameFunc) - }), - middleware.AuthenticateUser, - ).Wrap(http.HandlerFunc(distributor.PushHandler))) - server.HTTP.Handle("/ring", r) - server.Run() -} diff --git a/cmd/ingester/Dockerfile b/cmd/ingester/Dockerfile deleted file mode 100644 index 6db61cddf0f4..000000000000 --- a/cmd/ingester/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM alpine:3.4 -COPY ingester /bin/ingester -EXPOSE 80 -ENTRYPOINT [ "/bin/ingester" ] diff --git a/cmd/ingester/main.go b/cmd/ingester/main.go deleted file mode 100644 index 696553dd834b..000000000000 --- a/cmd/ingester/main.go +++ /dev/null @@ -1,57 +0,0 @@ -package main - -import ( - "flag" - "net/http" - "os" - - "github.com/cortexproject/cortex/pkg/util" - log "github.com/sirupsen/logrus" - "github.com/weaveworks/common/middleware" - "github.com/weaveworks/common/server" - "google.golang.org/grpc" - "google.golang.org/grpc/health/grpc_health_v1" - - "github.com/grafana/tempo/pkg/flagext" - "github.com/grafana/tempo/pkg/ingester" - "github.com/grafana/tempo/pkg/logproto" -) - -func main() { - var ( - flagset = flag.NewFlagSet("", flag.ExitOnError) - serverConfig = server.Config{ - MetricsNamespace: "tempo", - GRPCMiddleware: []grpc.UnaryServerInterceptor{ - middleware.ServerUserHeaderInterceptor, - }, - GRPCStreamMiddleware: []grpc.StreamServerInterceptor{ - middleware.StreamServerUserHeaderInterceptor, - }, - } - ingesterConfig ingester.Config - ) - flagext.RegisterConfigs(flagset, &serverConfig, &ingesterConfig) - flagset.Parse(os.Args[1:]) - - util.InitLogger(&serverConfig) - - ingesterConfig.LifecyclerConfig.ListenPort = &serverConfig.GRPCListenPort - ingester, err := ingester.New(ingesterConfig) - if err != nil { - log.Fatalf("Error initializing ingester: %v", err) - } - defer ingester.Shutdown() - - server, err := server.New(serverConfig) - if err != nil { - log.Fatalf("Error initializing server: %v", err) - } - defer server.Shutdown() - - logproto.RegisterPusherServer(server.GRPC, ingester) - logproto.RegisterQuerierServer(server.GRPC, ingester) - grpc_health_v1.RegisterHealthServer(server.GRPC, ingester) - server.HTTP.Path("/ready").Handler(http.HandlerFunc(ingester.ReadinessHandler)) - server.Run() -} diff --git a/cmd/querier/Dockerfile b/cmd/querier/Dockerfile deleted file mode 100644 index 6b07d4de3d44..000000000000 --- a/cmd/querier/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM alpine:3.4 -COPY querier /bin/querier -EXPOSE 80 -ENTRYPOINT [ "/bin/querier" ] diff --git a/cmd/querier/main.go b/cmd/querier/main.go deleted file mode 100644 index ba78f0ccbc4b..000000000000 --- a/cmd/querier/main.go +++ /dev/null @@ -1,69 +0,0 @@ -package main - -import ( - "flag" - "net/http" - "os" - - "github.com/cortexproject/cortex/pkg/ring" - "github.com/cortexproject/cortex/pkg/util" - "github.com/opentracing-contrib/go-stdlib/nethttp" - opentracing "github.com/opentracing/opentracing-go" - log "github.com/sirupsen/logrus" - "github.com/weaveworks/common/middleware" - "github.com/weaveworks/common/server" - "google.golang.org/grpc" - - "github.com/grafana/tempo/pkg/flagext" - "github.com/grafana/tempo/pkg/querier" -) - -func main() { - var ( - flagset = flag.NewFlagSet("", flag.ExitOnError) - operationNameFunc = nethttp.OperationNameFunc(func(r *http.Request) string { - return r.URL.RequestURI() - }) - serverConfig = server.Config{ - MetricsNamespace: "tempo", - GRPCMiddleware: []grpc.UnaryServerInterceptor{ - middleware.ServerUserHeaderInterceptor, - }, - } - ringConfig ring.Config - querierConfig querier.Config - ) - flagext.RegisterConfigs(flagset, &serverConfig, &ringConfig, &querierConfig) - flagset.Parse(os.Args[1:]) - - util.InitLogger(&serverConfig) - - r, err := ring.New(ringConfig) - if err != nil { - log.Fatalf("Error initializing ring: %v", err) - } - defer r.Stop() - - querier, err := querier.New(querierConfig, r) - if err != nil { - log.Fatalf("Error initializing querier: %v", err) - } - - server, err := server.New(serverConfig) - if err != nil { - log.Fatalf("Error initializing server: %v", err) - } - defer server.Shutdown() - - httpMiddleware := middleware.Merge( - middleware.Func(func(handler http.Handler) http.Handler { - return nethttp.Middleware(opentracing.GlobalTracer(), handler, operationNameFunc) - }), - middleware.AuthenticateUser, - ) - - server.HTTP.Handle("/api/prom/query", httpMiddleware.Wrap(http.HandlerFunc(querier.QueryHandler))) - server.HTTP.Handle("/api/prom/label", httpMiddleware.Wrap(http.HandlerFunc(querier.LabelHandler))) - server.HTTP.Handle("/api/prom/label/{name}/values", httpMiddleware.Wrap(http.HandlerFunc(querier.LabelHandler))) - server.Run() -} diff --git a/cmd/tempo/Dockerfile b/cmd/tempo/Dockerfile new file mode 100644 index 000000000000..07a1affd210f --- /dev/null +++ b/cmd/tempo/Dockerfile @@ -0,0 +1,4 @@ +FROM alpine:3.4 +COPY tempo /bin/tempo +EXPOSE 80 +ENTRYPOINT [ "/bin/tempo" ] diff --git a/cmd/tempo/main.go b/cmd/tempo/main.go new file mode 100644 index 000000000000..c4c853333b08 --- /dev/null +++ b/cmd/tempo/main.go @@ -0,0 +1,158 @@ +package main + +import ( + "flag" + "net/http" + "os" + + "github.com/opentracing-contrib/go-stdlib/nethttp" + opentracing "github.com/opentracing/opentracing-go" + log "github.com/sirupsen/logrus" + "github.com/weaveworks/common/middleware" + "github.com/weaveworks/common/server" + + "github.com/cortexproject/cortex/pkg/ring" + "github.com/cortexproject/cortex/pkg/util" + "google.golang.org/grpc" + "google.golang.org/grpc/health/grpc_health_v1" + + "github.com/grafana/tempo/pkg/distributor" + "github.com/grafana/tempo/pkg/flagext" + "github.com/grafana/tempo/pkg/ingester" + "github.com/grafana/tempo/pkg/logproto" + "github.com/grafana/tempo/pkg/querier" +) + +type target struct { + deps []string + init func() error + stop func() +} + +func main() { + var ( + flagset = flag.NewFlagSet("", flag.ExitOnError) + serverConfig = server.Config{ + MetricsNamespace: "tempo", + GRPCMiddleware: []grpc.UnaryServerInterceptor{ + middleware.ServerUserHeaderInterceptor, + }, + } + ringConfig ring.Config + distributorConfig distributor.Config + ingesterConfig ingester.Config + querierConfig querier.Config + ) + flagext.RegisterConfigs(flagset, &serverConfig, &ringConfig, &distributorConfig, + &ingesterConfig, &querierConfig) + flagset.Parse(os.Args[1:]) + util.InitLogger(&serverConfig) + + server, err := server.New(serverConfig) + if err != nil { + log.Fatalf("Error initializing server: %v", err) + } + defer server.Shutdown() + + var ( + r *ring.Ring + d *distributor.Distributor + i *ingester.Ingester + q *querier.Querier + + mods = map[string]target{ + "ring": target{ + init: func() (err error) { + r, err = ring.New(ringConfig) + return + }, + stop: func() { + r.Stop() + }, + }, + "distributor": target{ + deps: []string{"ring"}, + init: func() (err error) { + d, err = distributor.New(distributorConfig, r) + if err != nil { + return + } + operationNameFunc := nethttp.OperationNameFunc(func(r *http.Request) string { + return r.URL.RequestURI() + }) + server.HTTP.Handle("/api/prom/push", middleware.Merge( + middleware.Func(func(handler http.Handler) http.Handler { + return nethttp.Middleware(opentracing.GlobalTracer(), handler, operationNameFunc) + }), + middleware.AuthenticateUser, + ).Wrap(http.HandlerFunc(d.PushHandler))) + server.HTTP.Handle("/ring", r) + return + }, + stop: func() {}, + }, + "ingester": target{ + deps: []string{"ring"}, + init: func() (err error) { + ingesterConfig.LifecyclerConfig.ListenPort = &serverConfig.GRPCListenPort + i, err = ingester.New(ingesterConfig) + if err != nil { + return + } + logproto.RegisterPusherServer(server.GRPC, i) + logproto.RegisterQuerierServer(server.GRPC, i) + grpc_health_v1.RegisterHealthServer(server.GRPC, i) + server.HTTP.Path("/ready").Handler(http.HandlerFunc(i.ReadinessHandler)) + return + }, + stop: func() { + i.Shutdown() + }, + }, + "querier": target{ + deps: []string{"ring"}, + init: func() (err error) { + q, err = querier.New(querierConfig, r) + if err != nil { + return + } + operationNameFunc := nethttp.OperationNameFunc(func(r *http.Request) string { + return r.URL.RequestURI() + }) + httpMiddleware := middleware.Merge( + middleware.Func(func(handler http.Handler) http.Handler { + return nethttp.Middleware(opentracing.GlobalTracer(), handler, operationNameFunc) + }), + middleware.AuthenticateUser, + ) + server.HTTP.Handle("/api/prom/query", httpMiddleware.Wrap(http.HandlerFunc(q.QueryHandler))) + server.HTTP.Handle("/api/prom/label", httpMiddleware.Wrap(http.HandlerFunc(q.LabelHandler))) + server.HTTP.Handle("/api/prom/label/{name}/values", httpMiddleware.Wrap(http.HandlerFunc(q.LabelHandler))) + return + }, + stop: func() {}, + }, + "lite": target{ + deps: []string{"querier", "ingester", "distributor"}, + init: func() (err error) { + return + }, + stop: func() {}, + }, + } + ) + + var run func(mod string) + run = func(mod string) { + for _, dep := range mods[mod].deps { + run(dep) + } + if err := mods[mod].init(); err != nil { + log.Fatalf("Error initializing %s: %v", mod, err) + } + } + + run(flagset.Arg(0)) + + server.Run() +}