Use grpc client config from cortex for Ingester to get more control (#755)

* Use grpc client config from cortex for Ingester for more control over the connection

* moved ingester client config block at right place in production ksonnet
pull/1020/head
Sandeep Sukhani 6 years ago committed by GitHub
parent 61be4c99dc
commit 107dfd3607
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 30
      pkg/ingester/client/client.go
  2. 8
      pkg/querier/querier_mock_test.go
  3. 12
      production/ksonnet/loki/config.libsonnet

@ -6,9 +6,9 @@ import (
"time"
cortex_client "github.com/cortexproject/cortex/pkg/ingester/client"
"github.com/cortexproject/cortex/pkg/util/grpcclient"
"github.com/grafana/loki/pkg/logproto"
"github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc"
grpc_middleware "github.com/mwitkow/go-grpc-middleware"
opentracing "github.com/opentracing/opentracing-go"
"github.com/weaveworks/common/middleware"
"google.golang.org/grpc"
@ -17,16 +17,16 @@ import (
// Config for an ingester client.
type Config struct {
PoolConfig cortex_client.PoolConfig `yaml:"pool_config,omitempty"`
MaxRecvMsgSize int `yaml:"max_recv_msg_size,omitempty"`
RemoteTimeout time.Duration `yaml:"remote_timeout,omitempty"`
PoolConfig cortex_client.PoolConfig `yaml:"pool_config,omitempty"`
RemoteTimeout time.Duration `yaml:"remote_timeout,omitempty"`
GRPCClientConfig grpcclient.Config `yaml:"grpc_client_config"`
}
// RegisterFlags registers flags.
func (cfg *Config) RegisterFlags(f *flag.FlagSet) {
cfg.GRPCClientConfig.RegisterFlags("ingester.client", f)
cfg.PoolConfig.RegisterFlags(f)
f.IntVar(&cfg.MaxRecvMsgSize, "ingester.client.max-recv-message-size", 64*1024*1024, "Maximum message size, in bytes, this client will receive.")
f.DurationVar(&cfg.PoolConfig.RemoteTimeout, "ingester.client.healthcheck-timeout", 1*time.Second, "Timeout for healthcheck rpcs.")
f.DurationVar(&cfg.RemoteTimeout, "ingester.client.timeout", 5*time.Second, "Timeout for ingester client RPCs.")
}
@ -35,19 +35,11 @@ func (cfg *Config) RegisterFlags(f *flag.FlagSet) {
func New(cfg Config, addr string) (grpc_health_v1.HealthClient, error) {
opts := []grpc.DialOption{
grpc.WithInsecure(),
grpc.WithUnaryInterceptor(grpc_middleware.ChainUnaryClient(
otgrpc.OpenTracingClientInterceptor(opentracing.GlobalTracer()),
middleware.ClientUserHeaderInterceptor,
)),
grpc.WithStreamInterceptor(grpc_middleware.ChainStreamClient(
otgrpc.OpenTracingStreamClientInterceptor(opentracing.GlobalTracer()),
middleware.StreamClientUserHeaderInterceptor,
)),
grpc.WithDefaultCallOptions(
grpc.MaxCallRecvMsgSize(cfg.MaxRecvMsgSize),
grpc.UseCompressor("gzip"),
),
}
opts = append(opts, cfg.GRPCClientConfig.DialOption(instrumentation())...)
conn, err := grpc.Dial(addr, opts...)
if err != nil {
return nil, err
@ -65,3 +57,13 @@ func New(cfg Config, addr string) (grpc_health_v1.HealthClient, error) {
Closer: conn,
}, nil
}
func instrumentation() ([]grpc.UnaryClientInterceptor, []grpc.StreamClientInterceptor) {
return []grpc.UnaryClientInterceptor{
otgrpc.OpenTracingClientInterceptor(opentracing.GlobalTracer()),
middleware.ClientUserHeaderInterceptor,
}, []grpc.StreamClientInterceptor{
otgrpc.OpenTracingStreamClientInterceptor(opentracing.GlobalTracer()),
middleware.StreamClientUserHeaderInterceptor,
}
}

@ -6,6 +6,8 @@ import (
"fmt"
"time"
"github.com/cortexproject/cortex/pkg/util/grpcclient"
"github.com/cortexproject/cortex/pkg/chunk"
cortex_client "github.com/cortexproject/cortex/pkg/ingester/client"
"github.com/cortexproject/cortex/pkg/ring"
@ -65,8 +67,10 @@ func mockIngesterClientConfig() client.Config {
HealthCheckIngesters: false,
RemoteTimeout: 1 * time.Second,
},
MaxRecvMsgSize: 1024,
RemoteTimeout: 1 * time.Second,
GRPCClientConfig: grpcclient.Config{
MaxRecvMsgSize: 1024,
},
RemoteTimeout: 1 * time.Second,
}
}

@ -87,11 +87,6 @@
'config.file': '/etc/loki/config.yaml',
},
ingester_client_config: {
max_recv_msg_size: 1024 * 1024 * 64,
remote_timeout: '1s',
},
loki: {
server: {
graceful_shutdown_timeout: '5s',
@ -132,6 +127,13 @@
},
},
ingester_client: {
grpc_client_config: {
max_recv_msg_size: 1024 * 1024 * 64,
},
remote_timeout: '1s',
},
storage_config: {
index_queries_cache_config: {
memcached: {

Loading…
Cancel
Save