Documentation ¶
Overview ¶
Package stats provides primitives for recording metrics across the query path. Statistics are passed through the query context. To start a new query statistics context use:
ctx := stats.NewContext(ctx)
Then you can update statistics by mutating data by using:
stats.GetChunkData(ctx) stats.GetIngesterData(ctx) stats.GetStoreData
Finally to get a snapshot of the current query statistic use
stats.Snapshot(ctx, time.Since(start))
Ingester statistics are sent across the GRPC stream using Trailers see https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md
Index ¶
- Variables
- func CollectTrailer(ctx context.Context) grpc.CallOption
- func GetMutex(ctx context.Context) (*sync.Mutex, error)
- func JoinResults(ctx context.Context, res Result) error
- func NewContext(ctx context.Context) context.Context
- func SendAsTrailer(ctx context.Context, stream grpc.ServerStream)
- type ChunkData
- type Ingester
- func (*Ingester) Descriptor() ([]byte, []int)
- func (this *Ingester) Equal(that interface{}) bool
- func (m *Ingester) GetCompressedBytes() int64
- func (m *Ingester) GetDecompressedBytes() int64
- func (m *Ingester) GetDecompressedLines() int64
- func (m *Ingester) GetHeadChunkBytes() int64
- func (m *Ingester) GetHeadChunkLines() int64
- func (m *Ingester) GetTotalBatches() int64
- func (m *Ingester) GetTotalChunksMatched() int64
- func (m *Ingester) GetTotalDuplicates() int64
- func (m *Ingester) GetTotalLinesSent() int64
- func (m *Ingester) GetTotalReached() int32
- func (this *Ingester) GoString() string
- func (m *Ingester) Marshal() (dAtA []byte, err error)
- func (m *Ingester) MarshalTo(dAtA []byte) (int, error)
- func (*Ingester) ProtoMessage()
- func (m *Ingester) Reset()
- func (m *Ingester) Size() (n int)
- func (this *Ingester) String() string
- func (m *Ingester) Unmarshal(dAtA []byte) error
- func (m *Ingester) XXX_DiscardUnknown()
- func (m *Ingester) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Ingester) XXX_Merge(src proto.Message)
- func (m *Ingester) XXX_Size() int
- func (m *Ingester) XXX_Unmarshal(b []byte) error
- type IngesterData
- type Result
- func (r *Result) ComputeSummary(execTime time.Duration)
- func (*Result) Descriptor() ([]byte, []int)
- func (this *Result) Equal(that interface{}) bool
- func (m *Result) GetIngester() Ingester
- func (m *Result) GetStore() Store
- func (m *Result) GetSummary() Summary
- func (this *Result) GoString() string
- func (r Result) Log(log log.Logger)
- func (m *Result) Marshal() (dAtA []byte, err error)
- func (m *Result) MarshalTo(dAtA []byte) (int, error)
- func (r *Result) Merge(m Result)
- func (*Result) ProtoMessage()
- func (m *Result) Reset()
- func (m *Result) Size() (n int)
- func (this *Result) String() string
- func (m *Result) Unmarshal(dAtA []byte) error
- func (m *Result) XXX_DiscardUnknown()
- func (m *Result) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Result) XXX_Merge(src proto.Message)
- func (m *Result) XXX_Size() int
- func (m *Result) XXX_Unmarshal(b []byte) error
- type Store
- func (*Store) Descriptor() ([]byte, []int)
- func (this *Store) Equal(that interface{}) bool
- func (m *Store) GetChunksDownloadTime() float64
- func (m *Store) GetCompressedBytes() int64
- func (m *Store) GetDecompressedBytes() int64
- func (m *Store) GetDecompressedLines() int64
- func (m *Store) GetHeadChunkBytes() int64
- func (m *Store) GetHeadChunkLines() int64
- func (m *Store) GetTotalChunksDownloaded() int64
- func (m *Store) GetTotalChunksRef() int64
- func (m *Store) GetTotalDuplicates() int64
- func (this *Store) GoString() string
- func (m *Store) Marshal() (dAtA []byte, err error)
- func (m *Store) MarshalTo(dAtA []byte) (int, error)
- func (*Store) ProtoMessage()
- func (m *Store) Reset()
- func (m *Store) Size() (n int)
- func (this *Store) String() string
- func (m *Store) Unmarshal(dAtA []byte) error
- func (m *Store) XXX_DiscardUnknown()
- func (m *Store) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Store) XXX_Merge(src proto.Message)
- func (m *Store) XXX_Size() int
- func (m *Store) XXX_Unmarshal(b []byte) error
- type StoreData
- type Summary
- func (*Summary) Descriptor() ([]byte, []int)
- func (this *Summary) Equal(that interface{}) bool
- func (m *Summary) GetBytesProcessedPerSecond() int64
- func (m *Summary) GetExecTime() float64
- func (m *Summary) GetLinesProcessedPerSecond() int64
- func (m *Summary) GetTotalBytesProcessed() int64
- func (m *Summary) GetTotalLinesProcessed() int64
- func (this *Summary) GoString() string
- func (s Summary) Log(log log.Logger)
- func (m *Summary) Marshal() (dAtA []byte, err error)
- func (m *Summary) MarshalTo(dAtA []byte) (int, error)
- func (*Summary) ProtoMessage()
- func (m *Summary) Reset()
- func (m *Summary) Size() (n int)
- func (this *Summary) String() string
- func (m *Summary) Unmarshal(dAtA []byte) error
- func (m *Summary) XXX_DiscardUnknown()
- func (m *Summary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Summary) XXX_Merge(src proto.Message)
- func (m *Summary) XXX_Size() int
- func (m *Summary) XXX_Unmarshal(b []byte) error
Constants ¶
This section is empty.
Variables ¶
var ( ErrInvalidLengthStats = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowStats = fmt.Errorf("proto: integer overflow") )
Functions ¶
func CollectTrailer ¶
func CollectTrailer(ctx context.Context) grpc.CallOption
CollectTrailer register a new trailer that can be collected by the engine.
func JoinResults ¶
JoinResults merges a Result with the embedded Result in a context in a concurrency-safe manner.
func NewContext ¶
NewContext creates a new statistics context
func SendAsTrailer ¶
func SendAsTrailer(ctx context.Context, stream grpc.ServerStream)
Types ¶
type ChunkData ¶
type ChunkData struct { HeadChunkBytes int64 `json:"headChunkBytes"` // Total bytes processed but was already in memory. (found in the headchunk) HeadChunkLines int64 `json:"headChunkLines"` // Total lines processed but was already in memory. (found in the headchunk) DecompressedBytes int64 `json:"decompressedBytes"` // Total bytes decompressed and processed from chunks. DecompressedLines int64 `json:"decompressedLines"` // Total lines decompressed and processed from chunks. CompressedBytes int64 `json:"compressedBytes"` // Total bytes of compressed chunks (blocks) processed. TotalDuplicates int64 `json:"totalDuplicates"` // Total duplicates found while processing. }
ChunkData contains chunks specific statistics.
func GetChunkData ¶
GetChunkData returns the chunks statistics data from the current context.
type Ingester ¶
type Ingester struct { // Total ingester reached for this query. TotalReached int32 `protobuf:"varint,1,opt,name=totalReached,proto3" json:"totalReached"` // Total of chunks matched by the query from ingesters TotalChunksMatched int64 `protobuf:"varint,2,opt,name=totalChunksMatched,proto3" json:"totalChunksMatched"` // Total of batches sent from ingesters. TotalBatches int64 `protobuf:"varint,3,opt,name=totalBatches,proto3" json:"totalBatches"` // Total lines sent by ingesters. TotalLinesSent int64 `protobuf:"varint,4,opt,name=totalLinesSent,proto3" json:"totalLinesSent"` // Total bytes processed but was already in memory. (found in the headchunk) HeadChunkBytes int64 `protobuf:"varint,5,opt,name=headChunkBytes,proto3" json:"headChunkBytes"` // Total lines processed but was already in memory. (found in the headchunk) HeadChunkLines int64 `protobuf:"varint,6,opt,name=headChunkLines,proto3" json:"headChunkLines"` // Total bytes decompressed and processed from chunks. DecompressedBytes int64 `protobuf:"varint,7,opt,name=decompressedBytes,proto3" json:"decompressedBytes"` // Total lines decompressed and processed from chunks. DecompressedLines int64 `protobuf:"varint,8,opt,name=decompressedLines,proto3" json:"decompressedLines"` // Total bytes of compressed chunks (blocks) processed. CompressedBytes int64 `protobuf:"varint,9,opt,name=compressedBytes,proto3" json:"compressedBytes"` // Total duplicates found while processing. TotalDuplicates int64 `protobuf:"varint,10,opt,name=totalDuplicates,proto3" json:"totalDuplicates"` }
func (*Ingester) Descriptor ¶
func (*Ingester) GetCompressedBytes ¶
func (*Ingester) GetDecompressedBytes ¶
func (*Ingester) GetDecompressedLines ¶
func (*Ingester) GetHeadChunkBytes ¶
func (*Ingester) GetHeadChunkLines ¶
func (*Ingester) GetTotalBatches ¶
func (*Ingester) GetTotalChunksMatched ¶
func (*Ingester) GetTotalDuplicates ¶
func (*Ingester) GetTotalLinesSent ¶
func (*Ingester) GetTotalReached ¶
func (*Ingester) ProtoMessage ¶
func (*Ingester) ProtoMessage()
func (*Ingester) XXX_DiscardUnknown ¶
func (m *Ingester) XXX_DiscardUnknown()
func (*Ingester) XXX_Marshal ¶
func (*Ingester) XXX_Unmarshal ¶
type IngesterData ¶
type IngesterData struct { TotalChunksMatched int64 `json:"totalChunksMatched"` // Total of chunks matched by the query from ingesters TotalBatches int64 `json:"totalBatches"` // Total of batches sent from ingesters. TotalLinesSent int64 `json:"totalLinesSent"` // Total lines sent by ingesters. }
IngesterData contains ingester specific statistics.
func GetIngesterData ¶
func GetIngesterData(ctx context.Context) *IngesterData
GetIngesterData returns the ingester statistics data from the current context.
type Result ¶
type Result struct { Summary Summary `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary"` Store Store `protobuf:"bytes,2,opt,name=store,proto3" json:"store"` Ingester Ingester `protobuf:"bytes,3,opt,name=ingester,proto3" json:"ingester"` }
Result contains LogQL query statistics.
func (*Result) ComputeSummary ¶
ComputeSummary calculates the summary based on store and ingester data.
func (*Result) Descriptor ¶
func (*Result) GetIngester ¶
func (*Result) GetSummary ¶
func (*Result) ProtoMessage ¶
func (*Result) ProtoMessage()
func (*Result) XXX_DiscardUnknown ¶
func (m *Result) XXX_DiscardUnknown()
func (*Result) XXX_Marshal ¶
func (*Result) XXX_Unmarshal ¶
type Store ¶
type Store struct { // The total of chunk reference fetched from index. TotalChunksRef int64 `protobuf:"varint,1,opt,name=totalChunksRef,proto3" json:"totalChunksRef"` // Total number of chunks fetched. TotalChunksDownloaded int64 `protobuf:"varint,2,opt,name=totalChunksDownloaded,proto3" json:"totalChunksDownloaded"` // Time spent fetching chunks in nanoseconds. ChunksDownloadTime float64 `protobuf:"fixed64,3,opt,name=chunksDownloadTime,proto3" json:"chunksDownloadTime"` // Total bytes processed but was already in memory. (found in the headchunk) HeadChunkBytes int64 `protobuf:"varint,4,opt,name=headChunkBytes,proto3" json:"headChunkBytes"` // Total lines processed but was already in memory. (found in the headchunk) HeadChunkLines int64 `protobuf:"varint,5,opt,name=headChunkLines,proto3" json:"headChunkLines"` // Total bytes decompressed and processed from chunks. DecompressedBytes int64 `protobuf:"varint,6,opt,name=decompressedBytes,proto3" json:"decompressedBytes"` // Total lines decompressed and processed from chunks. DecompressedLines int64 `protobuf:"varint,7,opt,name=decompressedLines,proto3" json:"decompressedLines"` // Total bytes of compressed chunks (blocks) processed. CompressedBytes int64 `protobuf:"varint,8,opt,name=compressedBytes,proto3" json:"compressedBytes"` // Total duplicates found while processing. TotalDuplicates int64 `protobuf:"varint,9,opt,name=totalDuplicates,proto3" json:"totalDuplicates"` }
func (*Store) Descriptor ¶
func (*Store) GetChunksDownloadTime ¶
func (*Store) GetCompressedBytes ¶
func (*Store) GetDecompressedBytes ¶
func (*Store) GetDecompressedLines ¶
func (*Store) GetHeadChunkBytes ¶
func (*Store) GetHeadChunkLines ¶
func (*Store) GetTotalChunksDownloaded ¶
func (*Store) GetTotalChunksRef ¶
func (*Store) GetTotalDuplicates ¶
func (*Store) ProtoMessage ¶
func (*Store) ProtoMessage()
func (*Store) XXX_DiscardUnknown ¶
func (m *Store) XXX_DiscardUnknown()
func (*Store) XXX_Marshal ¶
func (*Store) XXX_Unmarshal ¶
type StoreData ¶
type StoreData struct { TotalChunksRef int64 // The total of chunk reference fetched from index. TotalChunksDownloaded int64 // Total number of chunks fetched. ChunksDownloadTime time.Duration // Time spent fetching chunks. }
StoreData contains store specific statistics.
func GetStoreData ¶
GetStoreData returns the store statistics data from the current context.
type Summary ¶
type Summary struct { // Total bytes processed per second. BytesProcessedPerSecond int64 `protobuf:"varint,1,opt,name=bytesProcessedPerSecond,proto3" json:"bytesProcessedPerSecond"` // Total lines processed per second. LinesProcessedPerSecond int64 `protobuf:"varint,2,opt,name=linesProcessedPerSecond,proto3" json:"linesProcessedPerSecond"` // Total bytes processed. TotalBytesProcessed int64 `protobuf:"varint,3,opt,name=totalBytesProcessed,proto3" json:"totalBytesProcessed"` // Total lines processed. TotalLinesProcessed int64 `protobuf:"varint,4,opt,name=totalLinesProcessed,proto3" json:"totalLinesProcessed"` // Execution time in seconds. ExecTime float64 `protobuf:"fixed64,5,opt,name=execTime,proto3" json:"execTime"` }
Summary is the summary of a query statistics.
func (*Summary) Descriptor ¶
func (*Summary) GetBytesProcessedPerSecond ¶
func (*Summary) GetExecTime ¶
func (*Summary) GetLinesProcessedPerSecond ¶
func (*Summary) GetTotalBytesProcessed ¶
func (*Summary) GetTotalLinesProcessed ¶
func (*Summary) ProtoMessage ¶
func (*Summary) ProtoMessage()
func (*Summary) XXX_DiscardUnknown ¶
func (m *Summary) XXX_DiscardUnknown()