188 lines
5.9 KiB
Markdown
188 lines
5.9 KiB
Markdown
# Log Data Protocol
|
|
|
|
Report log data via protocol.
|
|
|
|
## Native Proto Protocol
|
|
|
|
Report `native-proto` format log via gRPC.
|
|
|
|
[gRPC service define](https://github.com/apache/skywalking-data-collect-protocol/blob/master/logging/Logging.proto)
|
|
|
|
```protobuf
|
|
syntax = "proto3";
|
|
|
|
package skywalking.v3;
|
|
|
|
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.apache.org/repo/goapi/collect/logging/v3";
|
|
|
|
import "common/Common.proto";
|
|
import "common/Command.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 based on these.
|
|
LogTags tags = 7;
|
|
// [Optional] Since 9.0.0
|
|
// The layer of the service and servce instance. If absent, the OAP would set `layer`=`ID: 2, NAME: general`
|
|
string layer = 8;
|
|
}
|
|
|
|
// The content of the log data
|
|
message LogDataBody {
|
|
// A type to match analyzer(s) at the OAP server.
|
|
// The data could be analyzed 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 that could be formatted as a JSON object.
|
|
message JSONLog {
|
|
string json = 1;
|
|
}
|
|
|
|
// YAML formatted log. The yaml field represents the string that 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;
|
|
}
|
|
|
|
message LogTags {
|
|
// String key, String value pair.
|
|
repeated KeyStringValuePair data = 1;
|
|
}
|
|
|
|
```
|
|
|
|
## Native Kafka Protocol
|
|
|
|
Report `native-json` format log via kafka.
|
|
|
|
Json log record example:
|
|
```json
|
|
{
|
|
"timestamp":1618161813371,
|
|
"service":"Your_ApplicationName",
|
|
"serviceInstance":"3a5b8da5a5ba40c0b192e91b5c80f1a8@192.168.1.8",
|
|
"layer":"GENERAL",
|
|
"traceContext":{
|
|
"traceId":"ddd92f52207c468e9cd03ddd107cd530.69.16181331190470001",
|
|
"spanId":"0",
|
|
"traceSegmentId":"ddd92f52207c468e9cd03ddd107cd530.69.16181331190470000"
|
|
},
|
|
"tags":{
|
|
"data":[
|
|
{
|
|
"key":"level",
|
|
"value":"INFO"
|
|
},
|
|
{
|
|
"key":"logger",
|
|
"value":"com.example.MyLogger"
|
|
}
|
|
]
|
|
},
|
|
"body":{
|
|
"text":{
|
|
"text":"log message"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## HTTP API
|
|
|
|
Report `json` format logs via HTTP API, the endpoint is `http://<oap-address>:12800/v3/logs`.
|
|
|
|
Json log record example:
|
|
|
|
```json
|
|
[
|
|
{
|
|
"timestamp": 1618161813371,
|
|
"service": "Your_ApplicationName",
|
|
"serviceInstance": "3a5b8da5a5ba40c0b192e91b5c80f1a8@192.168.1.8",
|
|
"layer":"GENERAL",
|
|
"traceContext": {
|
|
"traceId": "ddd92f52207c468e9cd03ddd107cd530.69.16181331190470001",
|
|
"spanId": "0",
|
|
"traceSegmentId": "ddd92f52207c468e9cd03ddd107cd530.69.16181331190470000"
|
|
},
|
|
"tags": {
|
|
"data": [
|
|
{
|
|
"key": "level",
|
|
"value": "INFO"
|
|
},
|
|
{
|
|
"key": "logger",
|
|
"value": "com.example.MyLogger"
|
|
}
|
|
]
|
|
},
|
|
"body": {
|
|
"text": {
|
|
"text": "log message"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
```
|
|
|