You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2020/04/10 08:27:31 UTC
[skywalking] branch length-rule created (now 5f1b701)
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a change to branch length-rule
in repository https://gitbox.apache.org/repos/asf/skywalking.git.
at 5f1b701 Set up restrict length rules for service, instance and endpoint
This branch includes the following new commits:
new 5f1b701 Set up restrict length rules for service, instance and endpoint
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[skywalking] 01/01: Set up restrict length rules for service,
instance and endpoint
Posted by wu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch length-rule
in repository https://gitbox.apache.org/repos/asf/skywalking.git
commit 5f1b701ebe41c2f762161498a62a0e8ff815d011
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Fri Apr 10 16:26:44 2020 +0800
Set up restrict length rules for service, instance and endpoint
---
.../skywalking/apm/util/StringFormatGroup.java | 5 +-
apm-dist-es7/src/main/assembly/binary-es7.xml | 2 +-
apm-dist/src/main/assembly/binary.xml | 2 +-
dist-material/application.yml | 277 ---------------------
docs/en/setup/backend/backend-setup.md | 2 +-
docs/en/setup/service-agent/java-agent/README.md | 4 +-
oap-server/server-bootstrap/pom.xml | 1 -
.../src/main/resources/application.yml | 16 +-
.../resources/endpoint_naming_rules.properties | 18 --
.../skywalking/oap/server/core/CoreModule.java | 23 +-
.../oap/server/core/CoreModuleConfig.java | 41 ++-
.../oap/server/core/CoreModuleProvider.java | 9 +-
.../server/core/config/NamingLengthControl.java | 110 ++++++++
.../oap/server/core/source/Endpoint.java | 9 +-
.../oap/server/core/source/EndpointRelation.java | 12 +-
.../skywalking/oap/server/core/CoreModuleTest.java | 2 +-
.../envoy/als/K8sALSServiceMeshHTTPAnalysis.java | 27 +-
.../receiver/envoy/als/K8sHTTPAnalysisTest.java | 14 +-
.../handler/CLRMetricReportServiceHandler.java | 29 ++-
.../provider/IstioTelemetryGRPCHandler.java | 5 +-
.../handler/JVMMetricReportServiceHandler.java | 13 +-
.../handler/v8/grpc/ManagementServiceHandler.java | 20 +-
.../v8/rest/ManagementServiceKeepAliveHandler.java | 17 +-
.../ManagementServiceReportPropertiesHandler.java | 14 +-
.../server/receiver/mesh/EndpointNameFormater.java | 71 ------
.../aop/server/receiver/mesh/MeshGRPCHandler.java | 2 +-
.../receiver/mesh/TelemetryDataDispatcher.java | 47 ++--
.../oap/server/receiver/mesh/MeshDataMock.java | 6 +-
.../trace/provider/TraceModuleProvider.java | 12 +-
.../provider/parser/SegmentParserServiceImpl.java | 16 +-
.../receiver/trace/provider/parser/SpanTags.java | 2 +
.../listener/MultiScopesAnalysisListener.java | 55 ++--
.../NetworkAddressAliasMappingListener.java | 33 ++-
.../parser/listener/SegmentAnalysisListener.java | 41 +--
.../provider/parser/listener/SourceBuilder.java | 43 +++-
.../tool/profile/core/MockCoreModuleProvider.java | 3 +
36 files changed, 414 insertions(+), 589 deletions(-)
diff --git a/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/StringFormatGroup.java b/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/StringFormatGroup.java
index 1350206..ab30cdb 100644
--- a/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/StringFormatGroup.java
+++ b/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/StringFormatGroup.java
@@ -62,10 +62,10 @@ public class StringFormatGroup {
public FormatResult format(String string) {
for (PatternRule rule : rules) {
if (rule.getPattern().matcher(string).matches()) {
- return new FormatResult(true, rule.getName());
+ return new FormatResult(true, rule.getName(), string);
}
}
- return new FormatResult(false, string);
+ return new FormatResult(false, string, string);
}
@Getter
@@ -73,6 +73,7 @@ public class StringFormatGroup {
public static class FormatResult {
private final boolean match;
private final String name;
+ private final String replacedName;
}
@Getter
diff --git a/apm-dist-es7/src/main/assembly/binary-es7.xml b/apm-dist-es7/src/main/assembly/binary-es7.xml
index a932784..4188b60 100644
--- a/apm-dist-es7/src/main/assembly/binary-es7.xml
+++ b/apm-dist-es7/src/main/assembly/binary-es7.xml
@@ -39,7 +39,6 @@
<outputDirectory>/config</outputDirectory>
<includes>
<include>log4j2.xml</include>
- <include>application.yml</include>
<include>alarm-settings.yml</include>
<include>alarm-settings-sample.yml</include>
</includes>
@@ -47,6 +46,7 @@
<fileSet>
<directory>${project.basedir}/../oap-server/server-bootstrap/src/main/resources</directory>
<includes>
+ <include>application.yml</include>
<include>component-libraries.yml</include>
<include>official_analysis.oal</include>
<include>gateways.yml</include>
diff --git a/apm-dist/src/main/assembly/binary.xml b/apm-dist/src/main/assembly/binary.xml
index 4b8e964..7d8d866 100644
--- a/apm-dist/src/main/assembly/binary.xml
+++ b/apm-dist/src/main/assembly/binary.xml
@@ -39,7 +39,6 @@
<outputDirectory>/config</outputDirectory>
<includes>
<include>log4j2.xml</include>
- <include>application.yml</include>
<include>alarm-settings.yml</include>
<include>alarm-settings-sample.yml</include>
</includes>
@@ -47,6 +46,7 @@
<fileSet>
<directory>${project.basedir}/../oap-server/server-bootstrap/src/main/resources</directory>
<includes>
+ <include>application.yml</include>
<include>component-libraries.yml</include>
<include>official_analysis.oal</include>
<include>gateways.yml</include>
diff --git a/dist-material/application.yml b/dist-material/application.yml
deleted file mode 100644
index 6d14e38..0000000
--- a/dist-material/application.yml
+++ /dev/null
@@ -1,277 +0,0 @@
-# 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.
-
-cluster:
- selector: ${SW_CLUSTER:standalone}
- standalone:
- # Please check your ZooKeeper is 3.5+, However, it is also compatible with ZooKeeper 3.4.x. Replace the ZooKeeper 3.5+
- # library the oap-libs folder with your ZooKeeper 3.4.x library.
- zookeeper:
- nameSpace: ${SW_NAMESPACE:""}
- hostPort: ${SW_CLUSTER_ZK_HOST_PORT:localhost:2181}
- # Retry Policy
- baseSleepTimeMs: ${SW_CLUSTER_ZK_SLEEP_TIME:1000} # initial amount of time to wait between retries
- maxRetries: ${SW_CLUSTER_ZK_MAX_RETRIES:3} # max number of times to retry
- # Enable ACL
- enableACL: ${SW_ZK_ENABLE_ACL:false} # disable ACL in default
- schema: ${SW_ZK_SCHEMA:digest} # only support digest schema
- expression: ${SW_ZK_EXPRESSION:skywalking:skywalking}
- kubernetes:
- watchTimeoutSeconds: ${SW_CLUSTER_K8S_WATCH_TIMEOUT:60}
- namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}
- labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}
- uidEnvName: ${SW_CLUSTER_K8S_UID:SKYWALKING_COLLECTOR_UID}
- consul:
- serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
- # Consul cluster nodes, example: 10.0.0.1:8500,10.0.0.2:8500,10.0.0.3:8500
- hostPort: ${SW_CLUSTER_CONSUL_HOST_PORT:localhost:8500}
- aclToken: ${SW_CLUSTER_CONSUL_ACLTOKEN:""}
- nacos:
- serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
- hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848}
- # Nacos Configuration namespace
- namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"}
- etcd:
- serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
- # etcd cluster nodes, example: 10.0.0.1:2379,10.0.0.2:2379,10.0.0.3:2379
- hostPort: ${SW_CLUSTER_ETCD_HOST_PORT:localhost:2379}
-
-core:
- selector: ${SW_CORE:default}
- default:
- # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
- # Receiver: Receive agent data, Level 1 aggregate
- # Aggregator: Level 2 aggregate
- role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
- restHost: ${SW_CORE_REST_HOST:0.0.0.0}
- restPort: ${SW_CORE_REST_PORT:12800}
- restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
- gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
- gRPCPort: ${SW_CORE_GRPC_PORT:11800}
- gRPCSslEnabled: ${SW_CORE_GRPC_SSL_ENABLED:false}
- gRPCSslKeyPath: ${SW_CORE_GRPC_SSL_KEY_PATH:""}
- gRPCSslCertChainPath: ${SW_CORE_GRPC_SSL_CERT_CHAIN_PATH:""}
- gRPCSslTrustedCAPath: ${SW_CORE_GRPC_SSL_TRUSTED_CA_PATH:""}
- downsampling:
- - Hour
- - Day
- - Month
- # Set a timeout on metrics data. After the timeout has expired, the metrics data will automatically be deleted.
- enableDataKeeperExecutor: ${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR:true} # Turn it off then automatically metrics data delete will be close.
- dataKeeperExecutePeriod: ${SW_CORE_DATA_KEEPER_EXECUTE_PERIOD:5} # How often the data keeper executor runs periodically, unit is minute
- recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:3} # Unit is day
- metricsDataTTL: ${SW_CORE_RECORD_DATA_TTL:7} # Unit is day
- # Cache metric data for 1 minute to reduce database queries, and if the OAP cluster changes within that minute,
- # the metrics may not be accurate within that minute.
- enableDatabaseSession: ${SW_CORE_ENABLE_DATABASE_SESSION:true}
- topNReportPeriod: ${SW_CORE_TOPN_REPORT_PERIOD:10} # top_n record worker report cycle, unit is minute
- # Extra model column are the column defined by in the codes, These columns of model are not required logically in aggregation or further query,
- # and it will cause more load for memory, network of OAP and storage.
- # But, being activated, user could see the name in the storage entities, which make users easier to use 3rd party tool, such as Kibana->ES, to query the data by themselves.
- activeExtraModelColumns: ${SW_CORE_ACTIVE_EXTRA_MODEL_COLUMNS:false}
- # The max length of the endpoint name.
- # In the current practice, we don't recommend the length over 190.
- endpointNameMaxLength: ${SW_CORE_ENDPOINT_NAME_MAX_LENGTH:150}
-storage:
- selector: ${SW_STORAGE:h2}
- elasticsearch:
- nameSpace: ${SW_NAMESPACE:""}
- clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
- protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
- trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:""}
- trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}
- user: ${SW_ES_USER:""}
- password: ${SW_ES_PASSWORD:""}
- secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} # Secrets management file in the properties format includes the username, password, which are managed by 3rd party tool.
- dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.
- indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
- indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
- # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
- bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests
- flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
- concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
- resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
- metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
- segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
- profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200}
- advanced: ${SW_STORAGE_ES_ADVANCED:""}
- elasticsearch7:
- nameSpace: ${SW_NAMESPACE:""}
- clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
- protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
- trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
- trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}
- dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.
- user: ${SW_ES_USER:""}
- password: ${SW_ES_PASSWORD:""}
- secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} # Secrets management file in the properties format includes the username, password, which are managed by 3rd party tool.
- indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
- indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
- # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
- bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests
- flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
- concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
- resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
- metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
- segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
- profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200}
- advanced: ${SW_STORAGE_ES_ADVANCED:""}
- h2:
- driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
- url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
- user: ${SW_STORAGE_H2_USER:sa}
- metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
- mysql:
- properties:
- jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"}
- dataSource.user: ${SW_DATA_SOURCE_USER:root}
- dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@1234}
- dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
- dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
- dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
- dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
- metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
- influxdb:
- url: ${SW_STORAGE_INFLUXDB_URL:http://localhost:8086}
- user: ${SW_STORAGE_INFLUXDB_USER:root}
- password: ${SW_STORAGE_INFLUXDB_PASSWORD:}
- database: ${SW_STORAGE_INFLUXDB_DATABASE:skywalking}
- actions: ${SW_STORAGE_INFLUXDB_ACTIONS:1000} # the number of actions to collect
- duration: ${SW_STORAGE_INFLUXDB_DURATION:1000} # the time to wait at most (milliseconds)
- fetchTaskLogMaxSize: ${SW_STORAGE_INFLUXDB_FETCH_TASK_LOG_MAX_SIZE:5000} # the max number of fetch task log in a request
-
-receiver-sharing-server:
- selector: ${SW_RECEIVER_SHARING_SERVER:default}
- default:
- authentication: ${SW_AUTHENTICATION:""}
-receiver-register:
- selector: ${SW_RECEIVER_REGISTER:default}
- default:
-
-receiver-trace:
- selector: ${SW_RECEIVER_TRACE:default}
- default:
- sampleRate: ${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 1/10000. 10000 means 100% sample in default.
- slowDBAccessThreshold: ${SW_SLOW_DB_THRESHOLD:default:200,mongodb:100} # The slow database access thresholds. Unit ms.
-
-receiver-jvm:
- selector: ${SW_RECEIVER_JVM:default}
- default:
-
-receiver-clr:
- selector: ${SW_RECEIVER_CLR:default}
- default:
-
-receiver-profile:
- selector: ${SW_RECEIVER_PROFILE:default}
- default:
-
-service-mesh:
- selector: ${SW_SERVICE_MESH:default}
- default:
-
-istio-telemetry:
- selector: ${SW_ISTIO_TELEMETRY:default}
- default:
-
-envoy-metric:
- selector: ${SW_ENVOY_METRIC:default}
- default:
- alsHTTPAnalysis: ${SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS:""}
-
-receiver_zipkin:
- selector: ${SW_RECEIVER_ZIPKIN:-}
- default:
- host: ${SW_RECEIVER_ZIPKIN_HOST:0.0.0.0}
- port: ${SW_RECEIVER_ZIPKIN_PORT:9411}
- contextPath: ${SW_RECEIVER_ZIPKIN_CONTEXT_PATH:/}
-
-receiver_jaeger:
- selector: ${SW_RECEIVER_JAEGER:-}
- default:
- gRPCHost: ${SW_RECEIVER_JAEGER_HOST:0.0.0.0}
- gRPCPort: ${SW_RECEIVER_JAEGER_PORT:14250}
-
-query:
- selector: ${SW_QUERY:graphql}
- graphql:
- path: ${SW_QUERY_GRAPHQL_PATH:/graphql}
-
-alarm:
- selector: ${SW_ALARM:default}
- default:
-
-telemetry:
- selector: ${SW_TELEMETRY:none}
- none:
- prometheus:
- host: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0}
- port: ${SW_TELEMETRY_PROMETHEUS_PORT:1234}
- so11y:
- prometheusExporterEnabled: ${SW_TELEMETRY_SO11Y_PROMETHEUS_ENABLED:true}
- prometheusExporterHost: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0}
- prometheusExporterPort: ${SW_TELEMETRY_PROMETHEUS_PORT:1234}
-
-receiver-so11y:
- selector: ${SW_RECEIVER_SO11Y:-}
- default:
-
-configuration:
- selector: ${SW_CONFIGURATION:none}
- none:
- apollo:
- apolloMeta: http://106.12.25.204:8080
- apolloCluster: default
- apolloEnv: ""
- appId: skywalking
- period: 5
- nacos:
- # Nacos Server Host
- serverAddr: 127.0.0.1
- # Nacos Server Port
- port: 8848
- # Nacos Configuration Group
- group: 'skywalking'
- # Nacos Configuration namespace
- namespace: ''
- # Unit seconds, sync period. Default fetch every 60 seconds.
- period : 60
- # the name of current cluster, set the name if you want to upstream system known.
- clusterName: "default"
- zookeeper:
- period : 60 # Unit seconds, sync period. Default fetch every 60 seconds.
- nameSpace: /default
- hostPort: localhost:2181
- # Retry Policy
- baseSleepTimeMs: 1000 # initial amount of time to wait between retries
- maxRetries: 3 # max number of times to retry
- etcd:
- period : 60 # Unit seconds, sync period. Default fetch every 60 seconds.
- group : 'skywalking'
- serverAddr: localhost:2379
- clusterName: "default"
- consul:
- # Consul host and ports, separated by comma, e.g. 1.2.3.4:8500,2.3.4.5:8500
- hostAndPorts: ${consul.address}
- # Sync period in seconds. Defaults to 60 seconds.
- period: 1
- # Consul aclToken
- #aclToken: ${consul.aclToken}
-
-exporter:
- selector: ${SW_EXPORTER:-}
- grpc:
- targetHost: ${SW_EXPORTER_GRPC_HOST:127.0.0.1}
- targetPort: ${SW_EXPORTER_GRPC_PORT:9870}
diff --git a/docs/en/setup/backend/backend-setup.md b/docs/en/setup/backend/backend-setup.md
index 3543c18..b873f2e 100755
--- a/docs/en/setup/backend/backend-setup.md
+++ b/docs/en/setup/backend/backend-setup.md
@@ -41,7 +41,7 @@ storage:
# other configurations
```
-1. **`core`** is the module.
+1. **`storage`** is the module.
1. **`selector`** selects one out of the all providers listed below, the unselected ones take no effect as if they were deleted.
1. **`default`** is the default implementor of core module.
1. `driver`, `url`, ... `metadataQueryMaxSize` are all setting items of the implementor.
diff --git a/docs/en/setup/service-agent/java-agent/README.md b/docs/en/setup/service-agent/java-agent/README.md
index 647531d..bcb16df 100755
--- a/docs/en/setup/service-agent/java-agent/README.md
+++ b/docs/en/setup/service-agent/java-agent/README.md
@@ -72,13 +72,13 @@ This is the properties list supported in `agent/config/agent.config`.
property key | Description | Default |
----------- | ---------- | --------- |
`agent.namespace` | Namespace isolates headers in cross process propagation. The HEADER name will be `HeaderName:Namespace`. | Not set |
-`agent.service_name` | Application(5.x)/Service(6.x) code is showed in sky-walking-ui. Suggestion: set a unique name for each service, service instance nodes share the same code, Max length is 50(UTF-8 char) | `Your_ApplicationName` |
+`agent.service_name` | The service name to represent a logic group providing the same capabilities/logic. Suggestion: set a unique name for every logic service group, service instance nodes share the same code, Max length is 50(UTF-8 char) | `Your_ApplicationName` |
`agent.sample_n_per_3_secs`|Negative or zero means off, by default.SAMPLE_N_PER_3_SECS means sampling N TraceSegment in 3 seconds tops.|Not set|
`agent.authentication`|Authentication active is based on backend setting, see application.yml for more details.For most scenarios, this needs backend extensions, only basic match auth provided in default implementation.|Not set|
`agent.span_limit_per_segment`|The max number of spans in a single segment. Through this config item, SkyWalking keep your application memory cost estimated.|300 |
`agent.ignore_suffix`|If the operation name of the first span is included in this set, this segment should be ignored.|Not set|
`agent.is_open_debugging_class`|If true, skywalking agent will save all instrumented classes files in `/debugging` folder. SkyWalking team may ask for these files in order to resolve compatible problem.|Not set|
-`agent.instance_name` |Instance name is the identity of an instance, should be unique in the service. If empty, SkyWalking agent will generate an 32-bit uuid. Default rule is `ServiceName` + UUID`@`hostname` as the instance name. Max length is 50(UTF-8 char)|`""`|
+`agent.instance_name` |Instance name is the identity of an instance, should be unique in the service. If empty, SkyWalking agent will generate an 32-bit uuid. Default, use `UUID`@`hostname` as the instance name. Max length is 50(UTF-8 char)|`""`|
`agent.instance_properties[key]=value` | Add service instance custom properties. | Not set|
`agent.cause_exception_depth`|How depth the agent goes, when log all cause exceptions.|`5`|
`agent.force_reconnection_period `|Force reconnection period of grpc, based on grpc_channel_check_interval.|`1`|
diff --git a/oap-server/server-bootstrap/pom.xml b/oap-server/server-bootstrap/pom.xml
index 33b67c4..5247fa2 100644
--- a/oap-server/server-bootstrap/pom.xml
+++ b/oap-server/server-bootstrap/pom.xml
@@ -231,7 +231,6 @@
<exclude>log4j2.xml</exclude>
<exclude>alarm-settings.yml</exclude>
<exclude>component-libraries.yml</exclude>
- <exclude>endpoint_naming_rules.properties</exclude>
<exclude>official_analysis.oal</exclude>
<exclude>gateways.yml</exclude>
<exclude>service-apdex-threshold.yml</exclude>
diff --git a/oap-server/server-bootstrap/src/main/resources/application.yml b/oap-server/server-bootstrap/src/main/resources/application.yml
index a15a1e9..47cc0aa 100755
--- a/oap-server/server-bootstrap/src/main/resources/application.yml
+++ b/oap-server/server-bootstrap/src/main/resources/application.yml
@@ -81,9 +81,11 @@ core:
# and it will cause more load for memory, network of OAP and storage.
# But, being activated, user could see the name in the storage entities, which make users easier to use 3rd party tool, such as Kibana->ES, to query the data by themselves.
activeExtraModelColumns: ${SW_CORE_ACTIVE_EXTRA_MODEL_COLUMNS:false}
- # The max length of the endpoint name.
- # In the current practice, we don't recommend the length over 190.
- endpointNameMaxLength: ${SW_CORE_ENDPOINT_NAME_MAX_LENGTH:150}
+ # The max length of service + instance names should be less than 200
+ serviceNameMaxLength: ${SW_SERVICE_NAME_MAX_LENGTH:70}
+ instanceNameMaxLength: ${INSTANCE_NAME_MAX_LENGTH:70}
+ # The max length of service + endpoint names should be less than 240
+ endpointNameMaxLength: ${ENDPOINT_NAME_MAX_LENGTH:150}
storage:
selector: ${SW_STORAGE:h2}
elasticsearch:
@@ -248,19 +250,19 @@ configuration:
# Nacos Configuration namespace
namespace: ''
# Unit seconds, sync period. Default fetch every 60 seconds.
- period : 60
+ period: 60
# the name of current cluster, set the name if you want to upstream system known.
clusterName: "default"
zookeeper:
- period : 60 # Unit seconds, sync period. Default fetch every 60 seconds.
+ period: 60 # Unit seconds, sync period. Default fetch every 60 seconds.
nameSpace: /default
hostPort: localhost:2181
# Retry Policy
baseSleepTimeMs: 1000 # initial amount of time to wait between retries
maxRetries: 3 # max number of times to retry
etcd:
- period : 60 # Unit seconds, sync period. Default fetch every 60 seconds.
- group : 'skywalking'
+ period: 60 # Unit seconds, sync period. Default fetch every 60 seconds.
+ group: 'skywalking'
serverAddr: localhost:2379
clusterName: "default"
consul:
diff --git a/oap-server/server-bootstrap/src/main/resources/endpoint_naming_rules.properties b/oap-server/server-bootstrap/src/main/resources/endpoint_naming_rules.properties
deleted file mode 100644
index 7fffa10..0000000
--- a/oap-server/server-bootstrap/src/main/resources/endpoint_naming_rules.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# 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.
-#
-#
-istio.mixer.v1.Mixer=.*/istio.mixer.v1.Mixer/.*
\ No newline at end of file
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java
index cb1c216..37bc7c8 100755
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java
@@ -26,6 +26,7 @@ import org.apache.skywalking.oap.server.core.command.CommandService;
import org.apache.skywalking.oap.server.core.config.ConfigService;
import org.apache.skywalking.oap.server.core.config.DownSamplingConfigService;
import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.core.profile.ProfileTaskMutationService;
import org.apache.skywalking.oap.server.core.query.AggregationQueryService;
import org.apache.skywalking.oap.server.core.query.AlarmQueryService;
@@ -53,7 +54,6 @@ import org.apache.skywalking.oap.server.library.module.ModuleDefine;
*/
public class CoreModule extends ModuleDefine {
public static final String NAME = "core";
- private static int ENDPOINT_NAME_MAX_LENGTH = 150;
public CoreModule() {
super(NAME);
@@ -64,6 +64,7 @@ public class CoreModule extends ModuleDefine {
List<Class> classes = new ArrayList<>();
classes.add(ConfigService.class);
classes.add(DownSamplingConfigService.class);
+ classes.add(NamingLengthControl.class);
classes.add(IComponentLibraryCatalogService.class);
classes.add(IWorkerInstanceGetter.class);
@@ -81,26 +82,6 @@ public class CoreModule extends ModuleDefine {
return classes.toArray(new Class[] {});
}
- /**
- * Format endpoint name by using the length config in the core module. This is a global rule, every place including
- * endpoint as the {@link org.apache.skywalking.oap.server.core.source.Source} should follow this for any core
- * module implementation.
- *
- * @param endpointName raw data, literal string.
- * @return the string, which length less than or equals {@link #ENDPOINT_NAME_MAX_LENGTH};
- */
- public static String formatEndpointName(String endpointName) {
- if (endpointName.length() > ENDPOINT_NAME_MAX_LENGTH) {
- return endpointName.substring(0, ENDPOINT_NAME_MAX_LENGTH);
- } else {
- return endpointName;
- }
- }
-
- public static void setEndpointNameMaxLength(final int endpointNameMaxLength) {
- ENDPOINT_NAME_MAX_LENGTH = endpointNameMaxLength;
- }
-
private void addProfileService(List<Class> classes) {
classes.add(ProfileTaskMutationService.class);
classes.add(ProfileTaskQueryService.class);
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java
index ece7ade..933024c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java
@@ -21,72 +21,55 @@ package org.apache.skywalking.oap.server.core;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
-import lombok.Setter;
import org.apache.skywalking.oap.server.core.source.ScopeDefaultColumn;
import org.apache.skywalking.oap.server.library.module.ModuleConfig;
@Getter
public class CoreModuleConfig extends ModuleConfig {
- @Setter
private String role = "Mixed";
- @Setter
private String nameSpace;
- @Setter
private String restHost;
- @Setter
private int restPort;
- @Setter
private int jettySelectors = 1;
- @Setter
private String restContextPath;
- @Setter
private String gRPCHost;
- @Setter
private int gRPCPort;
- @Setter
private boolean gRPCSslEnabled = false;
- @Setter
private String gRPCSslKeyPath;
- @Setter
private String gRPCSslCertChainPath;
- @Setter
private String gRPCSslTrustedCAPath;
- @Setter
private int maxConcurrentCallsPerConnection;
- @Setter
private int maxMessageSize;
- @Setter
private boolean enableDatabaseSession;
- @Setter
private int topNReportPeriod;
private final List<String> downsampling;
/**
* The period of doing data persistence. Unit is second.
*/
- @Setter
+
private long persistentPeriod = 3;
- @Setter
+
private boolean enableDataKeeperExecutor = true;
- @Setter
+
private int dataKeeperExecutePeriod = 5;
/**
* The time to live of all metrics data. Unit is day.
*/
- @Setter
+
private int metricsDataTTL = 3;
/**
* The time to live of all record data, including tracing. Unit is Day.
*/
- @Setter
+
private int recordDataTTL = 7;
- @Setter
+
private int gRPCThreadPoolSize;
- @Setter
+
private int gRPCThreadPoolQueueSize;
/**
* Timeout for cluster internal communication, in seconds.
*/
- @Setter
+
private int remoteTimeout = 20;
/**
* The size of network address alias.
@@ -114,6 +97,14 @@ public class CoreModuleConfig extends ModuleConfig {
*/
private boolean activeExtraModelColumns = false;
/**
+ * The max length of the service name.
+ */
+ private int serviceNameMaxLength = 70;
+ /**
+ * The max length of the service instance name.
+ */
+ private int instanceNameMaxLength = 70;
+ /**
* The max length of the endpoint name.
*
* <p>NOTICE</p>
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
index 0523cee..c23255c 100755
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
@@ -40,6 +40,7 @@ import org.apache.skywalking.oap.server.core.config.ComponentLibraryCatalogServi
import org.apache.skywalking.oap.server.core.config.ConfigService;
import org.apache.skywalking.oap.server.core.config.DownSamplingConfigService;
import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.core.oal.rt.OALEngine;
import org.apache.skywalking.oap.server.core.oal.rt.OALEngineLoader;
import org.apache.skywalking.oap.server.core.profile.ProfileTaskMutationService;
@@ -131,9 +132,11 @@ public class CoreModuleProvider extends ModuleProvider {
if (moduleConfig.isActiveExtraModelColumns()) {
DefaultScopeDefine.activeExtraModelColumns();
}
- if (moduleConfig.getEndpointNameMaxLength() > 0) {
- CoreModule.setEndpointNameMaxLength(moduleConfig.getEndpointNameMaxLength());
- }
+ this.registerServiceImplementation(NamingLengthControl.class, new NamingLengthControl(
+ moduleConfig.getServiceNameMaxLength(),
+ moduleConfig.getInstanceNameMaxLength(),
+ moduleConfig.getEndpointNameMaxLength()
+ ));
StreamAnnotationListener streamAnnotationListener = new StreamAnnotationListener(getManager());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/NamingLengthControl.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/NamingLengthControl.java
new file mode 100644
index 0000000..9bb3383
--- /dev/null
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/NamingLengthControl.java
@@ -0,0 +1,110 @@
+/*
+ * 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.oap.server.core.config;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.skywalking.oap.server.library.module.Service;
+
+/**
+ * NamingLengthControl provides the service to make the names of service, instance and endpoint following the length
+ * rules.
+ */
+@RequiredArgsConstructor
+@Slf4j
+public class NamingLengthControl implements Service {
+ private final int serviceNameMaxLength;
+ private final int instanceNameMaxLength;
+ private final int endpointNameMaxLength;
+
+ /**
+ * Format endpoint name by using the length config in the core module. This is a global rule, every place including
+ * service as the {@link org.apache.skywalking.oap.server.core.source.Source} should follow this for any core module
+ * implementation.
+ *
+ * @param serviceName raw data, literal string.
+ * @return the string, which length less than or equals {@link #serviceNameMaxLength};
+ */
+ public String formatServiceName(String serviceName) {
+ if (serviceName.length() > serviceNameMaxLength) {
+ final String rename = serviceName.substring(0, serviceNameMaxLength);
+ if (log.isDebugEnabled()) {
+ log.debug(
+ "Service {} has been renamed to {} due to length limitation {}",
+ serviceName,
+ rename,
+ serviceNameMaxLength
+ );
+ }
+ return rename;
+ } else {
+ return serviceName;
+ }
+ }
+
+ /**
+ * Format endpoint name by using the length config in the core module. This is a global rule, every place including
+ * instance as the {@link org.apache.skywalking.oap.server.core.source.Source} should follow this for any core
+ * module implementation.
+ *
+ * @param instanceName raw data, literal string.
+ * @return the string, which length less than or equals {@link #instanceNameMaxLength};
+ */
+ public String formatInstanceName(String instanceName) {
+ if (instanceName.length() > instanceNameMaxLength) {
+ final String rename = instanceName.substring(0, instanceNameMaxLength);
+ if (log.isDebugEnabled()) {
+ log.debug(
+ "Service instance {} has been renamed to {} due to length limitation {}",
+ instanceName,
+ rename,
+ serviceNameMaxLength
+ );
+ }
+ return rename;
+ } else {
+ return instanceName;
+ }
+ }
+
+ /**
+ * Format endpoint name by using the length config in the core module. This is a global rule, every place including
+ * endpoint as the {@link org.apache.skywalking.oap.server.core.source.Source} should follow this for any core
+ * module implementation.
+ *
+ * @param endpointName raw data, literal string.
+ * @return the string, which length less than or equals {@link #endpointNameMaxLength};
+ */
+ public String formatEndpointName(String endpointName) {
+ if (endpointName.length() > endpointNameMaxLength) {
+ final String rename = endpointName.substring(0, endpointNameMaxLength);
+ if (log.isDebugEnabled()) {
+ log.debug(
+ "Endpoint {} has been renamed to {} due to length limitation {}",
+ endpointName,
+ rename,
+ serviceNameMaxLength
+ );
+ }
+ return rename;
+ } else {
+ return endpointName;
+ }
+ }
+}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
index a09f4e6..058db36 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
@@ -20,8 +20,8 @@ package org.apache.skywalking.oap.server.core.source;
import lombok.Getter;
import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.util.StringUtil;
-import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
import org.apache.skywalking.oap.server.core.analysis.NodeType;
@@ -30,6 +30,7 @@ import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.EN
@ScopeDeclaration(id = ENDPOINT, name = "Endpoint", catalog = ENDPOINT_CATALOG_NAME)
@ScopeDefaultColumn.VirtualColumnDefinition(fieldName = "entityId", columnName = "entity_id", isID = true, type = String.class)
+@Slf4j
public class Endpoint extends Source {
private String entityId;
@@ -47,13 +48,9 @@ public class Endpoint extends Source {
}
@Getter
+ @Setter
@ScopeDefaultColumn.DefinedByField(columnName = "name", requireDynamicActive = true)
private String name;
-
- public void setName(final String name) {
- this.name = CoreModule.formatEndpointName(name);
- }
-
@Getter
@ScopeDefaultColumn.DefinedByField(columnName = "service_id")
private String serviceId;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
index c73a2fe..801b473 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
@@ -20,7 +20,6 @@ package org.apache.skywalking.oap.server.core.source;
import lombok.Getter;
import lombok.Setter;
-import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
import org.apache.skywalking.oap.server.core.analysis.NodeType;
@@ -43,13 +42,10 @@ public class EndpointRelation extends Source {
}
@Getter
+ @Setter
@ScopeDefaultColumn.DefinedByField(columnName = "source_endpoint_name")
private String endpoint;
- public void setEndpoint(final String endpoint) {
- this.endpoint = CoreModule.formatEndpointName(endpoint);
- }
-
@Getter
@ScopeDefaultColumn.DefinedByField(columnName = "service_id")
private String serviceId;
@@ -63,13 +59,9 @@ public class EndpointRelation extends Source {
@Setter
private String serviceInstanceName;
@Getter
+ @Setter
@ScopeDefaultColumn.DefinedByField(columnName = "child_endpoint_name")
private String childEndpoint;
-
- public void setChildEndpoint(final String childEndpoint) {
- this.childEndpoint = CoreModule.formatEndpointName(childEndpoint);
- }
-
@Getter
@ScopeDefaultColumn.DefinedByField(columnName = "child_service_id")
private String childServiceId;
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
index 4d4c6f4..0094c9a 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
@@ -26,6 +26,6 @@ public class CoreModuleTest {
public void testOpenServiceList() {
CoreModule coreModule = new CoreModule();
- Assert.assertEquals(26, coreModule.services().length);
+ Assert.assertEquals(27, coreModule.services().length);
}
}
diff --git a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/K8sALSServiceMeshHTTPAnalysis.java b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/K8sALSServiceMeshHTTPAnalysis.java
index eb7fdd2..caeca40 100644
--- a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/K8sALSServiceMeshHTTPAnalysis.java
+++ b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/K8sALSServiceMeshHTTPAnalysis.java
@@ -209,7 +209,7 @@ public class K8sALSServiceMeshHTTPAnalysis implements ALSHTTPAnalysis {
if (downstreamService.equals(ServiceMetaInfo.UNKNOWN)) {
// Ingress -> sidecar(server side)
// Mesh telemetry without source, the relation would be generated.
- ServiceMeshMetric metric = ServiceMeshMetric.newBuilder()
+ ServiceMeshMetric.Builder metric = ServiceMeshMetric.newBuilder()
.setStartTime(startTime)
.setEndTime(startTime + duration)
.setDestServiceName(localService.getServiceName())
@@ -219,14 +219,13 @@ public class K8sALSServiceMeshHTTPAnalysis implements ALSHTTPAnalysis {
.setResponseCode(Math.toIntExact(responseCode))
.setStatus(status)
.setProtocol(protocol)
- .setDetectPoint(DetectPoint.server)
- .build();
+ .setDetectPoint(DetectPoint.server);
logger.debug("Transformed ingress->sidecar inbound mesh metric {}", metric);
forward(metric);
} else {
// sidecar -> sidecar(server side)
- ServiceMeshMetric metric = ServiceMeshMetric.newBuilder()
+ ServiceMeshMetric.Builder metric = ServiceMeshMetric.newBuilder()
.setStartTime(startTime)
.setEndTime(startTime + duration)
.setSourceServiceName(downstreamService.getServiceName())
@@ -238,8 +237,7 @@ public class K8sALSServiceMeshHTTPAnalysis implements ALSHTTPAnalysis {
.setResponseCode(Math.toIntExact(responseCode))
.setStatus(status)
.setProtocol(protocol)
- .setDetectPoint(DetectPoint.server)
- .build();
+ .setDetectPoint(DetectPoint.server);
logger.debug("Transformed sidecar->sidecar(server side) inbound mesh metric {}", metric);
forward(metric);
@@ -251,7 +249,7 @@ public class K8sALSServiceMeshHTTPAnalysis implements ALSHTTPAnalysis {
.getAddress(), upstreamRemoteAddress.getSocketAddress()
.getPortValue());
- ServiceMeshMetric metric = ServiceMeshMetric.newBuilder()
+ ServiceMeshMetric.Builder metric = ServiceMeshMetric.newBuilder()
.setStartTime(startTime)
.setEndTime(startTime + duration)
.setSourceServiceName(downstreamService.getServiceName())
@@ -263,8 +261,7 @@ public class K8sALSServiceMeshHTTPAnalysis implements ALSHTTPAnalysis {
.setResponseCode(Math.toIntExact(responseCode))
.setStatus(status)
.setProtocol(protocol)
- .setDetectPoint(DetectPoint.client)
- .build();
+ .setDetectPoint(DetectPoint.client);
logger.debug("Transformed sidecar->sidecar(server side) inbound mesh metric {}", metric);
forward(metric);
@@ -312,7 +309,7 @@ public class K8sALSServiceMeshHTTPAnalysis implements ALSHTTPAnalysis {
}
boolean status = responseCode >= 200 && responseCode < 400;
- ServiceMeshMetric metric = ServiceMeshMetric.newBuilder()
+ ServiceMeshMetric.Builder metric = ServiceMeshMetric.newBuilder()
.setStartTime(startTime)
.setEndTime(startTime + duration)
.setSourceServiceName(outside.getServiceName())
@@ -324,8 +321,7 @@ public class K8sALSServiceMeshHTTPAnalysis implements ALSHTTPAnalysis {
.setResponseCode(Math.toIntExact(responseCode))
.setStatus(status)
.setProtocol(protocol)
- .setDetectPoint(DetectPoint.server)
- .build();
+ .setDetectPoint(DetectPoint.server);
logger.debug("Transformed ingress inbound mesh metric {}", metric);
forward(metric);
@@ -337,7 +333,7 @@ public class K8sALSServiceMeshHTTPAnalysis implements ALSHTTPAnalysis {
long outboundStartTime = startTime + formatAsLong(properties.getTimeToFirstUpstreamTxByte());
long outboundEndTime = startTime + formatAsLong(properties.getTimeToLastUpstreamRxByte());
- ServiceMeshMetric outboundMetric = ServiceMeshMetric.newBuilder()
+ ServiceMeshMetric.Builder outboundMetric = ServiceMeshMetric.newBuilder()
.setStartTime(outboundStartTime)
.setEndTime(outboundEndTime)
.setSourceServiceName(ingress.getServiceName())
@@ -349,8 +345,7 @@ public class K8sALSServiceMeshHTTPAnalysis implements ALSHTTPAnalysis {
.setResponseCode(Math.toIntExact(responseCode))
.setStatus(status)
.setProtocol(protocol)
- .setDetectPoint(DetectPoint.client)
- .build();
+ .setDetectPoint(DetectPoint.client);
logger.debug("Transformed ingress outbound mesh metric {}", outboundMetric);
forward(outboundMetric);
@@ -391,7 +386,7 @@ public class K8sALSServiceMeshHTTPAnalysis implements ALSHTTPAnalysis {
return ServiceMetaInfo.UNKNOWN;
}
- protected void forward(ServiceMeshMetric metric) {
+ protected void forward(ServiceMeshMetric.Builder metric) {
TelemetryDataDispatcher.process(metric);
}
diff --git a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/envoy/als/K8sHTTPAnalysisTest.java b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/envoy/als/K8sHTTPAnalysisTest.java
index 4c7e125..e6c797f 100644
--- a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/envoy/als/K8sHTTPAnalysisTest.java
+++ b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/envoy/als/K8sHTTPAnalysisTest.java
@@ -76,12 +76,12 @@ public class K8sHTTPAnalysisTest {
Assert.assertEquals(2, analysis.metrics.size());
- ServiceMeshMetric incoming = analysis.metrics.get(0);
+ ServiceMeshMetric.Builder incoming = analysis.metrics.get(0);
Assert.assertEquals("UNKNOWN", incoming.getSourceServiceName());
Assert.assertEquals("ingress", incoming.getDestServiceName());
Assert.assertEquals(DetectPoint.server, incoming.getDetectPoint());
- ServiceMeshMetric outgoing = analysis.metrics.get(1);
+ ServiceMeshMetric.Builder outgoing = analysis.metrics.get(1);
Assert.assertEquals("ingress", outgoing.getSourceServiceName());
Assert.assertEquals("productpage", outgoing.getDestServiceName());
Assert.assertEquals(DetectPoint.client, outgoing.getDetectPoint());
@@ -99,7 +99,7 @@ public class K8sHTTPAnalysisTest {
Assert.assertEquals(1, analysis.metrics.size());
- ServiceMeshMetric incoming = analysis.metrics.get(0);
+ ServiceMeshMetric.Builder incoming = analysis.metrics.get(0);
Assert.assertEquals("", incoming.getSourceServiceName());
Assert.assertEquals("productpage", incoming.getDestServiceName());
Assert.assertEquals(DetectPoint.server, incoming.getDetectPoint());
@@ -117,7 +117,7 @@ public class K8sHTTPAnalysisTest {
Assert.assertEquals(1, analysis.metrics.size());
- ServiceMeshMetric incoming = analysis.metrics.get(0);
+ ServiceMeshMetric.Builder incoming = analysis.metrics.get(0);
Assert.assertEquals("productpage", incoming.getSourceServiceName());
Assert.assertEquals("review", incoming.getDestServiceName());
Assert.assertEquals(DetectPoint.server, incoming.getDetectPoint());
@@ -135,7 +135,7 @@ public class K8sHTTPAnalysisTest {
Assert.assertEquals(1, analysis.metrics.size());
- ServiceMeshMetric incoming = analysis.metrics.get(0);
+ ServiceMeshMetric.Builder incoming = analysis.metrics.get(0);
Assert.assertEquals("productpage", incoming.getSourceServiceName());
Assert.assertEquals("detail", incoming.getDestServiceName());
Assert.assertEquals(DetectPoint.client, incoming.getDetectPoint());
@@ -143,7 +143,7 @@ public class K8sHTTPAnalysisTest {
}
public static class MockK8sAnalysis extends K8sALSServiceMeshHTTPAnalysis {
- private List<ServiceMeshMetric> metrics = new ArrayList<>();
+ private List<ServiceMeshMetric.Builder> metrics = new ArrayList<>();
@Override
public void init(EnvoyMetricReceiverConfig config) {
@@ -156,7 +156,7 @@ public class K8sHTTPAnalysisTest {
}
@Override
- protected void forward(ServiceMeshMetric metric) {
+ protected void forward(ServiceMeshMetric.Builder metric) {
metrics.add(metric);
}
}
diff --git a/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/handler/CLRMetricReportServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/handler/CLRMetricReportServiceHandler.java
index 26d3aaf..dea57b5 100644
--- a/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/handler/CLRMetricReportServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/handler/CLRMetricReportServiceHandler.java
@@ -19,37 +19,42 @@
package org.apache.skywalking.oap.server.receiver.clr.provider.handler;
import io.grpc.stub.StreamObserver;
+import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.network.common.v3.Commands;
import org.apache.skywalking.apm.network.language.agent.v3.CLRMetricCollection;
import org.apache.skywalking.apm.network.language.agent.v3.CLRMetricReportServiceGrpc;
+import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
-import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-/**
- *
- **/
+@Slf4j
public class CLRMetricReportServiceHandler extends CLRMetricReportServiceGrpc.CLRMetricReportServiceImplBase implements GRPCHandler {
-
- private static final Logger logger = LoggerFactory.getLogger(CLRMetricReportServiceHandler.class);
-
private final CLRSourceDispatcher clrSourceDispatcher;
+ private final NamingLengthControl namingLengthControl;
public CLRMetricReportServiceHandler(ModuleManager moduleManager) {
clrSourceDispatcher = new CLRSourceDispatcher(moduleManager);
+ this.namingLengthControl = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NamingLengthControl.class);
}
@Override
public void collect(CLRMetricCollection request, StreamObserver<Commands> responseObserver) {
- if (logger.isDebugEnabled()) {
- logger.debug("receive the clr metrics from service instance, id: {}", request.getServiceInstance());
+ if (log.isDebugEnabled()) {
+ log.debug("receive the clr metrics from service instance, id: {}", request.getServiceInstance());
}
+ final CLRMetricCollection.Builder builder = request.toBuilder();
+ builder.setService(namingLengthControl.formatServiceName(builder.getService()));
+ builder.setServiceInstance(namingLengthControl.formatInstanceName(builder.getServiceInstance()));
+
request.getMetricsList().forEach(metrics -> {
long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(metrics.getTime());
- clrSourceDispatcher.sendMetric(request.getService(), request.getServiceInstance(), minuteTimeBucket, metrics);
+ clrSourceDispatcher.sendMetric(
+ request.getService(), request.getServiceInstance(), minuteTimeBucket, metrics);
});
responseObserver.onNext(Commands.newBuilder().build());
diff --git a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryGRPCHandler.java b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryGRPCHandler.java
index 2b587e1..4299d26 100644
--- a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryGRPCHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryGRPCHandler.java
@@ -117,7 +117,7 @@ public class IstioTelemetryGRPCHandler extends HandleMetricServiceGrpc.HandleMet
destServiceName = string(i, "destinationService");
}
- ServiceMeshMetric metrics = ServiceMeshMetric.newBuilder()
+ ServiceMeshMetric.Builder metrics = ServiceMeshMetric.newBuilder()
.setStartTime(requestTime.toEpochMilli())
.setEndTime(responseTime.toEpochMilli())
.setSourceServiceName(sourceServiceName)
@@ -129,8 +129,7 @@ public class IstioTelemetryGRPCHandler extends HandleMetricServiceGrpc.HandleMet
.setResponseCode(Math.toIntExact(responseCode))
.setStatus(status)
.setProtocol(netProtocol)
- .setDetectPoint(detectPoint)
- .build();
+ .setDetectPoint(detectPoint);
logger.debug("Transformed metrics {}", metrics);
TelemetryDataDispatcher.process(metrics);
diff --git a/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricReportServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricReportServiceHandler.java
index 97ec891..3b874f4 100644
--- a/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricReportServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricReportServiceHandler.java
@@ -23,15 +23,21 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.network.common.v3.Commands;
import org.apache.skywalking.apm.network.language.agent.v3.JVMMetricCollection;
import org.apache.skywalking.apm.network.language.agent.v3.JVMMetricReportServiceGrpc;
+import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
@Slf4j
public class JVMMetricReportServiceHandler extends JVMMetricReportServiceGrpc.JVMMetricReportServiceImplBase implements GRPCHandler {
private final JVMSourceDispatcher jvmSourceDispatcher;
+ private final NamingLengthControl namingLengthControl;
public JVMMetricReportServiceHandler(ModuleManager moduleManager) {
this.jvmSourceDispatcher = new JVMSourceDispatcher(moduleManager);
+ this.namingLengthControl = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NamingLengthControl.class);
}
@Override
@@ -43,9 +49,12 @@ public class JVMMetricReportServiceHandler extends JVMMetricReportServiceGrpc.JV
request.getServiceInstance()
);
}
+ final JVMMetricCollection.Builder builder = request.toBuilder();
+ builder.setService(namingLengthControl.formatServiceName(builder.getService()));
+ builder.setServiceInstance(namingLengthControl.formatInstanceName(builder.getServiceInstance()));
- request.getMetricsList().forEach(jvmMetric -> {
- jvmSourceDispatcher.sendMetric(request.getService(), request.getServiceInstance(), jvmMetric);
+ builder.getMetricsList().forEach(jvmMetric -> {
+ jvmSourceDispatcher.sendMetric(builder.getService(), builder.getServiceInstance(), jvmMetric);
});
responseObserver.onNext(Commands.newBuilder().build());
diff --git a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/grpc/ManagementServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/grpc/ManagementServiceHandler.java
index f41c202..f963ceb 100644
--- a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/grpc/ManagementServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/grpc/ManagementServiceHandler.java
@@ -33,6 +33,7 @@ import org.apache.skywalking.oap.server.core.analysis.IDManager;
import org.apache.skywalking.oap.server.core.analysis.NodeType;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.core.source.ServiceInstanceUpdate;
import org.apache.skywalking.oap.server.core.source.ServiceUpdate;
import org.apache.skywalking.oap.server.core.source.SourceReceiver;
@@ -41,17 +42,23 @@ import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
public class ManagementServiceHandler extends ManagementServiceGrpc.ManagementServiceImplBase implements GRPCHandler {
private final SourceReceiver sourceReceiver;
+ private final NamingLengthControl namingLengthControl;
public ManagementServiceHandler(ModuleManager moduleManager) {
this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
+ this.namingLengthControl = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NamingLengthControl.class);
}
@Override
public void reportInstanceProperties(final InstanceProperties request,
final StreamObserver<Commands> responseObserver) {
ServiceInstanceUpdate serviceInstanceUpdate = new ServiceInstanceUpdate();
- serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(request.getService(), NodeType.Normal));
- serviceInstanceUpdate.setName(request.getServiceInstance());
+ final String serviceName = namingLengthControl.formatServiceName(request.getService());
+ final String instanceName = namingLengthControl.formatInstanceName(request.getServiceInstance());
+ serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(serviceName, NodeType.Normal));
+ serviceInstanceUpdate.setName(instanceName);
JsonObject properties = new JsonObject();
List<String> ipv4List = new ArrayList<>();
@@ -75,14 +82,17 @@ public class ManagementServiceHandler extends ManagementServiceGrpc.ManagementSe
@Override
public void keepAlive(final InstancePingPkg request, final StreamObserver<Commands> responseObserver) {
final long timeBucket = TimeBucket.getTimeBucket(System.currentTimeMillis(), DownSampling.Minute);
+ final String serviceName = namingLengthControl.formatServiceName(request.getService());
+ final String instanceName = namingLengthControl.formatInstanceName(request.getServiceInstance());
+
ServiceInstanceUpdate serviceInstanceUpdate = new ServiceInstanceUpdate();
- serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(request.getService(), NodeType.Normal));
- serviceInstanceUpdate.setName(request.getServiceInstance());
+ serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(serviceName, NodeType.Normal));
+ serviceInstanceUpdate.setName(instanceName);
serviceInstanceUpdate.setTimeBucket(timeBucket);
sourceReceiver.receive(serviceInstanceUpdate);
ServiceUpdate serviceUpdate = new ServiceUpdate();
- serviceUpdate.setName(request.getService());
+ serviceUpdate.setName(serviceName);
serviceUpdate.setNodeType(NodeType.Normal);
serviceUpdate.setTimeBucket(timeBucket);
sourceReceiver.receive(serviceUpdate);
diff --git a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceKeepAliveHandler.java b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceKeepAliveHandler.java
index 0a18c9e..20ef0d0 100644
--- a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceKeepAliveHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceKeepAliveHandler.java
@@ -29,6 +29,7 @@ import org.apache.skywalking.oap.server.core.analysis.DownSampling;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
import org.apache.skywalking.oap.server.core.analysis.NodeType;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.core.source.ServiceInstanceUpdate;
import org.apache.skywalking.oap.server.core.source.ServiceUpdate;
import org.apache.skywalking.oap.server.core.source.SourceReceiver;
@@ -39,10 +40,14 @@ import org.apache.skywalking.oap.server.library.util.ProtoBufJsonUtils;
public class ManagementServiceKeepAliveHandler extends JettyJsonHandler {
private final SourceReceiver sourceReceiver;
+ private final NamingLengthControl namingLengthControl;
private final Gson gson = new Gson();
public ManagementServiceKeepAliveHandler(ModuleManager moduleManager) {
this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
+ this.namingLengthControl = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NamingLengthControl.class);
}
@Override
@@ -55,16 +60,18 @@ public class ManagementServiceKeepAliveHandler extends JettyJsonHandler {
final InstanceProperties.Builder request = InstanceProperties.newBuilder();
ProtoBufJsonUtils.fromJSON(getJsonBody(req), request);
+ final String serviceName = namingLengthControl.formatServiceName(request.getService());
+ final String instanceName = namingLengthControl.formatInstanceName(request.getServiceInstance());
+
final long timeBucket = TimeBucket.getTimeBucket(System.currentTimeMillis(), DownSampling.Minute);
ServiceInstanceUpdate serviceInstanceUpdate = new ServiceInstanceUpdate();
- serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(request.getService(), NodeType.Normal));
- serviceInstanceUpdate.setName(request.getServiceInstance());
- serviceInstanceUpdate.setTimeBucket(
- timeBucket);
+ serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(serviceName, NodeType.Normal));
+ serviceInstanceUpdate.setName(instanceName);
+ serviceInstanceUpdate.setTimeBucket(timeBucket);
sourceReceiver.receive(serviceInstanceUpdate);
ServiceUpdate serviceUpdate = new ServiceUpdate();
- serviceUpdate.setName(request.getService());
+ serviceUpdate.setName(serviceName);
serviceUpdate.setNodeType(NodeType.Normal);
serviceUpdate.setTimeBucket(timeBucket);
sourceReceiver.receive(serviceUpdate);
diff --git a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceReportPropertiesHandler.java b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceReportPropertiesHandler.java
index b46d1cc..3801e0c 100644
--- a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceReportPropertiesHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceReportPropertiesHandler.java
@@ -31,9 +31,10 @@ import org.apache.skywalking.apm.network.management.v3.InstanceProperties;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.analysis.DownSampling;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
+import org.apache.skywalking.oap.server.core.analysis.NodeType;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic;
-import org.apache.skywalking.oap.server.core.analysis.NodeType;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.core.source.ServiceInstanceUpdate;
import org.apache.skywalking.oap.server.core.source.SourceReceiver;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
@@ -43,10 +44,14 @@ import org.apache.skywalking.oap.server.library.util.ProtoBufJsonUtils;
public class ManagementServiceReportPropertiesHandler extends JettyJsonHandler {
private final SourceReceiver sourceReceiver;
+ private final NamingLengthControl namingLengthControl;
private final Gson gson = new Gson();
public ManagementServiceReportPropertiesHandler(ModuleManager moduleManager) {
this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
+ this.namingLengthControl = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NamingLengthControl.class);
}
@Override
@@ -59,9 +64,12 @@ public class ManagementServiceReportPropertiesHandler extends JettyJsonHandler {
final InstanceProperties.Builder request = InstanceProperties.newBuilder();
ProtoBufJsonUtils.fromJSON(getJsonBody(req), request);
+ final String serviceName = namingLengthControl.formatServiceName(request.getService());
+ final String instanceName = namingLengthControl.formatInstanceName(request.getServiceInstance());
+
ServiceInstanceUpdate serviceInstanceUpdate = new ServiceInstanceUpdate();
- serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(request.getService(), NodeType.Normal));
- serviceInstanceUpdate.setName(request.getServiceInstance());
+ serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(serviceName, NodeType.Normal));
+ serviceInstanceUpdate.setName(instanceName);
JsonObject properties = new JsonObject();
List<String> ipv4List = new ArrayList<>();
diff --git a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/EndpointNameFormater.java b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/EndpointNameFormater.java
deleted file mode 100644
index 203a13c..0000000
--- a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/EndpointNameFormater.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.aop.server.receiver.mesh;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.ConcurrentHashMap;
-import org.apache.skywalking.apm.util.StringFormatGroup;
-import org.apache.skywalking.oap.server.library.util.ResourceUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class EndpointNameFormater {
- private static final Logger logger = LoggerFactory.getLogger(EndpointNameFormater.class);
- private static Map<String, StringFormatGroup> ALL_RULES = new ConcurrentHashMap<>();
-
- private static void init(String service) {
- if (ALL_RULES.containsKey(service)) {
- return;
- }
- StringFormatGroup endpointRule = new StringFormatGroup();
- Properties properties = new Properties();
- try {
- InputStream stream = ResourceUtils.class.getClassLoader()
- .getResourceAsStream(service + "_endpoint_naming_rules.properties");
- if (stream == null) {
- logger.info("{}_endpoint_naming_rules.properties not found. Try to find global endpoint rule file.", service);
- stream = ResourceUtils.class.getClassLoader().getResourceAsStream("endpoint_naming_rules.properties");
- }
-
- if (stream == null) {
- logger.info("endpoint_naming_rules.properties not found. No endpoint naming setup.");
- } else {
- properties.load(stream);
- properties.forEach((key, value) -> {
- endpointRule.addRule((String) key, (String) value);
- logger.debug("endpoint naming rule of service {} found, name[{}] and rule[{}]", service, key, value);
- });
- }
- } catch (IOException e) {
- logger.info("{}_endpoint_rules.properties not found. No endpoint naming setup.", service);
- }
-
- ALL_RULES.put(service, endpointRule);
- logger.debug("endpoint naming rules of service {} added. {}", service, endpointRule);
-
- }
-
- public static StringFormatGroup.FormatResult format(String service, String endpointName) {
- init(service);
- return ALL_RULES.get(service).format(endpointName);
- }
-}
diff --git a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/MeshGRPCHandler.java b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/MeshGRPCHandler.java
index de7c3dc..eb994a7 100644
--- a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/MeshGRPCHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/MeshGRPCHandler.java
@@ -42,7 +42,7 @@ public class MeshGRPCHandler extends ServiceMeshMetricServiceGrpc.ServiceMeshMet
logger.debug("Received mesh metrics: {}", metrics);
}
- TelemetryDataDispatcher.process(metrics);
+ TelemetryDataDispatcher.process(metrics.toBuilder());
}
@Override
diff --git a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
index 61b2a77..7305398 100644
--- a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
+++ b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
@@ -21,12 +21,12 @@ package org.apache.skywalking.aop.server.receiver.mesh;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.network.servicemesh.v3.Protocol;
import org.apache.skywalking.apm.network.servicemesh.v3.ServiceMeshMetric;
-import org.apache.skywalking.apm.util.StringFormatGroup;
import org.apache.skywalking.apm.util.StringUtil;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
import org.apache.skywalking.oap.server.core.analysis.NodeType;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.core.source.All;
import org.apache.skywalking.oap.server.core.source.DetectPoint;
import org.apache.skywalking.oap.server.core.source.Endpoint;
@@ -50,7 +50,7 @@ import org.apache.skywalking.oap.server.telemetry.api.MetricsTag;
@Slf4j
public class TelemetryDataDispatcher {
private static SourceReceiver SOURCE_RECEIVER;
-
+ private static NamingLengthControl NAME_LENGTH_CONTROL;
private static HistogramMetrics MESH_ANALYSIS_METRICS;
private TelemetryDataDispatcher() {
@@ -61,25 +61,32 @@ public class TelemetryDataDispatcher {
MetricsCreator metricsCreator = moduleManager.find(TelemetryModule.NAME)
.provider()
.getService(MetricsCreator.class);
+ NAME_LENGTH_CONTROL = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NamingLengthControl.class);
MESH_ANALYSIS_METRICS = metricsCreator.createHistogramMetric(
"mesh_analysis_latency", "The process latency of service mesh telemetry", MetricsTag.EMPTY_KEY,
MetricsTag.EMPTY_VALUE
);
}
- public static void process(ServiceMeshMetric data) {
+ public static void process(ServiceMeshMetric.Builder data) {
HistogramMetrics.Timer timer = MESH_ANALYSIS_METRICS.createTimer();
try {
- String service = data.getDestServiceName();
- String endpointName = data.getEndpoint();
- StringFormatGroup.FormatResult formatResult = EndpointNameFormater.format(service, endpointName);
- if (formatResult.isMatch()) {
- data = data.toBuilder().setEndpoint(formatResult.getName()).build();
+ if (data.getSourceServiceName() != null) {
+ data.setSourceServiceName(NAME_LENGTH_CONTROL.formatServiceName(data.getSourceServiceName()));
+ }
+ if (data.getSourceServiceInstance() != null) {
+ data.setSourceServiceInstance(NAME_LENGTH_CONTROL.formatInstanceName(data.getSourceServiceInstance()));
+ }
+ if (data.getDestServiceName() != null) {
+ data.setDestServiceName(NAME_LENGTH_CONTROL.formatServiceName(data.getDestServiceName()));
+ }
+ if (data.getDestServiceInstance() != null) {
+ data.setDestServiceInstance(NAME_LENGTH_CONTROL.formatInstanceName(data.getDestServiceInstance()));
}
- if (log.isDebugEnabled()) {
- if (formatResult.isMatch()) {
- log.debug("Endpoint {} is renamed to {}", endpointName, data.getEndpoint());
- }
+ if (data.getEndpoint() != null) {
+ data.setEndpoint(NAME_LENGTH_CONTROL.formatEndpointName(data.getEndpoint()));
}
doDispatch(data);
@@ -88,7 +95,7 @@ public class TelemetryDataDispatcher {
}
}
- static void doDispatch(ServiceMeshMetric metrics) {
+ static void doDispatch(ServiceMeshMetric.Builder metrics) {
long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(metrics.getStartTime());
heartbeat(metrics, minuteTimeBucket);
@@ -107,7 +114,7 @@ public class TelemetryDataDispatcher {
}
}
- private static void heartbeat(ServiceMeshMetric metrics, long minuteTimeBucket) {
+ private static void heartbeat(ServiceMeshMetric.Builder metrics, long minuteTimeBucket) {
// source
final String sourceServiceName = metrics.getSourceServiceName();
final String sourceServiceInstance = metrics.getSourceServiceInstance();
@@ -134,7 +141,7 @@ public class TelemetryDataDispatcher {
}
}
- private static void toAll(ServiceMeshMetric metrics, long minuteTimeBucket) {
+ private static void toAll(ServiceMeshMetric.Builder metrics, long minuteTimeBucket) {
All all = new All();
all.setTimeBucket(minuteTimeBucket);
all.setName(metrics.getDestServiceName());
@@ -148,7 +155,7 @@ public class TelemetryDataDispatcher {
SOURCE_RECEIVER.receive(all);
}
- private static void toService(ServiceMeshMetric metrics, long minuteTimeBucket) {
+ private static void toService(ServiceMeshMetric.Builder metrics, long minuteTimeBucket) {
Service service = new Service();
service.setTimeBucket(minuteTimeBucket);
service.setName(metrics.getDestServiceName());
@@ -163,7 +170,7 @@ public class TelemetryDataDispatcher {
SOURCE_RECEIVER.receive(service);
}
- private static void toServiceRelation(ServiceMeshMetric metrics, long minuteTimeBucket) {
+ private static void toServiceRelation(ServiceMeshMetric.Builder metrics, long minuteTimeBucket) {
ServiceRelation serviceRelation = new ServiceRelation();
serviceRelation.setTimeBucket(minuteTimeBucket);
serviceRelation.setSourceServiceName(metrics.getSourceServiceName());
@@ -183,7 +190,7 @@ public class TelemetryDataDispatcher {
SOURCE_RECEIVER.receive(serviceRelation);
}
- private static void toServiceInstance(ServiceMeshMetric metrics, long minuteTimeBucket) {
+ private static void toServiceInstance(ServiceMeshMetric.Builder metrics, long minuteTimeBucket) {
ServiceInstance serviceInstance = new ServiceInstance();
serviceInstance.setTimeBucket(minuteTimeBucket);
serviceInstance.setName(metrics.getDestServiceInstance());
@@ -198,7 +205,7 @@ public class TelemetryDataDispatcher {
SOURCE_RECEIVER.receive(serviceInstance);
}
- private static void toServiceInstanceRelation(ServiceMeshMetric metrics, long minuteTimeBucket) {
+ private static void toServiceInstanceRelation(ServiceMeshMetric.Builder metrics, long minuteTimeBucket) {
ServiceInstanceRelation serviceRelation = new ServiceInstanceRelation();
serviceRelation.setTimeBucket(minuteTimeBucket);
serviceRelation.setSourceServiceInstanceName(metrics.getSourceServiceInstance());
@@ -218,7 +225,7 @@ public class TelemetryDataDispatcher {
SOURCE_RECEIVER.receive(serviceRelation);
}
- private static void toEndpoint(ServiceMeshMetric metrics, long minuteTimeBucket) {
+ private static void toEndpoint(ServiceMeshMetric.Builder metrics, long minuteTimeBucket) {
Endpoint endpoint = new Endpoint();
endpoint.setTimeBucket(minuteTimeBucket);
endpoint.setName(metrics.getEndpoint());
diff --git a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/mesh/MeshDataMock.java b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/mesh/MeshDataMock.java
index a3f017b..13a5927 100644
--- a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/mesh/MeshDataMock.java
+++ b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/mesh/MeshDataMock.java
@@ -43,9 +43,9 @@ public class MeshDataMock {
meshObserver.onNext(ServiceMeshMetric.newBuilder()
.setSourceServiceName("e2e-test-source-service")
.setSourceServiceInstance("e2e-test-source-service-instance")
- .setDestServiceName("e2e-test-dest-service")
- .setDestServiceInstance("e2e-test-dest-service-instance")
- .setEndpoint("e2e/test")
+ .setDestServiceName("Extra model column are the column defined by in the codes, These columns of model are not required logically in aggregation or further query,")
+ .setDestServiceInstance("Extra model column are the column defined by in the codes, These columns of model are not required logically in aggregation or further query,")
+ .setEndpoint("Extra model column are the column defined by in the codes, These columns of model are not required logically in aggregation or further query,")
.setStartTime(System.currentTimeMillis() - 1000L)
.setEndTime(System.currentTimeMillis() - 500L + i)
.setLatency(2000)
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
index 9d0ef0f..664ada1 100755
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
@@ -45,6 +45,7 @@ public class TraceModuleProvider extends ModuleProvider {
private final TraceServiceModuleConfig moduleConfig;
private DBLatencyThresholdsAndWatcher thresholds;
private UninstrumentedGatewaysConfig uninstrumentedGatewaysConfig;
+ private SegmentParserServiceImpl segmentParserService;
public TraceModuleProvider() {
this.moduleConfig = new TraceServiceModuleConfig();
@@ -74,8 +75,8 @@ public class TraceModuleProvider extends ModuleProvider {
moduleConfig.setDbLatencyThresholdsAndWatcher(thresholds);
moduleConfig.setUninstrumentedGatewaysConfig(uninstrumentedGatewaysConfig);
- this.registerServiceImplementation(
- ISegmentParserService.class, new SegmentParserServiceImpl(getManager(), listenerManager(), moduleConfig));
+ segmentParserService = new SegmentParserServiceImpl(getManager(), moduleConfig);
+ this.registerServiceImplementation(ISegmentParserService.class, segmentParserService);
}
@Override
@@ -93,6 +94,7 @@ public class TraceModuleProvider extends ModuleProvider {
dynamicConfigurationService.registerConfigChangeWatcher(thresholds);
dynamicConfigurationService.registerConfigChangeWatcher(uninstrumentedGatewaysConfig);
+ segmentParserService.setListenerManager(listenerManager());
grpcHandlerRegister.addHandler(
new TraceSegmentReportServiceHandler(getManager(), listenerManager(), moduleConfig));
@@ -118,10 +120,10 @@ public class TraceModuleProvider extends ModuleProvider {
private SegmentParserListenerManager listenerManager() {
SegmentParserListenerManager listenerManager = new SegmentParserListenerManager();
if (moduleConfig.isTraceAnalysis()) {
- listenerManager.add(new MultiScopesAnalysisListener.Factory());
- listenerManager.add(new NetworkAddressAliasMappingListener.Factory());
+ listenerManager.add(new MultiScopesAnalysisListener.Factory(getManager()));
+ listenerManager.add(new NetworkAddressAliasMappingListener.Factory(getManager()));
}
- listenerManager.add(new SegmentAnalysisListener.Factory(moduleConfig.getSampleRate()));
+ listenerManager.add(new SegmentAnalysisListener.Factory(getManager(), moduleConfig));
return listenerManager;
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentParserServiceImpl.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentParserServiceImpl.java
index 3ceda53..fe0ba12 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentParserServiceImpl.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentParserServiceImpl.java
@@ -18,6 +18,8 @@
package org.apache.skywalking.oap.server.receiver.trace.provider.parser;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.receiver.trace.provider.TraceServiceModuleConfig;
@@ -25,18 +27,12 @@ import org.apache.skywalking.oap.server.receiver.trace.provider.TraceServiceModu
/**
* The open service to the receivers.
*/
+@RequiredArgsConstructor
public class SegmentParserServiceImpl implements ISegmentParserService {
- private ModuleManager moduleManager;
+ private final ModuleManager moduleManager;
+ private final TraceServiceModuleConfig config;
+ @Setter
private SegmentParserListenerManager listenerManager;
- private TraceServiceModuleConfig config;
-
- public SegmentParserServiceImpl(ModuleManager moduleManager,
- SegmentParserListenerManager listenerManager,
- TraceServiceModuleConfig config) {
- this.moduleManager = moduleManager;
- this.listenerManager = listenerManager;
- this.config = config;
- }
@Override
public void send(SegmentObject segment) {
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SpanTags.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SpanTags.java
index 0f9fef0..4f2de97 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SpanTags.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SpanTags.java
@@ -19,6 +19,8 @@
package org.apache.skywalking.oap.server.receiver.trace.provider.parser;
public class SpanTags {
+ public static final String STATUS_CODE = "status_code";
+
public static final String DB_STATEMENT = "db.statement";
public static final String DB_TYPE = "db.type";
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/MultiScopesAnalysisListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/MultiScopesAnalysisListener.java
index e6e4e97..63eaf40 100755
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/MultiScopesAnalysisListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/MultiScopesAnalysisListener.java
@@ -19,8 +19,8 @@
package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener;
import java.util.ArrayList;
-import java.util.LinkedList;
import java.util.List;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.network.common.v3.KeyStringValuePair;
import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
@@ -35,6 +35,7 @@ import org.apache.skywalking.oap.server.core.analysis.NodeType;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.core.analysis.manual.networkalias.NetworkAddressAlias;
import org.apache.skywalking.oap.server.core.cache.NetworkAddressAliasCache;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.core.source.DatabaseSlowStatement;
import org.apache.skywalking.oap.server.core.source.DetectPoint;
import org.apache.skywalking.oap.server.core.source.EndpointRelation;
@@ -52,24 +53,15 @@ import org.apache.skywalking.oap.server.receiver.trace.provider.parser.SpanTags;
* This listener traverses the whole segment.
*/
@Slf4j
+@RequiredArgsConstructor
public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitAnalysisListener {
+ private final List<SourceBuilder> entrySourceBuilders = new ArrayList<>(10);
+ private final List<SourceBuilder> exitSourceBuilders = new ArrayList<>(10);
+ private final List<DatabaseSlowStatement> slowDatabaseAccesses = new ArrayList<>(10);
private final SourceReceiver sourceReceiver;
- private final List<SourceBuilder> entrySourceBuilders;
- private final List<SourceBuilder> exitSourceBuilders;
- private final List<DatabaseSlowStatement> slowDatabaseAccesses;
private final TraceServiceModuleConfig config;
private final NetworkAddressAliasCache networkAddressAliasCache;
-
- private MultiScopesAnalysisListener(ModuleManager moduleManager, TraceServiceModuleConfig config) {
- this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
- this.entrySourceBuilders = new LinkedList<>();
- this.exitSourceBuilders = new LinkedList<>();
- this.slowDatabaseAccesses = new ArrayList<>(10);
- this.networkAddressAliasCache = moduleManager.find(CoreModule.NAME)
- .provider()
- .getService(NetworkAddressAliasCache.class);
- this.config = config;
- }
+ private final NamingLengthControl namingLengthControl;
@Override
public boolean containsPoint(Point point) {
@@ -95,7 +87,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
if (span.getRefsCount() > 0) {
for (int i = 0; i < span.getRefsCount(); i++) {
SegmentReference reference = span.getRefs(i);
- SourceBuilder sourceBuilder = new SourceBuilder();
+ SourceBuilder sourceBuilder = new SourceBuilder(namingLengthControl);
if (StringUtil.isEmpty(reference.getParentEndpoint())) {
sourceBuilder.setSourceEndpointName(Const.USER_ENDPOINT_NAME);
@@ -125,7 +117,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
entrySourceBuilders.add(sourceBuilder);
}
} else {
- SourceBuilder sourceBuilder = new SourceBuilder();
+ SourceBuilder sourceBuilder = new SourceBuilder(namingLengthControl);
sourceBuilder.setSourceServiceName(Const.USER_SERVICE_NAME);
sourceBuilder.setSourceServiceInstanceName(Const.USER_INSTANCE_NAME);
sourceBuilder.setSourceEndpointName(Const.USER_ENDPOINT_NAME);
@@ -152,7 +144,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
return;
}
- SourceBuilder sourceBuilder = new SourceBuilder();
+ SourceBuilder sourceBuilder = new SourceBuilder(namingLengthControl);
final String networkAddress = span.getPeer();
if (StringUtil.isEmpty(networkAddress)) {
@@ -235,6 +227,16 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
sourceBuilder.setTimeBucket(TimeBucket.getMinuteTimeBucket(span.getStartTime()));
sourceBuilder.setLatency((int) latency);
sourceBuilder.setResponseCode(Const.NONE);
+ span.getTagsList().forEach(tag -> {
+ if (SpanTags.STATUS_CODE.equals(tag.getKey())) {
+ try {
+ sourceBuilder.setResponseCode(Integer.parseInt(tag.getValue()));
+ } catch (NumberFormatException e) {
+ log.warn("span {} has illegal status code {}", span, tag.getValue());
+ }
+ }
+ });
+
sourceBuilder.setStatus(!span.getIsError());
switch (span.getSpanLayer()) {
@@ -293,9 +295,24 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
}
public static class Factory implements AnalysisListenerFactory {
+ private final SourceReceiver sourceReceiver;
+ private final NetworkAddressAliasCache networkAddressAliasCache;
+ private final NamingLengthControl namingLengthControl;
+
+ public Factory(ModuleManager moduleManager) {
+ this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
+ this.networkAddressAliasCache = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NetworkAddressAliasCache.class);
+ this.namingLengthControl = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NamingLengthControl.class);
+ }
+
@Override
public AnalysisListener create(ModuleManager moduleManager, TraceServiceModuleConfig config) {
- return new MultiScopesAnalysisListener(moduleManager, config);
+ return new MultiScopesAnalysisListener(
+ sourceReceiver, config, networkAddressAliasCache, namingLengthControl);
}
}
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/NetworkAddressAliasMappingListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/NetworkAddressAliasMappingListener.java
index 1f3cdd1..533f1cf 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/NetworkAddressAliasMappingListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/NetworkAddressAliasMappingListener.java
@@ -18,6 +18,7 @@
package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.network.language.agent.v3.RefType;
import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
@@ -26,6 +27,7 @@ import org.apache.skywalking.apm.network.language.agent.v3.SpanObject;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.analysis.NodeType;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.core.source.NetworkAddressAliasSetup;
import org.apache.skywalking.oap.server.core.source.SourceReceiver;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
@@ -40,14 +42,11 @@ import org.apache.skywalking.oap.server.receiver.trace.provider.TraceServiceModu
* This is a key point of SkyWalking header propagation protocol.
*/
@Slf4j
+@RequiredArgsConstructor
public class NetworkAddressAliasMappingListener implements EntryAnalysisListener {
- private final TraceServiceModuleConfig config;
private final SourceReceiver sourceReceiver;
-
- public NetworkAddressAliasMappingListener(ModuleManager moduleManager, TraceServiceModuleConfig config) {
- this.config = config;
- this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
- }
+ private final TraceServiceModuleConfig config;
+ private final NamingLengthControl namingLengthControl;
@Override
public void parseEntry(SpanObject span, SegmentObject segmentObject) {
@@ -60,7 +59,8 @@ public class NetworkAddressAliasMappingListener implements EntryAnalysisListener
if (!span.getSpanLayer().equals(SpanLayer.MQ)) {
span.getRefsList().forEach(segmentReference -> {
if (RefType.CrossProcess.equals(segmentReference.getRefType())) {
- final String networkAddressUsedAtPeer = segmentReference.getNetworkAddressUsedAtPeer();
+ final String networkAddressUsedAtPeer = namingLengthControl.formatServiceName(
+ segmentReference.getNetworkAddressUsedAtPeer());
if (config.getUninstrumentedGatewaysConfig().isAddressConfiguredAsGateway(
networkAddressUsedAtPeer)) {
/*
@@ -68,11 +68,15 @@ public class NetworkAddressAliasMappingListener implements EntryAnalysisListener
*/
return;
}
+ final String serviceName = namingLengthControl.formatServiceName(segmentObject.getService());
+ final String instanceName = namingLengthControl.formatInstanceName(
+ segmentObject.getServiceInstance());
+
final NetworkAddressAliasSetup networkAddressAliasSetup = new NetworkAddressAliasSetup();
networkAddressAliasSetup.setAddress(networkAddressUsedAtPeer);
- networkAddressAliasSetup.setRepresentService(segmentObject.getService());
+ networkAddressAliasSetup.setRepresentService(serviceName);
networkAddressAliasSetup.setRepresentServiceNodeType(NodeType.Normal);
- networkAddressAliasSetup.setRepresentServiceInstance(segmentObject.getServiceInstance());
+ networkAddressAliasSetup.setRepresentServiceInstance(instanceName);
networkAddressAliasSetup.setTimeBucket(TimeBucket.getMinuteTimeBucket(span.getStartTime()));
sourceReceiver.receive(networkAddressAliasSetup);
@@ -92,10 +96,19 @@ public class NetworkAddressAliasMappingListener implements EntryAnalysisListener
}
public static class Factory implements AnalysisListenerFactory {
+ private final SourceReceiver sourceReceiver;
+ private final NamingLengthControl namingLengthControl;
+
+ public Factory(ModuleManager moduleManager) {
+ this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
+ this.namingLengthControl = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NamingLengthControl.class);
+ }
@Override
public AnalysisListener create(ModuleManager moduleManager, TraceServiceModuleConfig config) {
- return new NetworkAddressAliasMappingListener(moduleManager, config);
+ return new NetworkAddressAliasMappingListener(sourceReceiver, config, namingLengthControl);
}
}
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SegmentAnalysisListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SegmentAnalysisListener.java
index 22f31e5..bd148c6 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SegmentAnalysisListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SegmentAnalysisListener.java
@@ -18,6 +18,7 @@
package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
import org.apache.skywalking.apm.network.language.agent.v3.SpanObject;
@@ -27,6 +28,7 @@ import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
import org.apache.skywalking.oap.server.core.analysis.NodeType;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.core.source.Segment;
import org.apache.skywalking.oap.server.core.source.SourceReceiver;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
@@ -37,9 +39,12 @@ import org.apache.skywalking.oap.server.receiver.trace.provider.TraceServiceModu
* SegmentSpanListener forwards the segment raw data to the persistence layer with the query required conditions.
*/
@Slf4j
+@RequiredArgsConstructor
public class SegmentAnalysisListener implements FirstAnalysisListener, EntryAnalysisListener, SegmentListener {
private final SourceReceiver sourceReceiver;
private final TraceSegmentSampler sampler;
+ private final NamingLengthControl namingLengthControl;
+
private final Segment segment = new Segment();
private SAMPLE_STATUS sampleStatus = SAMPLE_STATUS.UNKNOWN;
private String serviceId = Const.EMPTY_STRING;
@@ -50,11 +55,6 @@ public class SegmentAnalysisListener implements FirstAnalysisListener, EntryAnal
private int duration;
private boolean isError;
- private SegmentAnalysisListener(ModuleManager moduleManager, TraceSegmentSampler sampler) {
- this.sampler = sampler;
- this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
- }
-
@Override
public boolean containsPoint(Point point) {
return Point.First.equals(point) || Point.Entry.equals(point) || Point.Segment.equals(point);
@@ -68,7 +68,9 @@ public class SegmentAnalysisListener implements FirstAnalysisListener, EntryAnal
if (StringUtil.isEmpty(serviceId)) {
serviceId = IDManager.ServiceID.buildId(
- segmentObject.getService(), NodeType.Normal);
+ namingLengthControl.formatServiceName(segmentObject.getService()),
+ NodeType.Normal
+ );
}
long timeBucket = TimeBucket.getRecordTimeBucket(startTimestamp);
@@ -77,7 +79,7 @@ public class SegmentAnalysisListener implements FirstAnalysisListener, EntryAnal
segment.setServiceId(serviceId);
segment.setServiceInstanceId(IDManager.ServiceInstanceID.buildId(
serviceId,
- segmentObject.getServiceInstance()
+ namingLengthControl.formatInstanceName(segmentObject.getServiceInstance())
));
segment.setLatency(duration);
segment.setStartTime(startTimestamp);
@@ -87,11 +89,12 @@ public class SegmentAnalysisListener implements FirstAnalysisListener, EntryAnal
segment.setDataBinary(segmentObject.toByteArray());
segment.setVersion(3);
+ endpointName = namingLengthControl.formatEndpointName(span.getOperationName());
endpointId = IDManager.EndpointID.buildId(
serviceId,
- span.getOperationName()
+ endpointName
);
- endpointName = span.getOperationName();
+
}
@Override
@@ -106,7 +109,11 @@ public class SegmentAnalysisListener implements FirstAnalysisListener, EntryAnal
span.getOperationName()
);
- endpointName = span.getOperationName();
+ endpointName = namingLengthControl.formatEndpointName(span.getOperationName());
+ endpointId = IDManager.EndpointID.buildId(
+ serviceId,
+ endpointName
+ );
}
@Override
@@ -160,15 +167,21 @@ public class SegmentAnalysisListener implements FirstAnalysisListener, EntryAnal
}
public static class Factory implements AnalysisListenerFactory {
+ private final SourceReceiver sourceReceiver;
private final TraceSegmentSampler sampler;
-
- public Factory(int segmentSamplingRate) {
- this.sampler = new TraceSegmentSampler(segmentSamplingRate);
+ private final NamingLengthControl namingLengthControl;
+
+ public Factory(ModuleManager moduleManager, TraceServiceModuleConfig config) {
+ this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
+ this.sampler = new TraceSegmentSampler(config.getSampleRate());
+ this.namingLengthControl = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NamingLengthControl.class);
}
@Override
public AnalysisListener create(ModuleManager moduleManager, TraceServiceModuleConfig config) {
- return new SegmentAnalysisListener(moduleManager, sampler);
+ return new SegmentAnalysisListener(sourceReceiver, sampler, namingLengthControl);
}
}
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SourceBuilder.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SourceBuilder.java
index 542e5d5..fcf1dc6 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SourceBuilder.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SourceBuilder.java
@@ -19,45 +19,74 @@
package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import lombok.Setter;
import org.apache.skywalking.apm.util.StringUtil;
+import org.apache.skywalking.oap.server.core.analysis.NodeType;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.core.source.All;
import org.apache.skywalking.oap.server.core.source.DatabaseAccess;
import org.apache.skywalking.oap.server.core.source.DetectPoint;
import org.apache.skywalking.oap.server.core.source.Endpoint;
import org.apache.skywalking.oap.server.core.source.EndpointRelation;
-import org.apache.skywalking.oap.server.core.analysis.NodeType;
import org.apache.skywalking.oap.server.core.source.RequestType;
import org.apache.skywalking.oap.server.core.source.Service;
import org.apache.skywalking.oap.server.core.source.ServiceInstance;
import org.apache.skywalking.oap.server.core.source.ServiceInstanceRelation;
import org.apache.skywalking.oap.server.core.source.ServiceRelation;
+@RequiredArgsConstructor
class SourceBuilder {
+ private final NamingLengthControl namingLengthControl;
+
@Getter
- @Setter
private String sourceServiceName;
+
+ public void setSourceServiceName(final String sourceServiceName) {
+ this.sourceServiceName = namingLengthControl.formatServiceName(sourceServiceName);
+ }
+
@Getter
@Setter
private NodeType sourceNodeType;
@Getter
- @Setter
private String sourceServiceInstanceName;
+
+ public void setSourceServiceInstanceName(final String sourceServiceInstanceName) {
+ this.sourceServiceInstanceName = namingLengthControl.formatInstanceName(sourceServiceInstanceName);
+ }
+
@Getter
- @Setter
private String sourceEndpointName;
+
+ public void setSourceEndpointName(final String sourceEndpointName) {
+ this.sourceEndpointName = namingLengthControl.formatEndpointName(sourceEndpointName);
+ }
+
@Getter
- @Setter
private String destServiceName;
+
+ public void setDestServiceName(final String destServiceName) {
+ this.destServiceName = namingLengthControl.formatServiceName(destServiceName);
+ }
+
@Getter
@Setter
private NodeType destNodeType;
@Getter
- @Setter
private String destServiceInstanceName;
+
+ public void setDestServiceInstanceName(final String destServiceInstanceName) {
+ this.destServiceInstanceName = namingLengthControl.formatServiceName(destServiceInstanceName);
+ }
+
@Getter
- @Setter
private String destEndpointName;
+
+ public void setDestEndpointName(final String destEndpointName) {
+ this.destEndpointName = namingLengthControl.formatEndpointName(destEndpointName);
+ }
+
@Getter
@Setter
private int componentId;
diff --git a/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/MockCoreModuleProvider.java b/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/MockCoreModuleProvider.java
index 218ab38..04413b9 100755
--- a/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/MockCoreModuleProvider.java
+++ b/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/MockCoreModuleProvider.java
@@ -30,6 +30,7 @@ import org.apache.skywalking.oap.server.core.command.CommandService;
import org.apache.skywalking.oap.server.core.config.ConfigService;
import org.apache.skywalking.oap.server.core.config.DownSamplingConfigService;
import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService;
+import org.apache.skywalking.oap.server.core.config.NamingLengthControl;
import org.apache.skywalking.oap.server.core.profile.ProfileTaskMutationService;
import org.apache.skywalking.oap.server.core.query.AggregationQueryService;
import org.apache.skywalking.oap.server.core.query.AlarmQueryService;
@@ -92,6 +93,8 @@ public class MockCoreModuleProvider extends CoreModuleProvider {
@Override
public void prepare() throws ServiceNotProvidedException, ModuleStartException {
+ this.registerServiceImplementation(NamingLengthControl.class, new NamingLengthControl(50, 50, 150));
+
MockStreamAnnotationListener streamAnnotationListener = new MockStreamAnnotationListener(getManager());
annotationScan.registerListener(streamAnnotationListener);