Skip to content

Commit

Permalink
Add --endpoint in querier
Browse files Browse the repository at this point in the history
Signed-off-by: Hitanshu Mehta <[email protected]>
  • Loading branch information
hitanshu-mehta committed Jun 2, 2021
1 parent 89aedf4 commit b688deb
Show file tree
Hide file tree
Showing 9 changed files with 1,076 additions and 191 deletions.
22 changes: 22 additions & 0 deletions cmd/thanos/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,9 @@ func registerQuery(app *extkingpin.App) {
selectorLabels := cmd.Flag("selector-label", "Query selector labels that will be exposed in info endpoint (repeated).").
PlaceHolder("<name>=\"<value>\"").Strings()

endpoints := cmd.Flag("endpoint", "Addresses of statically configured Thanos API servers (repeatable). The scheme may be prefixed with 'dns+' or 'dnssrv+' to detect Thanos API servers through respective DNS lookups.").
PlaceHolder("<endpoint>").Strings()

stores := cmd.Flag("store", "Addresses of statically configured store API servers (repeatable). The scheme may be prefixed with 'dns+' or 'dnssrv+' to detect store API servers through respective DNS lookups.").
PlaceHolder("<store>").Strings()

Expand Down Expand Up @@ -243,6 +246,7 @@ func registerQuery(app *extkingpin.App) {
*queryReplicaLabels,
selectorLset,
getFlagsMap(cmd.Flags()),
*endpoints,
*stores,
*ruleEndpoints,
*targetEndpoints,
Expand Down Expand Up @@ -304,6 +308,7 @@ func runQuery(
queryReplicaLabels []string,
selectorLset labels.Labels,
flagsMap map[string]string,
endpoints []string,
storeAddrs []string,
ruleAddrs []string,
targetAddrs []string,
Expand Down Expand Up @@ -348,6 +353,12 @@ func runQuery(
}
}

dnsInfoProvider := dns.NewProvider(
logger,
extprom.WrapRegistererWithPrefix("thanos_query_info_apis_", reg),
dns.ResolverType(dnsSDResolver),
)

dnsRuleProvider := dns.NewProvider(
logger,
extprom.WrapRegistererWithPrefix("thanos_query_rule_apis_", reg),
Expand Down Expand Up @@ -419,6 +430,13 @@ func runQuery(

return specs
},
func() (specs []query.InfoSpec) {
for _, addr := range dnsInfoProvider.Addresses() {
specs = append(specs, query.NewGRPCStoreSpec(addr, false))
}

return specs
},
dialOpts,
unhealthyStoreTimeout,
)
Expand Down Expand Up @@ -522,6 +540,10 @@ func runQuery(
if err := dnsExemplarProvider.Resolve(resolveCtx, exemplarAddrs); err != nil {
level.Error(logger).Log("msg", "failed to resolve addresses for exemplarsAPI", "err", err)
}
if err := dnsInfoProvider.Resolve(resolveCtx, endpoints); err != nil {
level.Error(logger).Log("msg", "failed to resolve addresses passed using endpoint flag", "err", err)

}
return nil
})
}, func(error) {
Expand Down
11 changes: 10 additions & 1 deletion cmd/thanos/sidecar.go
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ func runSidecar(
examplarSrv := exemplars.NewPrometheus(conf.prometheus.url, c, m.Labels)

infoSrv := info.NewInfoServer(
infopb.ComponentType_SIDECAR,
component.Sidecar.String(),
func() []labelpb.ZLabelSet {
return promStore.LabelSet()
},
Expand All @@ -272,6 +272,15 @@ func runSidecar(
MaxTime: time.Unix(math.MaxInt64/1000-62135596801, 999999999).UTC().Unix(),
}
},
func() *infopb.RulesInfo {
return &infopb.RulesInfo{}
},
func() *infopb.TargetsInfo {
return &infopb.TargetsInfo{}
},
func() *infopb.MetricMetadataInfo {
return &infopb.MetricMetadataInfo{}
},
)

s := grpcserver.New(logger, reg, tracer, grpcLogOpts, tagOpts, comp, grpcProbe,
Expand Down
5 changes: 4 additions & 1 deletion cmd/thanos/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,7 @@ func runStore(
}

infoSrv := info.NewInfoServer(
infopb.ComponentType_STORE,
component.Store.String(),
func() []labelpb.ZLabelSet {
return bs.LabelSet()
},
Expand All @@ -396,6 +396,9 @@ func runStore(
}
},
func() *infopb.ExemplarsInfo { return nil },
nil,
nil,
nil,
)

// Start query (proxy) gRPC StoreAPI.
Expand Down
59 changes: 42 additions & 17 deletions pkg/info/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package info
import (
"context"

"github.com/go-kit/kit/log"
"github.com/thanos-io/thanos/pkg/info/infopb"
"github.com/thanos-io/thanos/pkg/store/labelpb"
"google.golang.org/grpc"
Expand All @@ -15,25 +14,33 @@ import (
type InfoServer struct {
infopb.UnimplementedInfoServer

logger log.Logger
component infopb.ComponentType
component string

getLabelSet func() []labelpb.ZLabelSet
getStoreInfo func() *infopb.StoreInfo
getExemplarsInfo func() *infopb.ExemplarsInfo
getLabelSet func() []labelpb.ZLabelSet
getStoreInfo func() *infopb.StoreInfo
getExemplarsInfo func() *infopb.ExemplarsInfo
getRulesInfo func() *infopb.RulesInfo
getTargetsInfo func() *infopb.TargetsInfo
getMetricMetadataInfo func() *infopb.MetricMetadataInfo
}

func NewInfoServer(
component infopb.ComponentType,
component string,
getLabelSet func() []labelpb.ZLabelSet,
getStoreInfo func() *infopb.StoreInfo,
getExemplarsInfo func() *infopb.ExemplarsInfo,
getRulesInfo func() *infopb.RulesInfo,
getTargetsInfo func() *infopb.TargetsInfo,
getMetricMetadataInfo func() *infopb.MetricMetadataInfo,
) *InfoServer {
return &InfoServer{
component: component,
getLabelSet: getLabelSet,
getStoreInfo: getStoreInfo,
getExemplarsInfo: getExemplarsInfo,
component: component,
getLabelSet: getLabelSet,
getStoreInfo: getStoreInfo,
getExemplarsInfo: getExemplarsInfo,
getRulesInfo: getRulesInfo,
getTargetsInfo: getTargetsInfo,
getMetricMetadataInfo: getMetricMetadataInfo,
}
}

Expand All @@ -45,10 +52,28 @@ func RegisterInfoServer(infoSrv infopb.InfoServer) func(*grpc.Server) {
}

func (srv *InfoServer) Info(ctx context.Context, req *infopb.InfoRequest) (*infopb.InfoResponse, error) {
return &infopb.InfoResponse{
LabelSets: srv.getLabelSet(),
ComponentType: srv.component,
StoreInfo: srv.getStoreInfo(),
ExemplarsInfo: srv.getExemplarsInfo(),
}, nil

if srv.getRulesInfo == nil {
srv.getRulesInfo = func() *infopb.RulesInfo { return nil }
}

if srv.getTargetsInfo == nil {
srv.getTargetsInfo = func() *infopb.TargetsInfo { return nil }
}

if srv.getMetricMetadataInfo == nil {
srv.getMetricMetadataInfo = func() *infopb.MetricMetadataInfo { return nil }
}

resp := &infopb.InfoResponse{
LabelSets: srv.getLabelSet(),
ComponentType: srv.component,
Store: srv.getStoreInfo(),
Exemplars: srv.getExemplarsInfo(),
Rules: srv.getRulesInfo(),
Targets: srv.getTargetsInfo(),
MetricMetadata: srv.getMetricMetadataInfo(),
}

return resp, nil
}
Loading

0 comments on commit b688deb

Please sign in to comment.