未验证 提交 df83490a 编写于 作者: wu-sheng's avatar wu-sheng 提交者: GitHub

UI is ready for 8.0.0 release. (#4896)

上级 baecad35
......@@ -46,7 +46,7 @@ SkyWalking OAP is using the STAM(Streaming Topology Analysis Method) to analysis
for better performance. Read [the paper of STAM](https://wu-sheng.github.io/STAM/) for more details.
# Document
[8.x dev](docs/README.md) | [7.0](https://github.com/apache/skywalking/blob/v7.0.0/docs/README.md) | [6.6](https://github.com/apache/skywalking/blob/v6.6.0/docs/README.md), [6.5](https://github.com/apache/skywalking/blob/v6.5.0/docs/README.md).
[8.x dev](docs/README.md), [8.0](https://github.com/apache/skywalking/blob/v8.0.0/docs/README.md) | [7.0](https://github.com/apache/skywalking/blob/v7.0.0/docs/README.md) | [6.6](https://github.com/apache/skywalking/blob/v6.6.0/docs/README.md), [6.5](https://github.com/apache/skywalking/blob/v6.5.0/docs/README.md).
NOTICE, SkyWalking 8.0+ uses [v3 protocols](docs/en/protocols/README.md). They are incompatible with previous releases.
......@@ -71,15 +71,15 @@ Host in Beijing. Go to [demo](http://122.112.182.72:8080).
<td width="100%" align="center" colspan="2"><b>Dashboard</b></td>
</tr>
<tr>
<td><img src="http://skywalking.apache.org/screenshots/6.1.0/dashboard-1.png"/></td>
<td><img src="http://skywalking.apache.org/screenshots/6.1.0/dashboard-2.png"/></td>
<td><img src="http://skywalking.apache.org/screenshots/8.0.0/dashboard-1.png"/></td>
<td><img src="http://skywalking.apache.org/screenshots/8.0.0/dashboard-2.png"/></td>
</tr>
<tr>
<td width="50%" align="center"><b>Topology Map</b></td>
<td width="50%" align="center"><b>Trace</b></td>
</tr>
<tr>
<td><img src="http://skywalking.apache.org/screenshots/6.1.0/topology.png"/></td>
<td><img src="http://skywalking.apache.org/screenshots/8.0.0/topology.png"/></td>
<td><img src="http://skywalking.apache.org/screenshots/6.1.0/trace.png"/></td>
</tr>
</table>
......
......@@ -365,21 +365,6 @@ public class Config {
public static boolean TRACE_OPS_PARAMS = false;
}
/**
* Operation name group rules
*/
public static class OPGroup {
/*
* Since 6.6.0, exit span is not requesting endpoint register,
* this group rule is not required.
*
* Keep this commented, just as a reminder that, it will be reused in a RPC server side plugin.
*/
// public static class RestTemplate implements OPGroupDefinition {
// public static Map<String, String> RULE = new HashMap<String, String>();
// }
}
public static class Light4J {
/**
* If true, trace all middleware/business handlers that are part of the Light4J handler chain for a request,
......
/*
* 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.
*
*/
package org.apache.skywalking.apm.agent.core.context;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.skywalking.apm.agent.core.boot.BootService;
import org.apache.skywalking.apm.agent.core.boot.DefaultImplementor;
import org.apache.skywalking.apm.agent.core.conf.Config;
import org.apache.skywalking.apm.agent.core.conf.OPGroupDefinition;
import org.apache.skywalking.apm.util.StringFormatGroup;
/**
* Support operation name format by config. Every plugin could declare its own rule to avoid performance concerns.
* <p>
* Right now, the rule is REGEX based, it definitely has much space to optimize, because basically, only `*` is required
* to be supported.
*/
@DefaultImplementor
public class OperationNameFormatService implements BootService {
private static final Map<Class, StringFormatGroup> RULES = new ConcurrentHashMap<Class, StringFormatGroup>();
@Override
public void prepare() throws Throwable {
for (Class<?> ruleName : Config.Plugin.OPGroup.class.getClasses()) {
if (!OPGroupDefinition.class.isAssignableFrom(ruleName)) {
continue;
}
StringFormatGroup formatGroup = RULES.get(ruleName);
if (formatGroup == null) {
formatGroup = new StringFormatGroup();
RULES.put(ruleName, formatGroup);
}
for (Field ruleNameField : ruleName.getFields()) {
if (ruleNameField.getType().equals(Map.class)) {
Map<String, String> rule = (Map<String, String>) ruleNameField.get(null);
for (Map.Entry<String, String> entry : rule.entrySet()) {
formatGroup.addRule(entry.getKey(), entry.getValue());
}
}
}
}
}
@Override
public void boot() {
}
@Override
public void onComplete() {
}
@Override
public void shutdown() {
}
/**
* Format the operation name based on group rules
*
* @param definition in the Config
* @param opName represents the operation name literal string
* @return format string if rule matched or the given opName
*/
public String formatOperationName(Class<? extends OPGroupDefinition> definition, String opName) {
StringFormatGroup formatGroup = RULES.get(definition);
if (formatGroup == null) {
return opName;
} else {
return formatGroup.format(opName).getName();
}
}
}
......@@ -25,6 +25,5 @@ org.apache.skywalking.apm.agent.core.remote.ServiceManagementClient
org.apache.skywalking.apm.agent.core.context.ContextManagerExtendService
org.apache.skywalking.apm.agent.core.commands.CommandService
org.apache.skywalking.apm.agent.core.commands.CommandExecutorService
org.apache.skywalking.apm.agent.core.context.OperationNameFormatService
org.apache.skywalking.apm.agent.core.profile.ProfileTaskChannelService
org.apache.skywalking.apm.agent.core.profile.ProfileTaskExecutionService
......@@ -57,7 +57,7 @@ public class ServiceManagerTest {
public void testServiceDependencies() throws Exception {
HashMap<Class, BootService> registryService = getFieldValue(ServiceManager.INSTANCE, "bootedServices");
assertThat(registryService.size(), is(12));
assertThat(registryService.size(), is(11));
assertTraceSegmentServiceClient(ServiceManager.INSTANCE.findService(TraceSegmentServiceClient.class));
assertContextManager(ServiceManager.INSTANCE.findService(ContextManager.class));
......
......@@ -18,15 +18,21 @@
package org.apache.skywalking.apm.agent.core.context;
import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
import org.apache.skywalking.apm.agent.core.conf.Config;
import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
import org.apache.skywalking.apm.agent.core.test.tools.AgentServiceRule;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
public class TracingContextTest {
@Rule
public AgentServiceRule serviceRule = new AgentServiceRule();
@BeforeClass
public static void beforeClass() {
Config.Agent.KEEP_TRACING = true;
......@@ -35,6 +41,7 @@ public class TracingContextTest {
@AfterClass
public static void afterClass() {
Config.Agent.KEEP_TRACING = false;
ServiceManager.INSTANCE.shutdown();
}
@Test
......
......@@ -169,9 +169,6 @@ Now, we have the following known bootstrap plugins.
SkyWalking java agent supports plugin to extend [the supported list](Supported-list.md). Please follow
our [Plugin Development Guide](../../../guides/Java-Plugin-Development-Guide.md).
If some RPC framework endpoints(server side) could include parameter, please read [Operation Name Group Rule](op_name_group_rule.md),
and consider to add this feature.
# Test
If you are interested in plugin compatible tests or agent performance, see the following reports.
* [Plugin Test in every Pull Request](https://github.com/apache/skywalking/actions?query=workflow%3APluginsTest)
......
# Operation Name Group Rule
Operation Name in auto instrumentation agent is unpredictable, some time, target application carries parameter in it, due to the parameter included in URI mostly.
Those operation name are also as known endpoint name in most cases.
Such as /api/checkTicket/tk/{userToken}.
We solved most of these cases, by leverage the parameter pattern path in framework, such as SpringMVC, Webflux, etc.
In this case, it is undetected in this way, so we have to ask the users to set the group rule manually.
All rules are supported to set through agent.config, system properties and system env, like other agent settings.
- Config format, `plugin.opgroup.`plugin name`.rule[`rule name`]`=pattern regex expression
Multiple configuration items for a single plugin with different keys are supports, such as
1. plugin.opgroup.resttemplate.rule[/rule1]=/path1
1. plugin.opgroup.resttemplate.rule[/rule2]=/path2
1. plugin.opgroup.resttemplate.rule[/rule2]=/path3
We have following plugins supporting operation name group.
| Plugin | Config Key | Example |
|:----:|:-----:|:----|
|RestTemplate| plugin.opgroup.resttemplate.rule | plugin.opgroup.resttemplate.rule[/user/auth/{token}]=`\/user\/auth\/.*` |
Subproject commit b0e47262fa76b39b8fe58bff1f737892e84e7709
Subproject commit 919e9324012fc601f8d4f5f4fac0602c5a561265
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册