Documentation
¶
Overview ¶
Package frontend contains provides a frontend service for ingest limits. It is responsible for receiving and answering gRPC requests from distributors, such as exceeds limits requests, forwarding them to individual limits backends, gathering and aggregating their responses (where required), and returning the final result.
Index ¶
- Constants
- Variables
- type Config
- type Frontend
- func (f *Frontend) CheckReady(ctx context.Context) error
- func (f *Frontend) ExceedsLimits(ctx context.Context, req *logproto.ExceedsLimitsRequest) (*logproto.ExceedsLimitsResponse, error)
- func (f *Frontend) Flush()
- func (f *Frontend) ServeHTTP(w http.ResponseWriter, r *http.Request)
- func (f *Frontend) TransferOut(_ context.Context) error
- type GetStreamUsageRequest
- type GetStreamUsageResponse
- type Limits
- type RingStreamUsageGatherer
- type StreamUsageGatherer
Constants ¶
const ( // ReasonExceedsMaxStreams is returned when a tenant exceeds the maximum // number of active streams as per their per-tenant limit. ReasonExceedsMaxStreams = "exceeds_max_streams" // ReasonExceedsRateLimit is returned when a tenant exceeds their maximum // rate limit as per their per-tenant limit. ReasonExceedsRateLimit = "exceeds_rate_limit" )
const ( RingKey = "ingest-limits-frontend" RingName = "ingest-limits-frontend" )
Variables ¶
var (
LimitsRead = ring.NewOp([]ring.InstanceState{ring.ACTIVE}, nil)
)
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct { ClientConfig limits_client.Config `yaml:"client_config"` LifecyclerConfig ring.LifecyclerConfig `yaml:"lifecycler,omitempty"` RecheckPeriod time.Duration `yaml:"recheck_period"` }
Config contains the config for an ingest-limits-frontend.
func (*Config) RegisterFlags ¶
type Frontend ¶
Frontend is the limits-frontend service, and acts a service wrapper for all components needed to run the limits-frontend.
func New ¶
func New(cfg Config, ringName string, limitsRing ring.ReadRing, limits Limits, logger log.Logger, reg prometheus.Registerer) (*Frontend, error)
New returns a new Frontend.
func (*Frontend) ExceedsLimits ¶
func (f *Frontend) ExceedsLimits(ctx context.Context, req *logproto.ExceedsLimitsRequest) (*logproto.ExceedsLimitsResponse, error)
ExceedsLimits implements logproto.IngestLimitsFrontendClient.
func (*Frontend) Flush ¶
func (f *Frontend) Flush()
Flush implements ring.FlushTransferer. It transfers state to another ingest limits frontend instance.
type GetStreamUsageRequest ¶
type GetStreamUsageResponse ¶
type GetStreamUsageResponse struct { Addr string Response *logproto.GetStreamUsageResponse }
type Limits ¶
type Limits interface { IngestionRateBytes(userID string) float64 IngestionBurstSizeBytes(userID string) int MaxGlobalStreamsPerUser(userID string) int }
Limits contains all limits enforced by the limits frontend.
type RingStreamUsageGatherer ¶
type RingStreamUsageGatherer struct {
// contains filtered or unexported fields
}
RingStreamUsageGatherer implements StreamUsageGatherer. It uses a ring to find limits instances.
func NewRingStreamUsageGatherer ¶
func NewRingStreamUsageGatherer(ring ring.ReadRing, pool *ring_client.Pool, logger log.Logger) *RingStreamUsageGatherer
NewRingStreamUsageGatherer returns a new RingStreamUsageGatherer.
func (*RingStreamUsageGatherer) GetStreamUsage ¶
func (g *RingStreamUsageGatherer) GetStreamUsage(ctx context.Context, r GetStreamUsageRequest) ([]GetStreamUsageResponse, error)
GetStreamUsage implements StreamUsageGatherer.
type StreamUsageGatherer ¶
type StreamUsageGatherer interface { // GetStreamUsage returns the current usage data for the stream hashes // in the request. It returns multiple responses if the usage data for // the requested stream hashes is partitioned over a number of limits // instances. GetStreamUsage(context.Context, GetStreamUsageRequest) ([]GetStreamUsageResponse, error) }