Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/ingester/client/ingester.proto

167 lines
4.0 KiB

syntax = "proto3";
package ingesterpb;
import "gogoproto/gogo.proto";
import "pkg/logproto/logproto.proto";
import "pkg/logproto/metrics.proto";
option go_package = "github.com/grafana/loki/pkg/ingester/client";
option (gogoproto.marshaler_all) = true;
option (gogoproto.unmarshaler_all) = true;
service Ingester {
rpc Push(logproto.WriteRequest) returns (logproto.WriteResponse) {}
rpc Query(QueryRequest) returns (QueryResponse) {}
rpc QueryStream(QueryRequest) returns (stream QueryStreamResponse) {}
rpc QueryExemplars(ExemplarQueryRequest) returns (ExemplarQueryResponse) {}
rpc LabelValues(LabelValuesRequest) returns (LabelValuesResponse) {}
rpc LabelNames(LabelNamesRequest) returns (LabelNamesResponse) {}
rpc UserStats(UserStatsRequest) returns (UserStatsResponse) {}
rpc AllUserStats(UserStatsRequest) returns (UsersStatsResponse) {}
rpc MetricsForLabelMatchers(MetricsForLabelMatchersRequest) returns (MetricsForLabelMatchersResponse) {}
rpc MetricsMetadata(MetricsMetadataRequest) returns (MetricsMetadataResponse) {}
// TransferChunks allows leaving ingester (client) to stream chunks directly to joining ingesters (server).
rpc TransferChunks(stream TimeSeriesChunk) returns (TransferChunksResponse) {}
}
message ReadRequest {
repeated QueryRequest queries = 1;
}
message ReadResponse {
repeated QueryResponse results = 1;
}
message QueryRequest {
int64 start_timestamp_ms = 1;
int64 end_timestamp_ms = 2;
repeated LabelMatcher matchers = 3;
}
message ExemplarQueryRequest {
int64 start_timestamp_ms = 1;
int64 end_timestamp_ms = 2;
repeated LabelMatchers matchers = 3;
}
message QueryResponse {
repeated logproto.TimeSeries timeseries = 1 [(gogoproto.nullable) = false];
}
// QueryStreamResponse contains a batch of timeseries chunks or timeseries. Only one of these series will be populated.
message QueryStreamResponse {
repeated TimeSeriesChunk chunkseries = 1 [(gogoproto.nullable) = false];
repeated logproto.TimeSeries timeseries = 2 [(gogoproto.nullable) = false];
}
message ExemplarQueryResponse {
repeated logproto.TimeSeries timeseries = 1 [(gogoproto.nullable) = false];
}
message LabelValuesRequest {
string label_name = 1;
int64 start_timestamp_ms = 2;
int64 end_timestamp_ms = 3;
LabelMatchers matchers = 4;
}
message LabelValuesResponse {
repeated string label_values = 1;
}
message LabelNamesRequest {
int64 start_timestamp_ms = 1;
int64 end_timestamp_ms = 2;
}
message LabelNamesResponse {
repeated string label_names = 1;
}
message UserStatsRequest {}
message UserStatsResponse {
double ingestion_rate = 1;
uint64 num_series = 2;
double api_ingestion_rate = 3;
double rule_ingestion_rate = 4;
}
message UserIDStatsResponse {
string user_id = 1;
UserStatsResponse data = 2;
}
message UsersStatsResponse {
repeated UserIDStatsResponse stats = 1;
}
message MetricsForLabelMatchersRequest {
int64 start_timestamp_ms = 1;
int64 end_timestamp_ms = 2;
repeated LabelMatchers matchers_set = 3;
}
message MetricsForLabelMatchersResponse {
repeated logproto.Metric metric = 1;
}
message MetricsMetadataRequest {}
message MetricsMetadataResponse {
repeated logproto.MetricMetadata metadata = 1;
}
message TimeSeriesChunk {
string from_ingester_id = 1;
string user_id = 2;
repeated logproto.LegacyLabelPair labels = 3 [
(gogoproto.nullable) = false,
(gogoproto.customtype) = "github.com/grafana/loki/pkg/logproto.LabelAdapter"
];
repeated Chunk chunks = 4 [(gogoproto.nullable) = false];
}
message Chunk {
int64 start_timestamp_ms = 1;
int64 end_timestamp_ms = 2;
int32 encoding = 3;
bytes data = 4;
}
message TransferChunksResponse {}
message LabelMatchers {
repeated LabelMatcher matchers = 1;
}
enum MatchType {
EQUAL = 0;
NOT_EQUAL = 1;
REGEX_MATCH = 2;
REGEX_NO_MATCH = 3;
}
message LabelMatcher {
MatchType type = 1;
string name = 2;
string value = 3;
}
message TimeSeriesFile {
string from_ingester_id = 1;
string user_id = 2;
string filename = 3;
bytes data = 4;
}