blob: 551bf7111a41c56d8045003c346550aed68fb1e5 [file] [log] [blame]
/*
* 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.profiling.v3";
option go_package = "skywalking.apache.org/repo/goapi/collect/ebpf/profiling/v3";
import "common/Command.proto";
service ContinuousProfilingService {
// Query continuous profiling policy
rpc queryPolicies(ContinuousProfilingPolicyQuery) returns (Commands) {
}
// Report the profiling task when the policy threshold is reached
// Use the returned task ID to perform the profiling task through EBPFProfilingService#collectProfilingData.
rpc reportProfilingTask(ContinuousProfilingReport) returns (Commands) {
}
}
message ContinuousProfilingPolicyQuery {
// current agent contains service and policies
repeated ContinuousProfilingServicePolicyQuery policies = 1;
}
message ContinuousProfilingServicePolicyQuery {
// service name of the each process
string serviceName = 1;
// UUID represents the version(hash/shasum) of the current policies for the service.
// This is blank in the initialization stage and is set through the `ContinuousProfilingPolicyQuery` command response for the following rounds of queries.
string uuid = 2;
}
message ContinuousProfilingReport {
// over threshold process entity
string layer = 1;
string serviceName = 2;
string instanceName = 3;
string processName = 4;
// reached thresholds causes
repeated ContinuousProfilingCause causes = 5;
// The execution duration for this triggered profiling.
// This is set at the agent side.
int32 duration = 6;
// target profiling task
oneof targetTask {
ContinuousOnCPUProfilingTask onCPU = 7;
ContinuousOffCPUProfilingTask offCPU = 8;
ContinuousNetworkProfilingTask network = 9;
}
}
message ContinuousProfilingCause {
ContinuousProfilingCauseType type = 1;
oneof cause {
ContinuousProfilingSingleValueCause singleValue = 2;
ContinuousProfilingURICause uri = 3;
}
}
enum ContinuousProfilingCauseType {
// Current process CPU usage percent(0-100).
ProcessCPU = 0;
// The number of threads in the process.
ProcessThreadCount = 1;
// System load value.
SystemLoad = 2;
// Process response error rate(0-100).
// HTTP response codes in [500-600) are considered errors.
// Formula: ErrorCount / TotalCount * 100
HTTPErrorRate = 3;
// Process response average time(ms).
// Formula: TotalResponseTime(ms) / TotalCount
HTTPAvgResponseTime = 4;
}
message ContinuousProfilingSingleValueCause {
double threshold = 1;
double current = 2;
}
message ContinuousProfilingURICause {
oneof uri {
string regex = 1;
string path = 2;
}
double threshold = 3;
double current = 4;
}
// eBPF on CPU profiling task
message ContinuousOnCPUProfilingTask {
}
// eBPF off CPU profiling task
message ContinuousOffCPUProfilingTask {
}
// eBPF Network profiling task
message ContinuousNetworkProfilingTask {
repeated string samplingURIRegexes = 1;
}