Files
Raj Kamal SinghandGitHub 5e4c9d8380 Feat: clickhouse query logs receiver (#316)
* feat: get signozclickhousesystemlogsreceiver started

* chore: put together receiver scaffolding for clickhousesystemtablesreceiver

* chore: add clickhousesystemstablereceiver to list of available otel collector receivers

* feat: add impl for unixTsNowAtClickhouse

* feat: get query_log querying logic started

* feat: flesh out query_log scraping loop

* feat: finish up with e2e tracer for query log receiver

* chore: add example config for clickhousesystemtablesreceiver

* chore: get receiver_test started

* chore: refactor clickhouse calls behind an interface for easier mocking in tests

* chore: flesh out receiver happy path test

* chore: wrap up receiver lifecycle test

* chore: add test for receiver start and shutdown

* chore: add config validation tests

* chore: some cleanup

* chore: hook log emitted telemetry on receiver

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: some more cleanup

* chore: address some review feedback

* chore: address some more review feedback

* feat: add support for specifying a cluster name when scraping clustered deployments

* chore: some more cleanup
2024-04-25 09:55:36 +05:30

38 lines
1.2 KiB
Go

package clickhousesystemtablesreceiver
import (
"errors"
"go.uber.org/multierr"
)
type QueryLogScrapeConfig struct {
ScrapeIntervalSeconds uint32 `mapstructure:"scrape_interval_seconds"`
// Must be configured to a value greater than flush_interval_milliseconds setting for query_log
// For details see https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings#query-log
MinScrapeDelaySeconds uint32 `mapstructure:"min_scrape_delay_seconds"`
}
type Config struct {
DSN string `mapstructure:"dsn"`
// Cluster name to use for scraping query log from clustered deployments.
// If ClusterName is specified, the scrape will target `clusterAllReplicas(cluster_name, system.query_log)`
ClusterName string `mapstructure:"cluster_name"`
QueryLogScrapeConfig QueryLogScrapeConfig `mapstructure:"query_log_scrape_config"`
}
func (cfg *Config) Validate() (err error) {
if cfg.DSN == "" {
err = multierr.Append(err, errors.New("dsn must be specified"))
}
if cfg.QueryLogScrapeConfig.MinScrapeDelaySeconds == 0 {
err = multierr.Append(err, errors.New("query_log_scrape_config.scrape_delay_seconds must be set to a value greater than flush_interval_milliseconds setting for clickhouse query_log table"))
}
return err
}