diff --git a/pkg/query-service/app/clickhouseReader/options.go b/pkg/query-service/app/clickhouseReader/options.go index f03da2505a..0defced7ed 100644 --- a/pkg/query-service/app/clickhouseReader/options.go +++ b/pkg/query-service/app/clickhouseReader/options.go @@ -2,7 +2,6 @@ package clickhouseReader import ( "context" - "net/url" "time" "github.com/ClickHouse/clickhouse-go/v2" @@ -91,24 +90,23 @@ type Connector func(cfg *namespaceConfig) (clickhouse.Conn, error) func defaultConnector(cfg *namespaceConfig) (clickhouse.Conn, error) { ctx := context.Background() - dsnURL, err := url.Parse(cfg.Datasource) + options, err := clickhouse.ParseDSN(cfg.Datasource) if err != nil { return nil, err } - options := &clickhouse.Options{ - Addr: []string{dsnURL.Host}, - MaxOpenConns: cfg.MaxOpenConns, - MaxIdleConns: cfg.MaxIdleConns, - DialTimeout: cfg.DialTimeout, + + // Check if the DSN contained any of the following options, if not set from configuration + if options.MaxIdleConns == 0 { + options.MaxIdleConns = cfg.MaxIdleConns } - if dsnURL.Query().Get("username") != "" { - auth := clickhouse.Auth{ - Username: dsnURL.Query().Get("username"), - Password: dsnURL.Query().Get("password"), - } - options.Auth = auth + if options.MaxOpenConns == 0 { + options.MaxOpenConns = cfg.MaxOpenConns } - zap.S().Infof("Connecting to Clickhouse at %s, MaxIdleConns: %d, MaxOpenConns: %d, DialTimeout: %s", dsnURL.Host, options.MaxIdleConns, options.MaxOpenConns, options.DialTimeout) + if options.DialTimeout == 0 { + options.DialTimeout = cfg.DialTimeout + } + + zap.S().Infof("Connecting to Clickhouse at %s, Secure: %t, MaxIdleConns: %d, MaxOpenConns: %d, DialTimeout: %s", options.Addr, options.TLS != nil, options.MaxIdleConns, options.MaxOpenConns, options.DialTimeout) db, err := clickhouse.Open(options) if err != nil { return nil, err diff --git a/pkg/query-service/main.go b/pkg/query-service/main.go index bb0f9e1aca..f0602c4dcd 100644 --- a/pkg/query-service/main.go +++ b/pkg/query-service/main.go @@ -48,13 +48,13 @@ func main() { flag.BoolVar(&disableRules, "rules.disable", false, "(disable rule evaluation)") flag.BoolVar(&preferDelta, "prefer-delta", false, "(prefer delta over cumulative metrics)") flag.BoolVar(&preferSpanMetrics, "prefer-span-metrics", false, "(prefer span metrics for service level metrics)") - flag.IntVar(&maxIdleConns, "max-idle-conns", 50, "(number of connections to maintain in the pool.)") - flag.IntVar(&maxOpenConns, "max-open-conns", 100, "(max connections for use at any time.)") - flag.DurationVar(&dialTimeout, "dial-timeout", 5*time.Second, "(the maximum time to establish a connection.)") flag.StringVar(&ruleRepoURL, "rules.repo-url", constants.AlertHelpPage, "(host address used to build rule link in alert messages)") flag.StringVar(&cacheConfigPath, "experimental.cache-config", "", "(cache config to use)") flag.StringVar(&fluxInterval, "flux-interval", "5m", "(cache config to use)") flag.StringVar(&cluster, "cluster", "cluster", "(cluster name - defaults to 'cluster')") + flag.IntVar(&maxIdleConns, "max-idle-conns", 50, "(number of connections to maintain in the pool, only used with clickhouse if not set in ClickHouseUrl env var DSN.)") + flag.IntVar(&maxOpenConns, "max-open-conns", 100, "(max connections for use at any time, only used with clickhouse if not set in ClickHouseUrl env var DSN.)") + flag.DurationVar(&dialTimeout, "dial-timeout", 5*time.Second, "(the maximum time to establish a connection, only used with clickhouse if not set in ClickHouseUrl env var DSN.)") flag.Parse() loggerMgr := initZapLog()