Skip to content

Commit 7536424

Browse files
authored
Add agent self-observability. (#716)
1 parent aa24777 commit 7536424

64 files changed

Lines changed: 1340 additions & 63 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/actions/build/action.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ runs:
5656
./mvnw -q --batch-mode clean package -Dmaven.test.skip || \
5757
./mvnw -q --batch-mode clean package -Dmaven.test.skip
5858
echo "::endgroup::"
59-
- uses: actions/upload-artifact@v2
59+
- uses: actions/upload-artifact@v4
6060
name: Upload Agent
6161
with:
6262
name: skywalking-agent
@@ -89,7 +89,7 @@ runs:
8989
docker save -o test-containers/skywalking-agent-test-jvm-1.0.0.tgz skywalking/agent-test-jvm:1.0.0
9090
docker save -o test-containers/skywalking-agent-test-tomcat-1.0.0.tgz skywalking/agent-test-tomcat:1.0.0
9191
echo "::endgroup::"
92-
- uses: actions/upload-artifact@v2
92+
- uses: actions/upload-artifact@v4
9393
name: Upload Test Containers
9494
with:
9595
name: test-tools

.github/actions/run/action.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ inputs:
2525
runs:
2626
using: "composite"
2727
steps:
28-
- uses: actions/download-artifact@v2
28+
- uses: actions/download-artifact@v4
2929
with:
3030
name: skywalking-agent
3131
path: skywalking-agent
32-
- uses: actions/download-artifact@v2
32+
- uses: actions/download-artifact@v4
3333
with:
3434
name: test-tools
3535
- name: Load Test Containers
@@ -53,7 +53,7 @@ runs:
5353
echo "::group::Run Plugin Test ${{ inputs.test_case }}"
5454
bash test/plugin/run.sh ${{ inputs.test_case }}
5555
echo "::endgroup::"
56-
- uses: actions/upload-artifact@v2
56+
- uses: actions/upload-artifact@v4
5757
name: Upload Agent
5858
if: always()
5959
with:

.github/workflows/plugins-test.0.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ jobs:
5353
matrix:
5454
case:
5555
- activemq-scenario
56+
- agent-so11y-scenario
5657
- apm-toolkit-trace-scenario
5758
- apm-toolkit-tracer-scenario
5859
- armeria-0.96minus-scenario

.github/workflows/publish-docker.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
java-version: 17
4848
- name: Build Agent
4949
run: make build
50-
- uses: actions/upload-artifact@v2
50+
- uses: actions/upload-artifact@v4
5151
name: Upload Agent
5252
with:
5353
name: skywalking-agent
@@ -71,7 +71,7 @@ jobs:
7171
- uses: actions/checkout@v2
7272
with:
7373
submodules: true
74-
- uses: actions/download-artifact@v2
74+
- uses: actions/download-artifact@v4
7575
with:
7676
name: skywalking-agent
7777
path: skywalking-agent

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Release Notes.
66
------------------
77

88
* Upgrade nats plugin to support 2.16.5
9+
* Add agent self-observability.
910

1011

1112
All issues and pull requests are [here](https://github.com/apache/skywalking/milestone/222?closed=1)

apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.skywalking.apm.agent.core.logging.api.ILog;
2727
import org.apache.skywalking.apm.agent.core.logging.api.LogManager;
2828
import org.apache.skywalking.apm.agent.core.sampling.SamplingService;
29+
import org.apache.skywalking.apm.agent.core.so11y.AgentSo11y;
2930
import org.apache.skywalking.apm.util.StringUtil;
3031

3132
import static org.apache.skywalking.apm.agent.core.conf.Config.Agent.OPERATION_NAME_THRESHOLD;
@@ -52,6 +53,7 @@ private static AbstractTracerContext getOrCreate(String operationName, boolean f
5253
if (LOGGER.isDebugEnable()) {
5354
LOGGER.debug("No operation name, ignore this trace.");
5455
}
56+
AgentSo11y.measureTracingContextCreation(forceSampling, true);
5557
context = new IgnoredTracerContext();
5658
} else {
5759
if (EXTEND_SERVICE == null) {

apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.apache.skywalking.apm.agent.core.remote.GRPCChannelManager;
3434
import org.apache.skywalking.apm.agent.core.remote.GRPCChannelStatus;
3535
import org.apache.skywalking.apm.agent.core.sampling.SamplingService;
36+
import org.apache.skywalking.apm.agent.core.so11y.AgentSo11y;
3637
import org.apache.skywalking.apm.util.StringUtil;
3738

3839
@DefaultImplementor
@@ -81,17 +82,22 @@ public AbstractTracerContext createTraceContext(String operationName, boolean fo
8182
* Don't trace anything if the backend is not available.
8283
*/
8384
if (!Config.Agent.KEEP_TRACING && GRPCChannelStatus.DISCONNECT.equals(status)) {
85+
AgentSo11y.measureTracingContextCreation(forceSampling, true);
8486
return new IgnoredTracerContext();
8587
}
8688

8789
int suffixIdx = operationName.lastIndexOf(".");
8890
if (suffixIdx > -1 && ignoreSuffixSet.contains(operationName.substring(suffixIdx))) {
91+
AgentSo11y.measureTracingContextCreation(forceSampling, true);
8992
context = new IgnoredTracerContext();
9093
} else {
9194
SamplingService samplingService = ServiceManager.INSTANCE.findService(SamplingService.class);
9295
if (forceSampling || samplingService.trySampling(operationName)) {
96+
AgentSo11y.measureTracingContextCreation(forceSampling, false);
9397
context = new TracingContext(operationName, spanLimitWatcher);
9498
} else {
99+
AgentSo11y.measureTracingContextCreation(false, true);
100+
AgentSo11y.measureLeakedTracingContext(true);
95101
context = new IgnoredTracerContext();
96102
}
97103
}

apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
2424
import org.apache.skywalking.apm.agent.core.context.trace.NoopSpan;
2525
import org.apache.skywalking.apm.agent.core.profile.ProfileStatusContext;
26+
import org.apache.skywalking.apm.agent.core.so11y.AgentSo11y;
2627

2728
/**
2829
* The <code>IgnoredTracerContext</code> represent a context should be ignored. So it just maintains the stack with an
@@ -116,6 +117,7 @@ public AbstractSpan activeSpan() {
116117
public boolean stopSpan(AbstractSpan span) {
117118
stackDepth--;
118119
if (stackDepth == 0) {
120+
AgentSo11y.measureTracingContextCompletion(true);
119121
ListenerManager.notifyFinish(this);
120122
}
121123
return stackDepth == 0;

apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.apache.skywalking.apm.agent.core.logging.api.LogManager;
4444
import org.apache.skywalking.apm.agent.core.profile.ProfileStatusContext;
4545
import org.apache.skywalking.apm.agent.core.profile.ProfileTaskExecutionService;
46+
import org.apache.skywalking.apm.agent.core.so11y.AgentSo11y;
4647
import org.apache.skywalking.apm.util.StringUtil;
4748

4849
import static org.apache.skywalking.apm.agent.core.conf.Config.Agent.CLUSTER;
@@ -460,7 +461,12 @@ private void finish() {
460461
}
461462

462463
if (isFinishedInMainThread && (!isRunningInAsyncMode || asyncSpanCounter == 0)) {
463-
TraceSegment finishedSegment = segment.finish(isLimitMechanismWorking());
464+
boolean limitMechanismWorking = isLimitMechanismWorking();
465+
if (limitMechanismWorking) {
466+
AgentSo11y.measureLeakedTracingContext(false);
467+
}
468+
AgentSo11y.measureTracingContextCompletion(false);
469+
TraceSegment finishedSegment = segment.finish(limitMechanismWorking);
464470
TracingContext.ListenerManager.notifyFinish(finishedSegment);
465471
running = false;
466472
}

apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/AbstractClassEnhancePluginDefine.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@
4343
public abstract class AbstractClassEnhancePluginDefine {
4444
private static final ILog LOGGER = LogManager.getLogger(AbstractClassEnhancePluginDefine.class);
4545

46+
/**
47+
* plugin name defined in skywalking-plugin.def
48+
*/
49+
private String pluginName;
4650
/**
4751
* New field name.
4852
*/
@@ -199,4 +203,17 @@ public boolean isBootstrapInstrumentation() {
199203
* @return collections of {@link InstanceMethodsInterceptV2Point}
200204
*/
201205
public abstract StaticMethodsInterceptV2Point[] getStaticMethodsInterceptV2Points();
206+
207+
/**
208+
* plugin name should be set after create PluginDefine instance
209+
*
210+
* @param pluginName key defined in skywalking-plugin.def
211+
*/
212+
protected void setPluginName(final String pluginName) {
213+
this.pluginName = pluginName;
214+
}
215+
216+
public String getPluginName() {
217+
return pluginName;
218+
}
202219
}

0 commit comments

Comments
 (0)