receive

package
v0.42.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 16, 2026 License: Apache-2.0 Imports: 91 Imported by: 3

Documentation

Index

Constants

View Source
const (
	RouterOnly     ReceiverMode = "RouterOnly"
	IngestorOnly   ReceiverMode = "IngestorOnly"
	RouterIngestor ReceiverMode = "RouterIngestor"

	DefaultCapNProtoPort string = "19391"
)
View Source
const (
	// TenantMatcherTypeExact matches tenants exactly. This is also the default one.
	TenantMatcherTypeExact tenantMatcher = "exact"
	// TenantMatcherGlob matches tenants using glob patterns.
	TenantMatcherGlob tenantMatcher = "glob"
)
View Source
const (
	// DefaultStatsLimit is the default value used for limiting tenant stats.
	DefaultStatsLimit = 10
	// DefaultReplicaHeader is the default header used to designate the replica count of a write request.
	DefaultReplicaHeader = "THANOS-REPLICA"
	// AllTenantsQueryParam is the query parameter for getting TSDB stats for all tenants.
	AllTenantsQueryParam = "all_tenants"
	// LimitStatsQueryParam is the query parameter for limiting the amount of returned TSDB stats.
	LimitStatsQueryParam = "limit"
)
View Source
const DELETE_DATA closeDelete = 0
View Source
const KEEP_DATA closeDelete = 1

Variables

View Source
var ErrNotReady = errors.New("TSDB not ready")

ErrNotReady is returned if the underlying storage is not ready yet.

Functions

func ConfigFromWatcher added in v0.32.0

func ConfigFromWatcher(ctx context.Context, updates chan<- []HashringConfig, cw *ConfigWatcher) error

func NewEmptyRequestLimitsConfig added in v0.29.0

func NewEmptyRequestLimitsConfig() *requestLimitsConfig

func NewHeadSeriesLimit added in v0.29.0

func NewHeadSeriesLimit(w WriteLimitsConfig, registerer prometheus.Registerer, logger log.Logger) *headSeriesLimit

func NewNopSeriesLimit added in v0.28.0

func NewNopSeriesLimit() *nopSeriesLimit

func ShuffleShardExpectedInstancesPerZone added in v0.39.0

func ShuffleShardExpectedInstancesPerZone(shardSize, numZones int) int

ShuffleShardExpectedInstancesPerZone returns the expected number of instances per zone for a given shard size and number of zones. Copied from Cortex. Copyright Cortex Authors.

func ShuffleShardSeed added in v0.39.0

func ShuffleShardSeed(identifier, zone string) int64

ShuffleShardSeed returns seed for random number generator, computed from provided identifier. Copied from Cortex. Copyright Cortex Authors.

Types

type Appendable

type Appendable interface {
	Appender(ctx context.Context) (storage.Appender, error)
}

Appendable returns an Appender.

type CapNProtoHandler added in v0.37.0

type CapNProtoHandler struct {
	// contains filtered or unexported fields
}

func NewCapNProtoHandler added in v0.37.0

func NewCapNProtoHandler(logger log.Logger, writer *CapNProtoWriter) *CapNProtoHandler

func (CapNProtoHandler) Write added in v0.37.0

type CapNProtoServer added in v0.37.0

type CapNProtoServer struct {
	// contains filtered or unexported fields
}

func NewCapNProtoServer added in v0.37.0

func NewCapNProtoServer(listener net.Listener, handler *CapNProtoHandler, logger log.Logger) *CapNProtoServer

func (*CapNProtoServer) ListenAndServe added in v0.37.0

func (c *CapNProtoServer) ListenAndServe() error

func (*CapNProtoServer) Shutdown added in v0.37.0

func (c *CapNProtoServer) Shutdown()

type CapNProtoWriter added in v0.37.0

type CapNProtoWriter struct {
	// contains filtered or unexported fields
}

func NewCapNProtoWriter added in v0.37.0

func NewCapNProtoWriter(logger log.Logger, multiTSDB TenantStorage, opts *CapNProtoWriterOptions) *CapNProtoWriter

func (*CapNProtoWriter) Write added in v0.37.0

func (r *CapNProtoWriter) Write(ctx context.Context, tenantID string, wreq *writecapnp.Request) error

type CapNProtoWriterOptions added in v0.37.0

type CapNProtoWriterOptions struct {
	TooFarInFutureTimeWindow int64 // Unit: nanoseconds
}

type ConfigWatcher

type ConfigWatcher struct {
	// contains filtered or unexported fields
}

ConfigWatcher is able to watch a file containing a hashring configuration for updates.

func NewConfigWatcher

func NewConfigWatcher(logger log.Logger, reg prometheus.Registerer, path string, interval model.Duration) (*ConfigWatcher, error)

NewConfigWatcher creates a new ConfigWatcher.

func (*ConfigWatcher) C

func (cw *ConfigWatcher) C() <-chan []HashringConfig

C returns a chan that gets hashring configuration updates.

func (*ConfigWatcher) Run

func (cw *ConfigWatcher) Run(ctx context.Context)

Run starts the ConfigWatcher until the given context is canceled.

func (*ConfigWatcher) Stop added in v0.15.0

func (cw *ConfigWatcher) Stop()

Stop shuts down the config watcher.

func (*ConfigWatcher) ValidateConfig added in v0.12.0

func (cw *ConfigWatcher) ValidateConfig() error

ValidateConfig returns an error if the configuration that's being watched is not valid.

type DefaultLimitsConfig added in v0.29.0

type DefaultLimitsConfig struct {
	// RequestLimits holds the difficult per-request limits.
	RequestLimits requestLimitsConfig `yaml:"request"`
	// HeadSeriesLimit specifies the maximum number of head series allowed for any tenant.
	HeadSeriesLimit uint64 `yaml:"head_series_limit"`
}

type Endpoint added in v0.32.0

type Endpoint struct {
	Address          string `json:"address"`
	CapNProtoAddress string `json:"capnproto_address"`
	AZ               string `json:"az"`
}

func (*Endpoint) HasAddress added in v0.37.0

func (e *Endpoint) HasAddress(addr string) bool

func (Endpoint) String added in v0.37.0

func (e Endpoint) String() string

func (*Endpoint) UnmarshalJSON added in v0.32.0

func (e *Endpoint) UnmarshalJSON(data []byte) error

type GlobalLimitsConfig added in v0.29.0

type GlobalLimitsConfig struct {
	// MaxConcurrency represents the maximum concurrency during write operations.
	MaxConcurrency int64 `yaml:"max_concurrency"`
	// MetaMonitoring options specify the query, url and client for Query API address used in head series limiting.
	MetaMonitoringURL        string                         `yaml:"meta_monitoring_url"`
	MetaMonitoringHTTPClient *clientconfig.HTTPClientConfig `yaml:"meta_monitoring_http_client"`
	MetaMonitoringLimitQuery string                         `yaml:"meta_monitoring_limit_query"`
	// contains filtered or unexported fields
}

type Handler

type Handler struct {
	Limiter *Limiter
	// contains filtered or unexported fields
}

Handler serves a Prometheus remote write receiving HTTP endpoint.

func NewHandler

func NewHandler(logger log.Logger, o *Options) *Handler

func (*Handler) Close

func (h *Handler) Close()

Close stops the Handler.

func (*Handler) Hashring

func (h *Handler) Hashring(hashring Hashring)

Hashring sets the hashring for the handler and marks the hashring as ready. The hashring must be set to a non-nil value in order for the handler to be ready and usable. If the hashring is nil, then the handler is marked as not ready.

func (*Handler) RemoteWrite added in v0.11.0

func (h *Handler) RemoteWrite(ctx context.Context, r *storepb.WriteRequest) (*storepb.WriteResponse, error)

RemoteWrite implements the gRPC remote write handler for storepb.WriteableStore.

func (*Handler) Run

func (h *Handler) Run() error

Run serves the HTTP endpoints.

type Hashring

type Hashring interface {
	// GetN returns the nth node that should handle the given tenant and time series.
	GetN(tenant string, timeSeries *prompb.TimeSeries, n uint64) (Endpoint, error)
	// Nodes returns a sorted slice of nodes that are in this hashring. Addresses could be duplicated
	// if, for example, the same address is used for multiple tenants in the multi-hashring.
	Nodes() []Endpoint

	Close()
}

Hashring finds the correct node to handle a given time series for a specified tenant. It returns the node and any error encountered.

func NewMultiHashring added in v0.32.0

func NewMultiHashring(algorithm HashringAlgorithm, replicationFactor uint64, cfg []HashringConfig, reg prometheus.Registerer) (Hashring, error)

newMultiHashring creates a multi-tenant hashring for a given slice of groups. Which hashring to use for a tenant is determined by the tenants field of the hashring configuration.

type HashringAlgorithm added in v0.27.0

type HashringAlgorithm string

HashringAlgorithm is the algorithm used to distribute series in the ring.

const (
	AlgorithmHashmod HashringAlgorithm = "hashmod"
	AlgorithmKetama  HashringAlgorithm = "ketama"

	// SectionsPerNode is the number of sections in the ring assigned to each node
	// in the ketama hashring. A higher number yields a better series distribution,
	// but also comes with a higher memory cost.
	SectionsPerNode = 1000
)

type HashringConfig

type HashringConfig struct {
	Hashring          string            `json:"hashring,omitempty"`
	Tenants           []string          `json:"tenants,omitempty"`
	TenantMatcherType tenantMatcher     `json:"tenant_matcher_type,omitempty"`
	Endpoints         []Endpoint        `json:"endpoints"`
	Algorithm         HashringAlgorithm `json:"algorithm,omitempty"`
	ExternalLabels    labels.Labels     `json:"external_labels,omitempty"`
	// If non-zero then enable shuffle sharding.
	ShuffleShardingConfig ShuffleShardingConfig `json:"shuffle_sharding_config,omitempty"`
}

HashringConfig represents the configuration for a hashring a receive node knows about.

func ParseConfig added in v0.32.0

func ParseConfig(content []byte) ([]HashringConfig, error)

ParseConfig parses the raw configuration content and returns a HashringConfig.

type Limiter added in v0.29.0

type Limiter struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

Limiter is responsible for managing the configuration and initialization of different types that apply limits to the Receive instance.

func NewLimiter added in v0.29.0

func NewLimiter(configFile fileContent, reg prometheus.Registerer, r ReceiverMode, logger log.Logger, configReloadTimer time.Duration) (*Limiter, error)

NewLimiter creates a new *Limiter given a configuration and prometheus registerer.

func (*Limiter) CanReload added in v0.29.0

func (l *Limiter) CanReload() bool

func (*Limiter) HeadSeriesLimiter added in v0.29.0

func (l *Limiter) HeadSeriesLimiter() headSeriesLimiter

func (*Limiter) RequestLimiter added in v0.29.0

func (l *Limiter) RequestLimiter() requestLimiter

RequestLimiter is a safe getter for the request limiter.

func (*Limiter) StartConfigReloader added in v0.29.0

func (l *Limiter) StartConfigReloader(ctx context.Context) error

StartConfigReloader starts the automatic configuration reloader based off of the file indicated by pathOrContent. It starts a Go routine in the given *run.Group.

func (*Limiter) WriteGate added in v0.29.0

func (l *Limiter) WriteGate() gate.Gate

WriteGate is a safe getter for the write gate.

type MultiTSDB added in v0.13.0

type MultiTSDB struct {
	// contains filtered or unexported fields
}

func NewMultiTSDB added in v0.13.0

func NewMultiTSDB(
	dataDir *os.Root,
	l log.Logger,
	reg prometheus.Registerer,
	tsdbOpts *tsdb.Options,
	labels labels.Labels,
	tenantLabelName string,
	bucket objstore.Bucket,
	allowOutOfOrderUpload bool,
	skipCorruptedBlocks bool,
	hashFunc metadata.HashFunc,
	options ...MultiTSDBOption,
) *MultiTSDB

NewMultiTSDB creates a new MultiTSDB instance.

State machine for tenants: - Modifying the state of MultiTSDB so we need to protect this with a lock.

  • First request comes in for tenant T. It is created automatically.
  • The TSDB of T is synchronously initialized if not already initialized.
  • The MultiTSDB clients list is updated.

Tenant T can be: active, GC ready / read-only, deleted.

Periodically, in a randomized manner compaction happens. This needs to be a tenant level operation so no need to lock MultiTSDB. If the tenant is a read-only mode then we need to skip it.

Periodically, check if compaction needs to happen for each tenant. This is a tenant-level operation. Upload data if needed.

Periodically, prune tenants that have not received data for longer than retention period. First, mark that tenant as GC ready / read-only. Only do this for tenants that have all blocks uploaded.

If a write comes in for a tenant that is GC ready / read-only, we need to switch it back to active mode.

After a tenant is marked as GC ready / read-only, check after 1 minute if no writes have happened. If no writes happened, take a MultiTSDB lock and remove the tenant from the list. Update clients.

Invariants: - Any object storage operations must not block reading or writing new samples.

func (*MultiTSDB) Close added in v0.14.0

func (t *MultiTSDB) Close()

func (*MultiTSDB) Flush added in v0.13.0

func (t *MultiTSDB) Flush() error

func (*MultiTSDB) Open added in v0.13.0

func (t *MultiTSDB) Open() error

func (*MultiTSDB) Prune added in v0.28.0

func (t *MultiTSDB) Prune(ctx context.Context) error

Prune flushes and closes the TSDB for tenants that haven't received any new samples for longer than the TSDB retention period.

func (*MultiTSDB) RemoveLockFilesIfAny added in v0.15.0

func (t *MultiTSDB) RemoveLockFilesIfAny() error

func (*MultiTSDB) SetHashringConfig added in v0.32.0

func (t *MultiTSDB) SetHashringConfig(cfg []HashringConfig) error

func (*MultiTSDB) SyncAllTenants added in v0.42.0

func (t *MultiTSDB) SyncAllTenants(ctx context.Context) (int, error)

func (*MultiTSDB) TSDBExemplars added in v0.22.0

func (t *MultiTSDB) TSDBExemplars() map[string]*exemplars.TSDB

TSDBExemplars should be used as read-only.

func (*MultiTSDB) TSDBLocalClients added in v0.29.0

func (t *MultiTSDB) TSDBLocalClients() []store.Client

TSDBLocalClients should be used as read-only.

func (*MultiTSDB) TenantAppendable added in v0.13.0

func (t *MultiTSDB) TenantAppendable(tenantID string) (Appendable, error)

func (*MultiTSDB) TenantStats added in v0.28.0

func (t *MultiTSDB) TenantStats(limit int, statsByLabelName string, tenantIDs ...string) []api.TenantStats

type MultiTSDBOption added in v0.37.0

type MultiTSDBOption func(mt *MultiTSDB)

MultiTSDBOption is a functional option for MultiTSDB.

func WithBlockExpandedPostingsCacheSize added in v0.38.0

func WithBlockExpandedPostingsCacheSize(size uint64) MultiTSDBOption

func WithGCImmediately added in v0.42.0

func WithGCImmediately() MultiTSDBOption

func WithHeadExpandedPostingsCacheSize added in v0.38.0

func WithHeadExpandedPostingsCacheSize(size uint64) MultiTSDBOption

func WithMatchersCache added in v0.38.0

func WithMatchersCache(cache storecache.MatchersCache) MultiTSDBOption

func WithMetricNameFilterEnabled added in v0.37.0

func WithMetricNameFilterEnabled() MultiTSDBOption

WithMetricNameFilterEnabled enables metric name filtering on TSDB clients.

func WithUploadConcurrency added in v0.41.0

func WithUploadConcurrency(concurrency int) MultiTSDBOption

type Options

type Options struct {
	Writer                  *Writer
	ListenAddress           string
	Registry                *prometheus.Registry
	TenantHeader            string
	TenantField             string
	DefaultTenantID         string
	ReplicaHeader           string
	Endpoint                string
	ReplicationFactor       uint64
	SplitTenantLabelName    string
	ReceiverMode            ReceiverMode
	Tracer                  opentracing.Tracer
	TLSConfig               *tls.Config
	DialOpts                []grpc.DialOption
	ForwardTimeout          time.Duration
	MaxBackoff              time.Duration
	MaxArtificialDelay      time.Duration
	RelabelConfigs          []*relabel.Config
	TSDBStats               TSDBStats
	Limiter                 *Limiter
	AsyncForwardWorkerCount uint
	ReplicationProtocol     ReplicationProtocol
	OtlpEnableTargetInfo    bool
	OtlpResourceAttributes  []string
}

Options for the web Handler.

type ReadyStorage added in v0.13.0

type ReadyStorage struct {
	// contains filtered or unexported fields
}

ReadyStorage implements the Storage interface while allowing to set the actual storage at a later point in time. TODO: Replace this with upstream Prometheus implementation when it is exposed.

func (*ReadyStorage) Appender added in v0.13.0

func (s *ReadyStorage) Appender(ctx context.Context) (storage.Appender, error)

Appender implements the Storage interface.

func (*ReadyStorage) Close added in v0.13.0

func (s *ReadyStorage) Close() error

Close implements the Storage interface.

func (*ReadyStorage) ExemplarQuerier added in v0.22.0

func (s *ReadyStorage) ExemplarQuerier(ctx context.Context) (storage.ExemplarQuerier, error)

ExemplarQuerier implements the Storage interface.

func (*ReadyStorage) Get added in v0.13.0

func (s *ReadyStorage) Get() *tsdb.DB

Get the storage.

func (*ReadyStorage) Querier added in v0.13.0

func (s *ReadyStorage) Querier(mint, maxt int64) (storage.Querier, error)

Querier implements the Storage interface.

func (*ReadyStorage) Set added in v0.13.0

func (s *ReadyStorage) Set(db *tsdb.DB)

Set the storage.

func (*ReadyStorage) StartTime added in v0.13.0

func (s *ReadyStorage) StartTime() (int64, error)

StartTime implements the Storage interface.

type ReceiveAppender added in v0.32.0

type ReceiveAppender struct {
	storage.Appender
	// contains filtered or unexported fields
}

Wraps storage.Appender to add validation and logging.

func (*ReceiveAppender) Append added in v0.32.0

type ReceiverMode added in v0.22.0

type ReceiverMode string

type ReplicationProtocol added in v0.37.0

type ReplicationProtocol string
const (
	ProtobufReplication  ReplicationProtocol = "protobuf"
	CapNProtoReplication ReplicationProtocol = "capnproto"
)

type RootLimitsConfig added in v0.29.0

type RootLimitsConfig struct {
	// WriteLimits hold the limits for writing data.
	WriteLimits WriteLimitsConfig `yaml:"write"`
}

RootLimitsConfig is the root configuration for limits.

func ParseLimitConfigContent added in v0.29.0

func ParseLimitConfigContent(limitsConfig fileContent) (*RootLimitsConfig, error)

ParseLimitConfigContent parses the limit configuration from the path or content.

func ParseRootLimitConfig added in v0.29.0

func ParseRootLimitConfig(content []byte) (*RootLimitsConfig, error)

ParseRootLimitConfig parses the root limit configuration. Even though the result is a pointer, it will only be nil if an error is returned.

func (RootLimitsConfig) AreHeadSeriesLimitsConfigured added in v0.29.0

func (r RootLimitsConfig) AreHeadSeriesLimitsConfigured() bool

type ShuffleShardingConfig added in v0.39.0

type ShuffleShardingConfig struct {
	ShardSize int `json:"shard_size"`
	CacheSize int `json:"cache_size"`
	// ZoneAwarenessDisabled disables zone awareness. We still try to spread the load
	// across the available zones, but we don't try to balance the shards across zones.
	ZoneAwarenessDisabled bool                            `json:"zone_awareness_disabled"`
	Overrides             []ShuffleShardingOverrideConfig `json:"overrides,omitempty"`
}

type ShuffleShardingOverrideConfig added in v0.39.0

type ShuffleShardingOverrideConfig struct {
	ShardSize         int           `json:"shard_size"`
	Tenants           []string      `json:"tenants,omitempty"`
	TenantMatcherType tenantMatcher `json:"tenant_matcher_type,omitempty"`
}

type SingleNodeHashring

type SingleNodeHashring string

SingleNodeHashring always returns the same node.

func (SingleNodeHashring) Close added in v0.39.0

func (s SingleNodeHashring) Close()

func (SingleNodeHashring) GetN

GetN implements the Hashring interface.

func (SingleNodeHashring) Nodes added in v0.34.0

func (s SingleNodeHashring) Nodes() []Endpoint

type TSDBStats added in v0.28.0

type TSDBStats interface {
	// TenantStats returns TSDB head stats for the given tenants.
	// If no tenantIDs are provided, stats for all tenants are returned.
	TenantStats(limit int, statsByLabelName string, tenantIDs ...string) []api.TenantStats
}

type TenantStorage added in v0.13.0

type TenantStorage interface {
	TenantAppendable(string) (Appendable, error)
}

type TenantsWriteLimitsConfig added in v0.29.0

type TenantsWriteLimitsConfig map[string]*WriteLimitConfig

TenantsWriteLimitsConfig is a map of tenant IDs to their *WriteLimitConfig.

type UnRegisterer added in v0.8.0

type UnRegisterer struct {
	// contains filtered or unexported fields
}

UnRegisterer is a Prometheus registerer that ensures that collectors can be registered by unregistering already-registered collectors. FlushableStorage uses this registerer in order to not lose metric values between DB flushes.

This type cannot embed the inner registerer, because Prometheus since v2.39.0 is wrapping the Registry with prometheus.WrapRegistererWithPrefix. This wrapper will call the Register function of the wrapped registerer. If UnRegisterer is the wrapped registerer, this would end up calling the inner registerer's Register, which doesn't implement the "unregister" logic that this type intends to use.

func NewUnRegisterer added in v0.29.0

func NewUnRegisterer(inner prometheus.Registerer) *UnRegisterer

func (*UnRegisterer) MustRegister added in v0.8.0

func (u *UnRegisterer) MustRegister(cs ...prometheus.Collector)

MustRegister registers the given collectors. It panics if an error happens. Note that if a collector is already registered it will be re-registered without panicking.

func (*UnRegisterer) Register added in v0.29.0

func (u *UnRegisterer) Register(c prometheus.Collector) error

Register registers the given collector. If it's already registered, it will be unregistered and registered.

func (*UnRegisterer) Unregister added in v0.29.0

func (u *UnRegisterer) Unregister(c prometheus.Collector) bool

Unregister unregisters the given collector.

func (*UnRegisterer) UnregisterAll added in v0.41.0

func (u *UnRegisterer) UnregisterAll()

UnregisterAll unregisters all collectors in a best-effort manner.

type WriteLimitConfig added in v0.29.0

type WriteLimitConfig struct {
	// RequestLimits holds the difficult per-request limits.
	RequestLimits *requestLimitsConfig `yaml:"request"`
	// HeadSeriesLimit specifies the maximum number of head series allowed for a tenant.
	HeadSeriesLimit *uint64 `yaml:"head_series_limit"`
}

A tenant might not always have limits configured, so things here must use pointers.

func NewEmptyWriteLimitConfig added in v0.29.0

func NewEmptyWriteLimitConfig() *WriteLimitConfig

Utils for initializing.

func (*WriteLimitConfig) SetHeadSeriesLimit added in v0.29.0

func (w *WriteLimitConfig) SetHeadSeriesLimit(val uint64) *WriteLimitConfig

func (*WriteLimitConfig) SetRequestLimits added in v0.29.0

func (w *WriteLimitConfig) SetRequestLimits(rl *requestLimitsConfig) *WriteLimitConfig

type WriteLimitsConfig added in v0.29.0

type WriteLimitsConfig struct {
	// GlobalLimits are limits that are shared across all tenants.
	GlobalLimits GlobalLimitsConfig `yaml:"global"`
	// DefaultLimits are the default limits for tenants without specified limits.
	DefaultLimits DefaultLimitsConfig `yaml:"default"`
	// TenantsLimits are the limits per tenant.
	TenantsLimits TenantsWriteLimitsConfig `yaml:"tenants"`
}

type WriteableStoreAsyncClient added in v0.35.0

type WriteableStoreAsyncClient interface {
	storepb.WriteableStoreClient
	RemoteWriteAsync(context.Context, *storepb.WriteRequest, endpointReplica, []int, chan writeResponse, func(error))
	// TryRemoteWriteAsync submits the request without blocking. Returns false if the peer's
	// worker pool is at capacity; the caller should fall back to RemoteWriteAsync.
	TryRemoteWriteAsync(context.Context, *storepb.WriteRequest, endpointReplica, []int, chan writeResponse, func(error)) bool
}

type Writer

type Writer struct {
	// contains filtered or unexported fields
}

func NewWriter

func NewWriter(logger log.Logger, multiTSDB TenantStorage, opts *WriterOptions) *Writer

func (*Writer) Write added in v0.8.0

func (r *Writer) Write(ctx context.Context, tenantID string, wreq []prompb.TimeSeries) error

type WriterOptions added in v0.32.0

type WriterOptions struct {
	Intern                   bool
	TooFarInFutureTimeWindow int64 // Unit: nanoseconds
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL