monitoring

package
v0.0.0-...-5637490 Latest Latest
Warning

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

Go to latest
Published: Dec 22, 2024 License: BSD-3-Clause Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultMetricsNamespace is used to group the weaviate metrics with common prefix.
	DefaultMetricsNamespace = "weaviate"
)

Variables

View Source
var (

	// LatencyBuckets is default histogram bucket for response time (in seconds).
	// It also includes request that served *very* fast and *very* slow
	LatencyBuckets = []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10, 25, 50, 100}
)

Functions

func CountingListener

func CountingListener(l net.Listener, g prometheus.Gauge) net.Listener

func InitConfig

func InitConfig(cfg Config)

func InstrumentGrpc

func InstrumentGrpc(svrMetrics ServerMetrics) []grpc.ServerOption

InstrumentGrpc accepts server metrics and returns the few `[]grpc.ServerOption` which you can then wrap it with any `grpc.Server` to get these metrics instrumented automatically.

```

svrMetrics := monitoring.NewServerMetrics(metrics, prometheus.DefaultRegisterer)
grpcServer := grpc.NewServer(monitoring.InstrumentGrpc(*svrMetrics)...)

grpcServer.Serve(listener)

```

Types

type Config

type Config struct {
	Enabled                    bool   `json:"enabled" yaml:"enabled" long:"enabled"`
	Tool                       string `json:"tool" yaml:"tool"`
	Port                       int    `json:"port" yaml:"port" long:"port" default:"8081"`
	Group                      bool   `json:"group_classes" yaml:"group_classes"`
	MonitorCriticalBucketsOnly bool   `json:"monitor_critical_buckets_only" yaml:"monitor_critical_buckets_only"`

	// Metrics namespace group the metrics with common prefix.
	// currently used only on ServerMetrics.
	MetricsNamespace string `json:"metrics_namespace" yaml:"metrics_namespace" long:"metrics_namespace" default:""`
}

type GrpcStatsHandler

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

func NewGrpcStatsHandler

func NewGrpcStatsHandler(inflight *prometheus.GaugeVec, requestSize *prometheus.HistogramVec, responseSize *prometheus.HistogramVec) *GrpcStatsHandler

func (*GrpcStatsHandler) HandleConn

func (g *GrpcStatsHandler) HandleConn(_ context.Context, _ stats.ConnStats)

func (*GrpcStatsHandler) HandleRPC

func (g *GrpcStatsHandler) HandleRPC(ctx context.Context, rpcStats stats.RPCStats)

func (*GrpcStatsHandler) TagConn

func (*GrpcStatsHandler) TagRPC

type InstrumentHandler

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

func InstrumentHTTP

func InstrumentHTTP(
	next http.Handler,
	context *middleware.Context,
	inflight *prometheus.GaugeVec,
	duration *prometheus.HistogramVec,
	requestSize *prometheus.HistogramVec,
	responseSize *prometheus.HistogramVec,
) *InstrumentHandler

func (*InstrumentHandler) ServeHTTP

func (i *InstrumentHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)

type OnceUponATimer

type OnceUponATimer struct {
	sync.Once
	Timer *prometheus.Timer
}

func NewOnceTimer

func NewOnceTimer(promTimer *prometheus.Timer) *OnceUponATimer

func (*OnceUponATimer) ObserveDurationOnce

func (o *OnceUponATimer) ObserveDurationOnce()

type PrometheusMetrics

type PrometheusMetrics struct {
	BatchTime                           *prometheus.HistogramVec
	BatchSizeBytes                      *prometheus.SummaryVec
	BatchSizeObjects                    prometheus.Summary
	BatchSizeTenants                    prometheus.Summary
	BatchDeleteTime                     *prometheus.SummaryVec
	BatchCount                          *prometheus.CounterVec
	BatchCountBytes                     *prometheus.CounterVec
	ObjectsTime                         *prometheus.SummaryVec
	LSMBloomFilters                     *prometheus.SummaryVec
	AsyncOperations                     *prometheus.GaugeVec
	LSMSegmentCount                     *prometheus.GaugeVec
	LSMObjectsBucketSegmentCount        *prometheus.GaugeVec
	LSMCompressedVecsBucketSegmentCount *prometheus.GaugeVec
	LSMSegmentCountByLevel              *prometheus.GaugeVec
	LSMSegmentObjects                   *prometheus.GaugeVec
	LSMSegmentSize                      *prometheus.GaugeVec
	LSMMemtableSize                     *prometheus.GaugeVec
	LSMMemtableDurations                *prometheus.SummaryVec
	ObjectCount                         *prometheus.GaugeVec
	QueriesCount                        *prometheus.GaugeVec
	RequestsTotal                       *prometheus.GaugeVec
	QueriesDurations                    *prometheus.HistogramVec
	QueriesFilteredVectorDurations      *prometheus.SummaryVec
	QueryDimensions                     *prometheus.CounterVec
	QueryDimensionsCombined             prometheus.Counter
	GoroutinesCount                     *prometheus.GaugeVec
	BackupRestoreDurations              *prometheus.SummaryVec
	BackupStoreDurations                *prometheus.SummaryVec
	BucketPauseDurations                *prometheus.SummaryVec
	BackupRestoreClassDurations         *prometheus.SummaryVec
	BackupRestoreBackupInitDurations    *prometheus.SummaryVec
	BackupRestoreFromStorageDurations   *prometheus.SummaryVec
	BackupRestoreDataTransferred        *prometheus.CounterVec
	BackupStoreDataTransferred          *prometheus.CounterVec

	// offload metric
	QueueSize                        *prometheus.GaugeVec
	QueueDiskUsage                   *prometheus.GaugeVec
	QueuePaused                      *prometheus.GaugeVec
	QueueCount                       *prometheus.GaugeVec
	QueuePartitionProcessingDuration *prometheus.HistogramVec

	VectorIndexQueueInsertCount *prometheus.CounterVec
	VectorIndexQueueDeleteCount *prometheus.CounterVec

	VectorIndexTombstones              *prometheus.GaugeVec
	VectorIndexTombstoneCleanupThreads *prometheus.GaugeVec
	VectorIndexTombstoneCleanedCount   *prometheus.CounterVec
	VectorIndexTombstoneUnexpected     *prometheus.CounterVec
	VectorIndexTombstoneCycleStart     *prometheus.GaugeVec
	VectorIndexTombstoneCycleEnd       *prometheus.GaugeVec
	VectorIndexTombstoneCycleProgress  *prometheus.GaugeVec
	VectorIndexOperations              *prometheus.GaugeVec
	VectorIndexDurations               *prometheus.SummaryVec
	VectorIndexSize                    *prometheus.GaugeVec
	VectorIndexMaintenanceDurations    *prometheus.SummaryVec
	VectorDimensionsSum                *prometheus.GaugeVec
	VectorSegmentsSum                  *prometheus.GaugeVec
	VectorDimensionsSumByVector        *prometheus.GaugeVec
	VectorSegmentsSumByVector          *prometheus.GaugeVec

	StartupProgress  *prometheus.GaugeVec
	StartupDurations *prometheus.SummaryVec
	StartupDiskIO    *prometheus.SummaryVec

	ShardsLoaded    *prometheus.GaugeVec
	ShardsUnloaded  *prometheus.GaugeVec
	ShardsLoading   *prometheus.GaugeVec
	ShardsUnloading *prometheus.GaugeVec

	// RAFT-based schema metrics
	SchemaWrites         *prometheus.SummaryVec
	SchemaReadsLocal     *prometheus.SummaryVec
	SchemaReadsLeader    *prometheus.SummaryVec
	SchemaWaitForVersion *prometheus.SummaryVec

	TombstoneFindLocalEntrypoint  *prometheus.CounterVec
	TombstoneFindGlobalEntrypoint *prometheus.CounterVec
	TombstoneReassignNeighbors    *prometheus.CounterVec
	TombstoneDeleteListSize       *prometheus.GaugeVec

	Group bool
	// Keeping metering to only the critical buckets (objects, vectors_compressed)
	// helps cut down on noise when monitoring
	LSMCriticalBucketsOnly bool

	// Deprecated metrics, keeping around because the classification features
	// seems to sill use the old logic. However, those metrics are not actually
	// used for the schema anymore, but only for the classification features.
	SchemaTxOpened   *prometheus.CounterVec
	SchemaTxClosed   *prometheus.CounterVec
	SchemaTxDuration *prometheus.SummaryVec

	// Vectorization
	T2VBatches            *prometheus.GaugeVec
	T2VBatchQueueDuration *prometheus.HistogramVec
	T2VRequestDuration    *prometheus.HistogramVec
	T2VTokensInBatch      *prometheus.HistogramVec
	T2VTokensInRequest    *prometheus.HistogramVec
	T2VRateLimitStats     *prometheus.GaugeVec
	T2VRequestsPerBatch   *prometheus.HistogramVec
}

func GetMetrics

func GetMetrics() *PrometheusMetrics

func (*PrometheusMetrics) DeleteClass

func (pm *PrometheusMetrics) DeleteClass(className string) error

DeleteClass deletes all metrics that match the class name, but do not have a shard-specific label. See [DeleteShard] for more information.

func (*PrometheusMetrics) DeleteShard

func (pm *PrometheusMetrics) DeleteShard(className, shardName string) error

Delete Shard deletes existing label combinations that match both the shard and class name. If a metric is not collected at the shard level it is unaffected. This is to make sure that deleting a single shard (e.g. multi-tenancy) does not affect metrics for existing shards.

In addition, there are some metrics that we explicitly keep, such as vector_dimensions_sum as they can be used in billing decisions.

func (*PrometheusMetrics) FinishLoadingShard

func (pm *PrometheusMetrics) FinishLoadingShard(className string) error

Move the shard from in progress to loaded

func (*PrometheusMetrics) FinishUnloadingShard

func (pm *PrometheusMetrics) FinishUnloadingShard(className string) error

Move the shard from in progress to unloaded

func (*PrometheusMetrics) NewUnloadedshard

func (pm *PrometheusMetrics) NewUnloadedshard(className string) error

Register a new, unloaded shard

func (*PrometheusMetrics) StartLoadingShard

func (pm *PrometheusMetrics) StartLoadingShard(className string) error

Move the shard from unloaded to in progress

func (*PrometheusMetrics) StartUnloadingShard

func (pm *PrometheusMetrics) StartUnloadingShard(className string) error

Move the shard from loaded to in progress

type ServerMetrics

type ServerMetrics struct {
	TCPActiveConnections *prometheus.GaugeVec
	RequestDuration      *prometheus.HistogramVec
	RequestBodySize      *prometheus.HistogramVec
	ResponseBodySize     *prometheus.HistogramVec
	InflightRequests     *prometheus.GaugeVec
}

ServerMetrics exposes set of prometheus metrics for http and grpc servers.

func NewServerMetrics

func NewServerMetrics(namespace string, reg prometheus.Registerer) *ServerMetrics

type TenantOffloadMetrics

type TenantOffloadMetrics struct {
	// NOTE: These ops are not GET or PUT requests to object storage.
	// these are one of the `download`, `upload` or `delete`. Because we use s5cmd to talk
	// to object storage currently. Which supports these operations at high level.
	FetchedBytes     prometheus.Counter
	TransferredBytes prometheus.Counter
	OpsDuration      *prometheus.HistogramVec
}

func NewTenantOffloadMetrics

func NewTenantOffloadMetrics(cfg Config, reg prometheus.Registerer) *TenantOffloadMetrics

Jump to

Keyboard shortcuts

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