| /* |
| * 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"; |
| |
| package skywalking.v3; |
| |
| option java_multiple_files = true; |
| option java_package = "org.apache.skywalking.apm.network.ebpf.accesslog.v3"; |
| option go_package = "skywalking.apache.org/repo/goapi/collect/ebpf/accesslog/v3"; |
| |
| import "common/Common.proto"; |
| |
| service EBPFAccessLogService { |
| rpc collect(stream EBPFAccessLogMessage) returns (EBPFAccessLogDownstream) { |
| } |
| } |
| |
| message EBPFAccessLogMessage { |
| // current node information, only not null when first message or have update |
| EBPFAccessLogNodeInfo node = 1; |
| // local process and remote process connection information |
| AccessLogConnection connection = 2; |
| // kernel level metrics |
| repeated AccessLogKernelLog kernelLogs = 3; |
| // application protocol log |
| // if the protocol is detected, the kernel logs is works the related logs |
| // otherwise, the kernel log is not related and is sent periodically |
| AccessLogProtocolLogs protocolLog = 4; |
| } |
| |
| message EBPFAccessLogNodeInfo { |
| // Node name |
| string name = 1; |
| // All net interfaces list |
| repeated EBPFAccessLogNodeNetInterface netInterfaces = 2; |
| // System boot time |
| Instant bootTime = 3; |
| // Cluster name |
| string clusterName = 4; |
| } |
| |
| message EBPFAccessLogNodeNetInterface { |
| int32 index = 1; |
| int32 mtu = 2; |
| string name = 3; |
| } |
| |
| // Connection information |
| message AccessLogConnection { |
| // local address |
| ConnectionAddress local = 1; |
| // remote/peer address |
| ConnectionAddress remote = 2; |
| // local address detect point |
| DetectPoint role = 3; |
| // is the connection using TLS or not |
| AccessLogConnectionTLSMode tlsMode = 4; |
| // application protocol type |
| AccessLogProtocolType protocol = 5; |
| } |
| |
| message ConnectionAddress { |
| oneof address { |
| // if the address is monitored under the local machine, then return the kubernetes |
| KubernetesProcessAddress kubernetes = 1; |
| // if the address cannot be aware, then return the ip address |
| IPAddress ip = 2; |
| } |
| } |
| |
| message KubernetesProcessAddress { |
| string serviceName = 1; |
| string podName = 2; |
| string containerName = 3; |
| string processName = 4; |
| int32 port = 5; |
| } |
| |
| message IPAddress { |
| string host = 1; |
| int32 port = 2; |
| } |
| |
| enum AccessLogConnectionTLSMode { |
| Plain = 0; |
| TLS = 1; |
| } |
| |
| message AccessLogKernelLog { |
| oneof operation { |
| AccessLogKernelConnectOperation connect = 1; |
| AccessLogKernelAcceptOperation accept = 2; |
| AccessLogKernelCloseOperation close = 3; |
| AccessLogKernelReadOperation read = 4; |
| AccessLogKernelWriteOperation write = 5; |
| } |
| } |
| |
| message AccessLogProtocolLogs { |
| oneof protocol { |
| AccessLogHTTPProtocol http = 1; |
| } |
| } |
| |
| message AccessLogHTTPProtocol { |
| // first bytes receive/write timestamp |
| EBPFTimestamp startTime = 1; |
| // last bytes receive/write timestamp |
| EBPFTimestamp endTime = 2; |
| AccessLogHTTPProtocolVersion version = 3; |
| AccessLogHTTPProtocolRequest request = 4; |
| AccessLogHTTPProtocolResponse response = 5; |
| } |
| |
| enum AccessLogHTTPProtocolVersion { |
| HTTP1 = 0; |
| HTTP2 = 1; |
| } |
| |
| message AccessLogHTTPProtocolRequest { |
| AccessLogHTTPProtocolRequestMethod method = 1; |
| // The path portion from the incoming request URI. |
| string path = 2; |
| // Request header and body size. |
| uint64 sizeOfHeadersBytes = 3; |
| uint64 sizeOfBodyBytes = 4; |
| // The trace information if detected. |
| AccessLogTraceInfo trace = 5; |
| } |
| |
| message AccessLogHTTPProtocolResponse { |
| int32 statusCode = 1; |
| // Response header and body size. |
| uint64 sizeOfHeadersBytes = 3; |
| uint64 sizeOfBodyBytes = 4; |
| } |
| |
| message AccessLogTraceInfo { |
| AccessLogTraceInfoProvider provider = 1; |
| // [Optional] A string id represents the whole trace. |
| string traceId = 2; |
| // A unique id represents this segment. Other segments could use this id to reference as a child segment. |
| // [Optional] when this span reference |
| string traceSegmentId = 3; |
| // If type == SkyWalking |
| // The number id of the span. Should be unique in the whole segment. |
| // Starting at 0 |
| // |
| // If type == Zipkin |
| // The type of span ID is string. |
| string spanId = 4; |
| } |
| |
| enum AccessLogTraceInfoProvider { |
| Zipkin = 0; |
| SkyWalking = 1; |
| } |
| |
| enum AccessLogHTTPProtocolRequestMethod { |
| Get = 0; |
| Post = 1; |
| Put = 2; |
| Delete = 3; |
| Head = 4; |
| Patch = 5; |
| Options = 6; |
| Trace = 7; |
| Connect = 8; |
| } |
| |
| message AccessLogKernelConnectOperation { |
| // Starting to connect with peer address timestamp |
| EBPFTimestamp startTime = 1; |
| // Finish connect operation timestamp |
| EBPFTimestamp endTime = 2; |
| // Is the connect operation success or not |
| bool success = 3; |
| } |
| |
| message AccessLogKernelAcceptOperation { |
| // Starting to accept socket timestamp |
| EBPFTimestamp startTime = 1; |
| // Finish accept operation timestamp |
| EBPFTimestamp endTime = 2; |
| } |
| |
| message AccessLogKernelCloseOperation { |
| // Starting to close the connection timestamp |
| EBPFTimestamp startTime = 1; |
| // Finish close operation timestamp |
| EBPFTimestamp endTime = 2; |
| // Is the close operation success or not |
| bool success = 3; |
| } |
| |
| message AccessLogKernelWriteOperation { |
| // Starting to write data timestamp |
| EBPFTimestamp startTime = 1; |
| // Finish write operation timestamp |
| EBPFTimestamp endTime = 2; |
| // Which kind of syscall of current write operation |
| AccessLogKernelWriteSyscall syscall = 3; |
| |
| // Layer 2-4 related metrics |
| AccessLogKernelWriteL4Metrics l4Metrics = 4; |
| AccessLogKernelWriteL3Metrics l3Metrics = 5; |
| AccessLogKernelWriteL2Metrics l2Metrics = 6; |
| } |
| |
| message AccessLogKernelWriteL4Metrics { |
| // total duration(nanosecond) of layer 4 |
| uint64 totalDuration = 1; |
| // total send package(contains retransmit count) count(sk_buff in linux) |
| int64 totalTransmitPackageCount = 2; |
| // total retransmit package count(sk_buff in linux) |
| int64 totalRetransmitPackageCount = 3; |
| // total losted package count metrics |
| repeated AccessLogLossPackageMetrics lossPackageMetrics = 4; |
| // total package size(bytes) |
| int64 totalPackageSize = 5; |
| } |
| |
| message AccessLogLossPackageMetrics { |
| string location = 1; |
| int32 count = 2; |
| } |
| |
| message AccessLogKernelWriteL3Metrics { |
| // total duration(nanosecond) of layer 3 |
| uint64 totalDuration = 1; |
| // total local out use duration(nanoseconds) -> kernel: ip_local_out |
| uint64 totalLocalDuration = 2; |
| // total output use duration(nanoseconds) -> kernel: ip_finish_output2 - ip_output |
| uint64 totalOutputDuration = 3; |
| // total resolve remote MAC address(ARP Request) count and duration(nanosecond) -> kernel: neigh_resolve_output |
| uint64 totalResolveMACCount = 5; |
| uint64 totalResolveMACDuration = 6; |
| // total netfiltering count and duration(nanosecond) -> kernel: nf_hook |
| uint64 totalNetFilterCount = 7; |
| uint64 totalNetFilterDuration = 8; |
| } |
| |
| message AccessLogKernelWriteL2Metrics { |
| // total duration(nanosecond) of layer 2 |
| uint64 totalDuration = 1; |
| // target network hardware interface index, get the net hardware name through EBPFAccessLogNodeNetInterface#index |
| uint32 ifindex = 2; |
| // total enter the net device buffer count |
| uint64 totalEnterQueueBufferCount = 3; |
| // total buffer data ready to send duration(nanosecond), ready_to_send - enter_queue |
| uint64 totalReadySendDuration = 4; |
| // total send buffer to the net device duration(nanosecond) |
| uint64 totalNetDeviceSendDuration = 5; |
| } |
| |
| message AccessLogKernelReadOperation { |
| // Starting to read data timestamp |
| EBPFTimestamp startTime = 1; |
| // Finish read operation timestamp |
| EBPFTimestamp endTime = 2; |
| // Which kind of syscall of current read operation |
| AccessLogKernelReadSyscall syscall = 3; |
| |
| // Layer 2-4 related metrics |
| AccessLogKernelReadL2Metrics l2Metrics = 4; |
| AccessLogKernelReadL3Metrics l3Metrics = 5; |
| AccessLogKernelReadL4Metrics l4Metrics = 6; |
| } |
| |
| message AccessLogKernelReadL2Metrics { |
| // from network hardware interface index, get the net hardware name through EBPFAccessLogNodeNetInterface#index |
| uint32 ifindex = 1; |
| // total package count |
| uint32 totalPackageCount = 2; |
| // total package size |
| uint64 totalPackageSize = 3; |
| // total duration(nanosecond) of all data packets queued (waiting to be read). |
| uint64 totalPackageToQueueDuration = 4; |
| // total duration(nanosecond) of all data packets read from the queue. |
| uint64 totalRcvPackageFromQueueDuration = 5; |
| } |
| |
| message AccessLogKernelReadL3Metrics { |
| uint64 totalDuration = 1; |
| // total local receive use duration(nanoseconds) -> kernel: ip_rcv_finish - ip_rcv |
| uint64 totalRecvDuration = 2; |
| // total local use duration(nanoseconds) -> kernel: ip_local_deliver_finish - ip_local_deliver |
| uint64 totalLocalDuration = 3; |
| // total netfiltering count and duration(nanosecond) -> kernel: nf_hook |
| uint64 totalNetFilterCount = 4; |
| uint64 totalNetFilterDuration = 5; |
| } |
| |
| message AccessLogKernelReadL4Metrics { |
| uint64 totalDuration = 1; |
| } |
| |
| enum AccessLogKernelWriteSyscall { |
| Write = 0; |
| Writev = 1; |
| Send = 2; |
| SendTo = 3; |
| SendMsg = 4; |
| SendMmsg = 5; |
| SendFile = 6; |
| SendFile64 = 7; |
| } |
| |
| enum AccessLogKernelReadSyscall { |
| Read = 0; |
| Readv = 1; |
| Recv = 2; |
| RecvFrom = 3; |
| RecvMsg = 4; |
| RecvMmsg = 5; |
| } |
| |
| enum AccessLogProtocolType { |
| TCP = 0; |
| HTTP_1 = 1; |
| HTTP_2 = 2; |
| } |
| |
| message EBPFTimestamp { |
| oneof timestamp { |
| EBPFOffsetTimestamp offset = 1; |
| } |
| } |
| |
| // Get nanosecond through offset with node start instant |
| message EBPFOffsetTimestamp { |
| uint64 offset = 1; |
| } |
| |
| message EBPFAccessLogDownstream { |
| } |