You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2020/12/01 12:09:53 UTC

[skywalking-data-collect-protocol] branch master updated: Add logging collect protocol (#35)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-data-collect-protocol.git


The following commit(s) were added to refs/heads/master by this push:
     new 3e7bb23  Add logging collect protocol (#35)
3e7bb23 is described below

commit 3e7bb23bbc6f534e8941c548b8fad3fa9c19697d
Author: 吴晟 Wu Sheng <wu...@foxmail.com>
AuthorDate: Tue Dec 1 20:09:47 2020 +0800

    Add logging collect protocol (#35)
    
    * Add logging collect protocol
---
 README.md             |   6 +--
 logging/Logging.proto | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 110 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 3553b4a..b80cc06 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
 # Apache SkyWalking data collect protocol
 Apache SkyWalking typically collect data from 
-1. Language agent, including Java, .Net, PHP, Golang, NodeJS, Lua.
-1. Service mesh proxy, especially Envoy controlled by Istio
+1. Tracing agent.
+1. Service mesh proxy, especially Envoy controlled by Istio.
 1. Meter data, also known pure metrics data.
-1. 3rd libs, such as Zipkin, Jaeger
+1. Logs.
 
 This repo hosts the protocol of SkyWalking native report protocol, defined in gRPC. Read [Protocol DOC](https://github.com/apache/skywalking/blob/master/docs/en/protocols/README.md#probe-protocols) for more details
 
diff --git a/logging/Logging.proto b/logging/Logging.proto
new file mode 100644
index 0000000..6135db5
--- /dev/null
+++ b/logging/Logging.proto
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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";
+
+option java_multiple_files = true;
+option java_package = "org.apache.skywalking.apm.network.logging.v3";
+option csharp_namespace = "SkyWalking.NetworkProtocol.V3";
+option go_package = "skywalking/network/language/agent/v3";
+
+import "common/Common.proto";
+
+// Report collected logs into the OAP backend
+service LogReportService {
+    // Recommend to report log data in a stream mode.
+    // The service/instance/endpoint of the log could share the previous value if they are not set.
+    // Reporting the logs of same service in the batch mode could reduce the network cost.
+    rpc collect (stream LogData) returns (Commands) {
+    }
+}
+
+// Log data is collected through file scratcher of agent.
+// Natively, Satellite provides various ways to collect logs.
+message LogData {
+    // [Optional] The timestamp of the log, in millisecond.
+    // If not set, OAP server would use the received timestamp as log's timestamp, or relies on the OAP server analyzer.
+    int64 timestamp = 1;
+    // [Required] **Service**. Represents a set/group of workloads which provide the same behaviours for incoming requests.
+    //
+    // The logic name represents the service. This would show as a separate node in the topology.
+    // The metrics analyzed from the spans, would be aggregated for this entity as the service level.
+    //
+    // If this is not the first element of the streaming, use the previous not-null name as the service name.
+    string service = 2;
+    // [Optional] **Service Instance**. Each individual workload in the Service group is known as an instance. Like `pods` in Kubernetes, it
+    // doesn't need to be a single OS process, however, if you are using instrument agents, an instance is actually a real OS process.
+    //
+    // The logic name represents the service instance. This would show as a separate node in the instance relationship.
+    // The metrics analyzed from the spans, would be aggregated for this entity as the service instance level.
+    string serviceInstance = 3;
+    // [Optional] **Endpoint**. A path in a service for incoming requests, such as an HTTP URI path or a gRPC service class + method signature.
+    //
+    // The logic name represents the endpoint, which logs belong.
+    string endpoint = 4;
+    // [Required] The content of the log.
+    LogDataBody body = 5;
+    // [Optional] Logs with trace context
+    TraceContext traceContext = 6;
+    // [Optional] The available tags. OAP server could provide search/analysis capabilities base on these.
+    repeated KeyStringValuePair tags = 7;
+}
+
+// The content of the log data
+message LogDataBody {
+    // A type to match analyzer(s) at the OAP server.
+    // The data could be analysis at the client side, but could be partial
+    string type = 1;
+    // Content with extendable format.
+    oneof content {
+        TextLog text = 2;
+        JSONLog json = 3;
+        YAMLLog yaml = 4;
+    }
+}
+
+// Literal text log, typically requires regex or split mechanism to filter meaningful info.
+message TextLog {
+    string text = 1;
+}
+
+// JSON formatted log. The json field represents the string could be formatted as a JSON object.
+message JSONLog {
+    string json = 1;
+}
+
+// YAML formatted log. The yaml field represents the string could be formatted as a YAML map.
+message YAMLLog {
+    string yaml = 1;
+}
+
+// Logs with trace context, represent agent system has injects context(IDs) into log text.
+message TraceContext {
+    // [Optional] A string id represents the whole trace.
+    string traceId = 1;
+    // [Optional] A unique id represents this segment. Other segments could use this id to reference as a child segment.
+    string traceSegmentId = 2;
+    // [Optional] The number id of the span. Should be unique in the whole segment.
+    // Starting at 0.
+    int32 spanId = 3;
+}
+
+