| // 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; |
| } |