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