blob: dc10a90e58bc67b51852d2f7686e0818a796863a [file] [log] [blame]
// Copyright 2016 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.tracing.v1;
import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto";
import "google/rpc/status.proto";
option go_package = "google.golang.org/genproto/googleapis/tracing/v1;tracing";
option java_multiple_files = true;
option java_outer_classname = "TraceProto";
option java_package = "com.google.tracing.v1";
// A TraceId uniquely identifies a Trace. It is conceptually a 128-bit value,
// represented as a string, containing the hex-encoded value.
message TraceId {
// Trace ID specified as a hex-encoded string. *Must* be 32 bytes long.
string hex_encoded = 1;
}
message Module {
// Binary module.
// E.g. main binary, kernel modules, and dynamic libraries
// such as libc.so, sharedlib.so
string module = 1;
// Build_id is a unique identifier for the module,
// probably a hash of its contents
string build_id = 2;
}
message StackTrace {
// Presents a single stack frame in a stack trace.
message StackFrame {
// Fully qualified names which uniquely identify function/method/etc.
string function_name = 1;
// Used when function name is ‘mangled’. Not guaranteed to be fully
// qualified but usually it is.
string orig_function_name = 2;
// File name of the frame.
string file_name = 3;
// Line number of the frame.
int64 line_number = 4;
// Column number is important in JavaScript(anonymous functions),
// Might not be available in some languages.
int64 column_number = 5;
// Binary module the code is loaded from.
Module load_module = 6;
// source_version is deployment specific. It might be
// better to be stored in deployment metadata.
// However, in distributed tracing, it’s hard to keep track of
// source/binary versions at one place for all spans.
string source_version = 7;
}
// Stack frames of this stack trace.
repeated StackFrame stack_frame = 1;
// User can choose to use his own hash function to hash large labels to save
// network bandwidth and storage.
// Typical usage is to pass both initially to inform the storage of the
// mapping. And in subsequent calls, pass in stack_trace_hash_id only.
// User shall verify the hash value is successfully stored.
uint64 stack_trace_hash_id = 2;
}
// Allowed label values.
message LabelValue {
// The value of the label.
oneof value {
// A string value.
string string_value = 1;
// An integer value.
int64 int_value = 2;
// A boolean value.
bool bool_value = 3;
}
}
// A span represents a single operation within a trace. Spans can be nested
// and form a trace tree. Often, a trace contains a root span that describes the
// end-to-end latency and, optionally, one or more subspans for
// its sub-operations. Spans do not need to be contiguous. There may be gaps
// between spans in a trace.
message Span {
// A time-stamped annotation in the Span.
message TimeEvent {
// Text annotation with a set of labels.
message Annotation {
// A user-supplied message describing the event.
string description = 1;
// A set of labels on the annotation.
map<string, LabelValue> labels = 2;
}
// An event describing an RPC message sent/received on the network.
message NetworkEvent {
// The type of the network event. SENT or RECV event.
enum Type {
UNSPECIFIED = 0;
SENT = 1;
RECV = 2;
}
// If available, this is the kernel time:
// For sent messages, this is the time at which the first bit was sent.
// For received messages, this is the time at which the last bit was
// received.
google.protobuf.Timestamp kernel_time = 1;
Type type = 2;
// Every message has an identifier, that must be different from all the
// network messages in this span.
// This is very important when the request/response are streamed.
uint64 message_id = 3;
// Number of bytes send/receive.
uint64 message_size = 4;
}
// The local machine absolute timestamp when this event happened.
google.protobuf.Timestamp local_time = 1;
oneof value {
// Optional field for user supplied <string, LabelValue> map
Annotation annotation = 2;
// Optional field that can be used only for network events.
NetworkEvent network_event = 3;
}
}
// Link one span with another which may be in a different Trace. Used (for
// example) in batching operations, where a single batch handler processes
// multiple requests from different traces.
message Link {
// The type of the link.
enum Type {
UNSPECIFIED = 0;
CHILD = 1;
PARENT = 2;
}
// The trace and span identifier of the linked span.
TraceId trace_id = 1;
fixed64 span_id = 2;
Type type = 3;
}
// Identifier for the span. Must be a 64-bit integer other than 0 and
// unique within a trace.
fixed64 id = 1;
// Name of the span. The span name is sanitized and displayed in the
// Stackdriver Trace tool in the {% dynamic print site_values.console_name %}.
// The name may be a method name or some other per-call site name.
// For the same executable and the same call point, a best practice is
// to use a consistent name, which makes it easier to correlate
// cross-trace spans.
string name = 2;
// ID of parent span. 0 or missing if this is a root span.
fixed64 parent_id = 3;
// Local machine clock in nanoseconds from the UNIX epoch,
// at which span execution started.
// On the server side these are the times when the server application
// handler starts running.
google.protobuf.Timestamp local_start_time = 4;
// Local machine clock in nanoseconds from the UNIX epoch,
// at which span execution ended.
// On the server side these are the times when the server application
// handler finishes running.
google.protobuf.Timestamp local_end_time = 5;
// Properties of a span. Labels at the span level.
// E.g.
// "/instance_id": "my-instance"
// "/zone": "us-central1-a"
// "/grpc/peer_address": "ip:port" (dns, etc.)
// "/grpc/deadline": "Duration"
// "/http/user_agent"
// "/http/request_bytes": 300
// "/http/response_bytes": 1200
// "/http/url": google.com/apis
// "/pid"
// "abc.com/mylabel": "my label value"
map<string, LabelValue> labels = 6;
// Stack trace captured at the start of the span. This is optional.
StackTrace stack_trace = 7;
// A collection of time-stamped events.
repeated TimeEvent time_events = 8;
// A collection of links.
repeated Link links = 9;
// The final status of the Span. This is optional.
google.rpc.Status status = 10;
// True if this Span has a remote parent (is an RPC server Span).
bool has_remote_parent = 11;
}
// A trace describes how long it takes for an application to perform some
// operations. It consists of a tree of spans, each of which contains details
// about an operation with time information and operation details.
message Trace {
// Globally unique identifier for the trace. Common to all the spans.
TraceId trace_id = 1;
// Collection of spans in the trace. The root span has parent_id == 0.
repeated Span spans = 2;
}