This is an automated email from the ASF dual-hosted git repository. tanjian pushed a commit to branch service_props in repository https://gitbox.apache.org/repos/asf/skywalking.git
commit 01d8e216ded660a68e4f4e0c4c5c18e9a9dbce12 Author: Jared.Tan <jian....@daocloud.io> AuthorDate: Thu Aug 29 10:09:17 2019 +0800 agent support custom properties. --- .../skywalking/apm/agent/core/conf/Config.java | 7 ++++ .../remote/ServiceAndEndpointRegisterClient.java | 15 ++++++- docs/en/setup/service-agent/java-agent/README.md | 1 + .../register/service/ServiceInventoryRegister.java | 1 + .../handler/v6/grpc/RegisterServiceHandler.java | 48 +++++++++++++++++----- 5 files changed, 60 insertions(+), 12 deletions(-) diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java index 376ee6b..a0b57d0 100755 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java @@ -110,6 +110,13 @@ public class Config { * Limit the length of the operationName to prevent errors when inserting elasticsearch **/ public static int OPERATION_NAME_THRESHOLD = 500; + + /* + * service properties + * e.g. + * agent.properties[org]=apache + */ + public static Map<String, String> PROPERTIES = new HashMap<String, String>(); } public static class Collector { diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/remote/ServiceAndEndpointRegisterClient.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/remote/ServiceAndEndpointRegisterClient.java index 51f98bd..5648047 100755 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/remote/ServiceAndEndpointRegisterClient.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/remote/ServiceAndEndpointRegisterClient.java @@ -19,11 +19,12 @@ package org.apache.skywalking.apm.agent.core.remote; import io.grpc.Channel; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; - import org.apache.skywalking.apm.agent.core.boot.BootService; import org.apache.skywalking.apm.agent.core.boot.DefaultImplementor; import org.apache.skywalking.apm.agent.core.boot.DefaultNamedThreadFactory; @@ -39,6 +40,7 @@ import org.apache.skywalking.apm.agent.core.logging.api.LogManager; import org.apache.skywalking.apm.agent.core.os.OSUtil; import org.apache.skywalking.apm.network.common.Commands; import org.apache.skywalking.apm.network.common.KeyIntValuePair; +import org.apache.skywalking.apm.network.common.KeyStringValuePair; import org.apache.skywalking.apm.network.register.v2.RegisterGrpc; import org.apache.skywalking.apm.network.register.v2.Service; import org.apache.skywalking.apm.network.register.v2.ServiceInstance; @@ -58,6 +60,7 @@ import org.apache.skywalking.apm.util.StringUtil; public class ServiceAndEndpointRegisterClient implements BootService, Runnable, GRPCChannelListener { private static final ILog logger = LogManager.getLogger(ServiceAndEndpointRegisterClient.class); private static String INSTANCE_UUID; + private static List<KeyStringValuePair> SERVICE_PROPERTIES; private volatile GRPCChannelStatus status = GRPCChannelStatus.DISCONNECT; private volatile RegisterGrpc.RegisterBlockingStub registerBlockingStub; @@ -84,6 +87,13 @@ public class ServiceAndEndpointRegisterClient implements BootService, Runnable, INSTANCE_UUID = StringUtil.isEmpty(Config.Agent.INSTANCE_UUID) ? UUID.randomUUID().toString() .replaceAll("-", "") : Config.Agent.INSTANCE_UUID; + + SERVICE_PROPERTIES = new ArrayList<KeyStringValuePair>(); + + for (String key : Config.Agent.PROPERTIES.keySet()) { + SERVICE_PROPERTIES.add(KeyStringValuePair.newBuilder() + .setKey(key).setValue(Config.Agent.PROPERTIES.get(key)).build()); + } } @Override @@ -129,7 +139,8 @@ public class ServiceAndEndpointRegisterClient implements BootService, Runnable, if (RemoteDownstreamConfig.Agent.SERVICE_ID == DictionaryUtil.nullValue()) { if (registerBlockingStub != null) { ServiceRegisterMapping serviceRegisterMapping = registerBlockingStub.withDeadlineAfter(10, TimeUnit.SECONDS).doServiceRegister( - Services.newBuilder().addServices(Service.newBuilder().setServiceName(Config.Agent.SERVICE_NAME)).build()); + Services.newBuilder().addServices(Service.newBuilder().setServiceName(Config.Agent.SERVICE_NAME) + .addAllProperties(SERVICE_PROPERTIES)).build()); if (serviceRegisterMapping != null) { for (KeyIntValuePair registered : serviceRegisterMapping.getServicesList()) { if (Config.Agent.SERVICE_NAME.equals(registered.getKey())) { diff --git a/docs/en/setup/service-agent/java-agent/README.md b/docs/en/setup/service-agent/java-agent/README.md index 26e4c79..e2c4980 100755 --- a/docs/en/setup/service-agent/java-agent/README.md +++ b/docs/en/setup/service-agent/java-agent/README.md @@ -78,6 +78,7 @@ property key | Description | Default | `agent.cool_down_threshold `|How long should the agent wait (in minute) before re-registering to the OAP server after receiving reset command.|`10`| `agent.force_reconnection_period `|Force reconnection period of grpc, based on grpc_channel_check_interval.|`1`| `agent.operation_name_threshold `|The operationName max length, setting this value > 500 is not recommended.|`500`| +`agent.properties[key]=value` | Add custom properties. | Not set| `collector.grpc_channel_check_interval`|grpc channel status check interval.|`30`| `collector.app_and_service_register_check_interval`|application and service registry check interval.|`3`| `collector.backend_service`|Collector SkyWalking trace receiver service addresses.|`127.0.0.1:11800`| diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java index b5640b3..2d4447a 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java @@ -85,6 +85,7 @@ public class ServiceInventoryRegister implements IServiceInventoryRegister { serviceInventory.setRegisterTime(now); serviceInventory.setHeartbeatTime(now); serviceInventory.setLastUpdateTime(now); + serviceInventory.setProperties(properties); InventoryStreamProcessor.getInstance().in(serviceInventory); } diff --git a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java index 6bdb842..3683523 100644 --- a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java +++ b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java @@ -20,20 +20,44 @@ package org.apache.skywalking.oap.server.receiver.register.provider.handler.v6.g import com.google.gson.JsonObject; import io.grpc.stub.StreamObserver; -import java.util.*; -import org.apache.skywalking.apm.network.common.*; -import org.apache.skywalking.apm.network.register.v2.*; +import java.util.ArrayList; +import java.util.List; +import org.apache.skywalking.apm.network.common.Commands; +import org.apache.skywalking.apm.network.common.KeyIntValuePair; +import org.apache.skywalking.apm.network.common.KeyStringValuePair; +import org.apache.skywalking.apm.network.register.v2.EndpointMapping; +import org.apache.skywalking.apm.network.register.v2.EndpointMappingElement; +import org.apache.skywalking.apm.network.register.v2.Endpoints; +import org.apache.skywalking.apm.network.register.v2.NetAddressMapping; +import org.apache.skywalking.apm.network.register.v2.NetAddresses; +import org.apache.skywalking.apm.network.register.v2.RegisterGrpc; +import org.apache.skywalking.apm.network.register.v2.ServiceAndNetworkAddressMappings; +import org.apache.skywalking.apm.network.register.v2.ServiceInstanceRegisterMapping; +import org.apache.skywalking.apm.network.register.v2.ServiceInstances; +import org.apache.skywalking.apm.network.register.v2.ServiceRegisterMapping; +import org.apache.skywalking.apm.network.register.v2.Services; import org.apache.skywalking.apm.util.StringUtil; -import org.apache.skywalking.oap.server.core.*; -import org.apache.skywalking.oap.server.core.cache.*; -import org.apache.skywalking.oap.server.core.register.*; -import org.apache.skywalking.oap.server.core.register.service.*; +import org.apache.skywalking.oap.server.core.Const; +import org.apache.skywalking.oap.server.core.CoreModule; +import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache; +import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache; +import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory; +import org.apache.skywalking.oap.server.core.register.ServiceInventory; +import org.apache.skywalking.oap.server.core.register.service.IEndpointInventoryRegister; +import org.apache.skywalking.oap.server.core.register.service.INetworkAddressInventoryRegister; +import org.apache.skywalking.oap.server.core.register.service.IServiceInstanceInventoryRegister; +import org.apache.skywalking.oap.server.core.register.service.IServiceInventoryRegister; import org.apache.skywalking.oap.server.core.source.DetectPoint; import org.apache.skywalking.oap.server.library.module.ModuleManager; import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler; -import org.slf4j.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import static org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.*; +import static org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.HOST_NAME; +import static org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.IPV4S; +import static org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.LANGUAGE; +import static org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.OS_NAME; +import static org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.PROCESS_NO; /** * @author wusheng @@ -62,10 +86,14 @@ public class RegisterServiceHandler extends RegisterGrpc.RegisterImplBase implem ServiceRegisterMapping.Builder builder = ServiceRegisterMapping.newBuilder(); request.getServicesList().forEach(service -> { String serviceName = service.getServiceName(); + JsonObject serviceProperties = new JsonObject(); + for (KeyStringValuePair property : service.getPropertiesList()) { + serviceProperties.addProperty(property.getKey(), property.getValue()); + } if (logger.isDebugEnabled()) { logger.debug("Register service, service code: {}", serviceName); } - int serviceId = serviceInventoryRegister.getOrCreate(serviceName, null); + int serviceId = serviceInventoryRegister.getOrCreate(serviceName, serviceProperties); if (serviceId != Const.NONE) { KeyIntValuePair value = KeyIntValuePair.newBuilder().setKey(serviceName).setValue(serviceId).build();