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 2021/08/27 07:01:31 UTC

[skywalking] branch master updated: Doc: Reorganize dynamic configuration doc (#7586)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new e50f4f8  Doc: Reorganize dynamic configuration doc (#7586)
e50f4f8 is described below

commit e50f4f850965e06615695dced96383e7940831d4
Author: wankai123 <wa...@foxmail.com>
AuthorDate: Fri Aug 27 15:01:18 2021 +0800

    Doc: Reorganize dynamic configuration doc (#7586)
    
    * Reorganize dynamic configuration doc
    
    * add configmap and polish doc
    
    * polish changes.md
---
 CHANGES.md                                        |   1 +
 docs/en/setup/backend/dynamic-config-apollo.md    |  14 ++
 docs/en/setup/backend/dynamic-config-configmap.md | 112 +++++++++++++++
 docs/en/setup/backend/dynamic-config-consul.md    |  15 ++
 docs/en/setup/backend/dynamic-config-etcd.md      |  17 +++
 docs/en/setup/backend/dynamic-config-nacos.md     |  21 +++
 docs/en/setup/backend/dynamic-config-service.md   |  14 ++
 docs/en/setup/backend/dynamic-config-zookeeper.md |  61 ++++++++
 docs/en/setup/backend/dynamic-config.md           | 162 ++++++----------------
 9 files changed, 295 insertions(+), 122 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index 59d386f..3f29383 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -63,6 +63,7 @@ Release Notes.
 
 * Add a section in `Log Collecting And Analysis` doc, introducing the new Python agent log reporter.
 * Add one missing step in `otel-receiver` doc about how to activate the default receiver.
+* Reorganize dynamic configuration doc.
 
 All issues and pull requests are [here](https://github.com/apache/skywalking/milestone/96?closed=1)
 
diff --git a/docs/en/setup/backend/dynamic-config-apollo.md b/docs/en/setup/backend/dynamic-config-apollo.md
new file mode 100755
index 0000000..3cfe94c
--- /dev/null
+++ b/docs/en/setup/backend/dynamic-config-apollo.md
@@ -0,0 +1,14 @@
+# Dynamic Configuration Apollo Implementation
+
+[Apollo](https://github.com/ctripcorp/apollo/) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
+
+```yaml
+configuration:
+  selector: ${SW_CONFIGURATION:apollo}
+  apollo:
+    apolloMeta: ${SW_CONFIG_APOLLO:http://106.12.25.204:8080}
+    apolloCluster: ${SW_CONFIG_APOLLO_CLUSTER:default}
+    apolloEnv: ${SW_CONFIG_APOLLO_ENV:""}
+    appId: ${SW_CONFIG_APOLLO_APP_ID:skywalking}
+    period: ${SW_CONFIG_APOLLO_PERIOD:5}
+```
\ No newline at end of file
diff --git a/docs/en/setup/backend/dynamic-config-configmap.md b/docs/en/setup/backend/dynamic-config-configmap.md
new file mode 100755
index 0000000..8e1e8a2
--- /dev/null
+++ b/docs/en/setup/backend/dynamic-config-configmap.md
@@ -0,0 +1,112 @@
+# Dynamic Configuration Kuberbetes Configmap Implementation
+
+[configmap](https://kubernetes.io/docs/concepts/configuration/configmap/) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
+
+```yaml
+configuration:
+  selector: ${SW_CONFIGURATION:k8s-configmap}
+  # [example] (../../../../oap-server/server-configuration/configuration-k8s-configmap/src/test/resources/skywalking-dynamic-configmap.example.yaml)
+  k8s-configmap:
+    # Sync period in seconds. Defaults to 60 seconds.
+    period: ${SW_CONFIG_CONFIGMAP_PERIOD:60}
+    # Which namespace is configmap deployed in.
+    namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}
+    # Labelselector is used to locate specific configmap
+    labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}
+```
+`{namespace}` is the k8s namespace to which the configmap belongs.
+`{labelSelector}` is used to identify which configmaps would be selected.
+
+e.g. These 2 configmaps would be selected by the above config:
+```
+apiversion: v1
+kind: ConfigMap
+metadata:
+  name: skywalking-dynamic-config
+  namespace: default
+  labels:
+    app: collector
+    release: skywalking
+data:
+  configKey1: configValue1
+  configKey2: configValue2
+  ...
+```
+```
+apiversion: v1
+kind: ConfigMap
+metadata:
+  name: skywalking-dynamic-config2
+  namespace: default
+  labels:
+    app: collector
+    release: skywalking
+data:
+  configKey3: configValue3
+  ...
+```
+
+## Config Storage
+The configs is configmap data items as the above example shows. we can organize the configs
+in 1 or more configmap files.
+### Single Config
+Under configmap.data:
+```
+  configKey: configValue
+```
+e.g. The config is:
+```
+{agent-analyzer.default.slowDBAccessThreshold}:{default:200,mongodb:50}
+```
+The config in configmap is:
+```
+apiversion: v1
+kind: ConfigMap
+metadata:
+  name: skywalking-dynamic-config
+  namespace: default
+  labels:
+    app: collector
+    release: skywalking
+data:
+  agent-analyzer.default.slowDBAccessThreshold: default:200,mongodb:50
+```
+### Group Config
+The `data key` is composited by configKey and subItemKey to identify it is a group config:
+```
+configKey.subItemKey1: subItemValue1
+configKey.subItemKey2: subItemValue2
+...
+```
+e.g. The config is:
+```
+{core.default.endpoint-name-grouping-openapi}:|{customerAPI-v1}:{value of customerAPI-v1}
+                                              |{productAPI-v1}:{value of productAPI-v1}
+                                              |{productAPI-v2}:{value of productAPI-v2}
+```
+The config can separate into 2 configmaps is:
+```
+apiversion: v1
+kind: ConfigMap
+metadata:
+  name: skywalking-dynamic-config
+  namespace: default
+  labels:
+    app: collector
+    release: skywalking
+data:
+  core.default.endpoint-name-grouping-openapi.customerAPI-v1: value of customerAPI-v1
+  core.default.endpoint-name-grouping-openapi.productAPI-v1: value of productAPI-v1
+```
+```
+apiversion: v1
+kind: ConfigMap
+metadata:
+  name: skywalking-dynamic-config2
+  namespace: default
+  labels:
+    app: collector
+    release: skywalking
+data:
+  core.default.endpoint-name-grouping-openapi.productAPI-v2: value of productAPI-v2
+```
\ No newline at end of file
diff --git a/docs/en/setup/backend/dynamic-config-consul.md b/docs/en/setup/backend/dynamic-config-consul.md
new file mode 100755
index 0000000..e5f8c3c
--- /dev/null
+++ b/docs/en/setup/backend/dynamic-config-consul.md
@@ -0,0 +1,15 @@
+# Dynamic Configuration Consul Implementation
+
+[Consul](https://github.com/rickfast/consul-client) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
+
+```yaml
+configuration:
+  selector: ${SW_CONFIGURATION:consul}
+  consul:
+    # Consul host and ports, separated by comma, e.g. 1.2.3.4:8500,2.3.4.5:8500
+    hostAndPorts: ${SW_CONFIG_CONSUL_HOST_AND_PORTS:1.2.3.4:8500}
+    # Sync period in seconds. Defaults to 60 seconds.
+    period: ${SW_CONFIG_CONSUL_PERIOD:1}
+    # Consul aclToken
+    aclToken: ${SW_CONFIG_CONSUL_ACL_TOKEN:""}
+```
\ No newline at end of file
diff --git a/docs/en/setup/backend/dynamic-config-etcd.md b/docs/en/setup/backend/dynamic-config-etcd.md
new file mode 100755
index 0000000..0ea84ed
--- /dev/null
+++ b/docs/en/setup/backend/dynamic-config-etcd.md
@@ -0,0 +1,17 @@
+# Dynamic Configuration Etcd Implementation
+
+[Etcd](https://github.com/etcd-io/etcd) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
+
+```yaml
+configuration:
+  selector: ${SW_CONFIGURATION:etcd}
+  etcd:
+    period: ${SW_CONFIG_ETCD_PERIOD:60} # Unit seconds, sync period. Default fetch every 60 seconds.
+    endpoints: ${SW_CONFIG_ETCD_ENDPOINTS:localhost:2379}
+    namespace: ${SW_CONFIG_ETCD_NAMESPACE:/skywalking}
+    authentication: ${SW_CONFIG_ETCD_AUTHENTICATION:false}
+    user: ${SW_CONFIG_ETCD_USER:}
+    password: ${SW_CONFIG_ETCD_password:}
+```
+
+**NOTE**: Only the v3 protocol is supported since 8.7.0.
\ No newline at end of file
diff --git a/docs/en/setup/backend/dynamic-config-nacos.md b/docs/en/setup/backend/dynamic-config-nacos.md
new file mode 100755
index 0000000..a7a8a52
--- /dev/null
+++ b/docs/en/setup/backend/dynamic-config-nacos.md
@@ -0,0 +1,21 @@
+# Dynamic Configuration Nacos Implementation
+
+[Nacos](https://github.com/alibaba/nacos) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
+
+```yaml
+configuration:
+  selector: ${SW_CONFIGURATION:nacos}
+  nacos:
+    # Nacos Server Host
+    serverAddr: ${SW_CONFIG_NACOS_SERVER_ADDR:127.0.0.1}
+    # Nacos Server Port
+    port: ${SW_CONFIG_NACOS_SERVER_PORT:8848}
+    # Nacos Configuration Group
+    group: ${SW_CONFIG_NACOS_SERVER_GROUP:skywalking}
+    # Nacos Configuration namespace
+    namespace: ${SW_CONFIG_NACOS_SERVER_NAMESPACE:}
+    # Unit seconds, sync period. Default fetch every 60 seconds.
+    period: ${SW_CONFIG_NACOS_PERIOD:60}
+    # the name of current cluster, set the name if you want to upstream system known.
+    clusterName: ${SW_CONFIG_NACOS_CLUSTER_NAME:default}
+```
\ No newline at end of file
diff --git a/docs/en/setup/backend/dynamic-config-service.md b/docs/en/setup/backend/dynamic-config-service.md
new file mode 100755
index 0000000..8db1572
--- /dev/null
+++ b/docs/en/setup/backend/dynamic-config-service.md
@@ -0,0 +1,14 @@
+# Dynamic Configuration Service, DCS
+[Dynamic Configuration Service](../../../../oap-server/server-configuration/grpc-configuration-sync/src/main/proto/configuration-service.proto) 
+is a gRPC service which requires implementation of the upstream system.
+The SkyWalking OAP fetches the configuration from the implementation (any system), after you open the implementation like this:
+
+```yaml
+configuration:
+  selector: ${SW_CONFIGURATION:grpc}
+  grpc:
+    host: ${SW_DCS_SERVER_HOST:""}
+    port: ${SW_DCS_SERVER_PORT:80}
+    clusterName: ${SW_DCS_CLUSTER_NAME:SkyWalking}
+    period: ${SW_DCS_PERIOD:20}
+```
diff --git a/docs/en/setup/backend/dynamic-config-zookeeper.md b/docs/en/setup/backend/dynamic-config-zookeeper.md
new file mode 100755
index 0000000..a14d474
--- /dev/null
+++ b/docs/en/setup/backend/dynamic-config-zookeeper.md
@@ -0,0 +1,61 @@
+# Dynamic Configuration Zookeeper Implementation
+[Zookeeper](https://github.com/apache/zookeeper) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
+
+```yaml
+configuration:
+  selector: ${SW_CONFIGURATION:zookeeper}
+  zookeeper:
+    period: ${SW_CONFIG_ZK_PERIOD:60} # Unit seconds, sync period. Default fetch every 60 seconds.
+    nameSpace: ${SW_CONFIG_ZK_NAMESPACE:/default}
+    hostPort: ${SW_CONFIG_ZK_HOST_PORT:localhost:2181}
+    # Retry Policy
+    baseSleepTimeMs: ${SW_CONFIG_ZK_BASE_SLEEP_TIME_MS:1000} # initial amount of time to wait between retries
+    maxRetries: ${SW_CONFIG_ZK_MAX_RETRIES:3} # max number of times to retry
+```
+
+The **nameSpace** is the ZooKeeper path. The config key and value are the properties of the `namespace` folder.
+
+## Config Storage
+### Single Config
+```
+znode.path = {nameSpace}/configKey
+configValue = znode.data
+```
+e.g. The config is: 
+```
+{agent-analyzer.default.slowDBAccessThreshold}:{default:200,mongodb:50}
+```
+If `nameSpace = /default` the config in zookeeper is:
+```
+znode.path = /default/agent-analyzer.default.slowDBAccessThreshold
+znode.data = default:200,mongodb:50
+```
+
+### Group Config
+```
+znode.path = {nameSpace}/configKey
+znode.child1.path = {znode.path}/subItemkey1
+znode.child2.path = {znode.path}/subItemkey2
+...
+subItemValue1 = znode.child1.data
+subItemValue2 = znode.child2.data
+...
+```
+e.g. The config is:
+```
+{core.default.endpoint-name-grouping-openapi}:|{customerAPI-v1}:{value of customerAPI-v1}
+                                              |{productAPI-v1}:{value of productAPI-v1}
+                                              |{productAPI-v2}:{value of productAPI-v2}
+```
+If `nameSpace = /default` the config in zookeeper is:
+```
+znode.path = /default/core.default.endpoint-name-grouping-openapi
+znode.customerAPI-v1.path = /default/core.default.endpoint-name-grouping-openapi/customerAPI-v1
+znode.productAPI-v1.path = /default/core.default.endpoint-name-grouping-openapi/productAPI-v1
+znode.productAPI-v2.path = /default/core.default.endpoint-name-grouping-openapi/productAPI-v2
+
+znode.customerAPI-v1.data = value of customerAPI-v1
+znode.productAPI-v1.data = value of productAPI-v1
+znode.productAPI-v2.data = value of productAPI-v2
+
+```
\ No newline at end of file
diff --git a/docs/en/setup/backend/dynamic-config.md b/docs/en/setup/backend/dynamic-config.md
index 3e7e073..41eca86 100755
--- a/docs/en/setup/backend/dynamic-config.md
+++ b/docs/en/setup/backend/dynamic-config.md
@@ -2,19 +2,7 @@
 SkyWalking Configurations are mostly set through `application.yml` and OS system environment variables.
 At the same time, some of them support dynamic settings from upstream management system.
 
-Currently, SkyWalking supports the following dynamic configurations.
-
-| Config Key | Value Description | Value Format Example |
-|:----:|:----:|:----:|
-|agent-analyzer.default.slowDBAccessThreshold| Thresholds of slow Database statement. Overrides `receiver-trace/default/slowDBAccessThreshold` of `application.yml`. | default:200,mongodb:50|
-|agent-analyzer.default.uninstrumentedGateways| The uninstrumented gateways. Overrides `gateways.yml`. | Same as [`gateways.yml`](uninstrumented-gateways.md#configuration-format). |
-|alarm.default.alarm-settings| The alarm settings. Overrides `alarm-settings.yml`. | Same as [`alarm-settings.yml`](backend-alarm.md). |
-|core.default.apdexThreshold| The apdex threshold settings. Overrides `service-apdex-threshold.yml`. | Same as [`service-apdex-threshold.yml`](apdex-threshold.md). |
-|core.default.endpoint-name-grouping| The endpoint name grouping setting. Overrides `endpoint-name-grouping.yml`. | Same as [`endpoint-name-grouping.yml`](endpoint-grouping-rules.md). |
-|core.default.log4j-xml| The log4j xml configuration. Overrides `log4j2.xml`. | Same as [`log4j2.xml`](dynamical-logging.md). |
-|agent-analyzer.default.sampleRate| Trace sampling. Overrides `receiver-trace/default/sampleRate` of `application.yml`. | 10000 |
-|agent-analyzer.default.slowTraceSegmentThreshold| Setting this threshold on latency (in milliseconds) would cause slow trace segments to be sampled if they use up more time, even if the sampling mechanism is activated. The default value is `-1`, which means slow traces will not be sampled. Overrides `receiver-trace/default/slowTraceSegmentThreshold` of `application.yml`. | -1 |
-|configuration-discovery.default.agentConfigurations| The ConfigurationDiscovery settings. | See [`configuration-discovery.md`](../service-agent/java-agent/configuration-discovery.md). |
+Currently, SkyWalking supports the 2 types of dynamic configurations: Single and Group.
 
 This feature depends on upstream service, so it is **DISABLED** by default.
 
@@ -29,122 +17,52 @@ configuration:
     period: ${SW_DCS_PERIOD:20}
   # ... other implementations
 ```
-
-## Dynamic Configuration Service, DCS
-[Dynamic Configuration Service](../../../../oap-server/server-configuration/grpc-configuration-sync/src/main/proto/configuration-service.proto) 
-is a gRPC service which requires implementation of the upstream system.
-The SkyWalking OAP fetches the configuration from the implementation (any system), after you open the implementation like this:
-
-```yaml
-configuration:
-  selector: ${SW_CONFIGURATION:grpc}
-  grpc:
-    host: ${SW_DCS_SERVER_HOST:""}
-    port: ${SW_DCS_SERVER_PORT:80}
-    clusterName: ${SW_DCS_CLUSTER_NAME:SkyWalking}
-    period: ${SW_DCS_PERIOD:20}
+## Single Configuration
+Single Configuration is a config key that corresponds to a specific config value. The logic structure is:
 ```
-
-## Dynamic Configuration Zookeeper Implementation
-[Zookeeper](https://github.com/apache/zookeeper) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
-
-```yaml
-configuration:
-  selector: ${SW_CONFIGURATION:zookeeper}
-  zookeeper:
-    period: ${SW_CONFIG_ZK_PERIOD:60} # Unit seconds, sync period. Default fetch every 60 seconds.
-    nameSpace: ${SW_CONFIG_ZK_NAMESPACE:/default}
-    hostPort: ${SW_CONFIG_ZK_HOST_PORT:localhost:2181}
-    # Retry Policy
-    baseSleepTimeMs: ${SW_CONFIG_ZK_BASE_SLEEP_TIME_MS:1000} # initial amount of time to wait between retries
-    maxRetries: ${SW_CONFIG_ZK_MAX_RETRIES:3} # max number of times to retry
+{configKey}:{configVaule}
 ```
-
-The **nameSpace** is the ZooKeeper path. The config key and value are the properties of the `namespace` folder.
-
-## Dynamic Configuration Etcd Implementation
-
-[Etcd](https://github.com/etcd-io/etcd) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
-
-```yaml
-configuration:
-  selector: ${SW_CONFIGURATION:etcd}
-  etcd:
-    period: ${SW_CONFIG_ETCD_PERIOD:60} # Unit seconds, sync period. Default fetch every 60 seconds.
-    endpoints: ${SW_CONFIG_ETCD_ENDPOINTS:localhost:2379}
-    namespace: ${SW_CONFIG_ETCD_NAMESPACE:/skywalking}
-    authentication: ${SW_CONFIG_ETCD_AUTHENTICATION:false}
-    user: ${SW_CONFIG_ETCD_USER:}
-    password: ${SW_CONFIG_ETCD_password:}
+For example:
 ```
-
-**NOTE**: Only the v3 protocol is supported since 8.7.0. 
-
-## Dynamic Configuration Consul Implementation
-
-[Consul](https://github.com/rickfast/consul-client) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
-
-```yaml
-configuration:
-  selector: ${SW_CONFIGURATION:consul}
-  consul:
-    # Consul host and ports, separated by comma, e.g. 1.2.3.4:8500,2.3.4.5:8500
-    hostAndPorts: ${SW_CONFIG_CONSUL_HOST_AND_PORTS:1.2.3.4:8500}
-    # Sync period in seconds. Defaults to 60 seconds.
-    period: ${SW_CONFIG_CONSUL_PERIOD:1}
-    # Consul aclToken
-    aclToken: ${SW_CONFIG_CONSUL_ACL_TOKEN:""}
+{agent-analyzer.default.slowDBAccessThreshold}:{default:200,mongodb:50}
 ```
+Supported configurations are as follows:
 
-## Dynamic Configuration Apollo Implementation
-
-[Apollo](https://github.com/ctripcorp/apollo/) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
+| Config Key | Value Description | Value Format Example |
+|:----:|:----:|:----:|
+|agent-analyzer.default.slowDBAccessThreshold| Thresholds of slow Database statement. Overrides `receiver-trace/default/slowDBAccessThreshold` of `application.yml`. | default:200,mongodb:50|
+|agent-analyzer.default.uninstrumentedGateways| The uninstrumented gateways. Overrides `gateways.yml`. | Same as [`gateways.yml`](uninstrumented-gateways.md#configuration-format). |
+|alarm.default.alarm-settings| The alarm settings. Overrides `alarm-settings.yml`. | Same as [`alarm-settings.yml`](backend-alarm.md). |
+|core.default.apdexThreshold| The apdex threshold settings. Overrides `service-apdex-threshold.yml`. | Same as [`service-apdex-threshold.yml`](apdex-threshold.md). |
+|core.default.endpoint-name-grouping| The endpoint name grouping setting. Overrides `endpoint-name-grouping.yml`. | Same as [`endpoint-name-grouping.yml`](endpoint-grouping-rules.md). |
+|core.default.log4j-xml| The log4j xml configuration. Overrides `log4j2.xml`. | Same as [`log4j2.xml`](dynamical-logging.md). |
+|agent-analyzer.default.sampleRate| Trace sampling. Overrides `receiver-trace/default/sampleRate` of `application.yml`. | 10000 |
+|agent-analyzer.default.slowTraceSegmentThreshold| Setting this threshold on latency (in milliseconds) would cause slow trace segments to be sampled if they use up more time, even if the sampling mechanism is activated. The default value is `-1`, which means slow traces will not be sampled. Overrides `receiver-trace/default/slowTraceSegmentThreshold` of `application.yml`. | -1 |
+|configuration-discovery.default.agentConfigurations| The ConfigurationDiscovery settings. | See [`configuration-discovery.md`](../service-agent/java-agent/configuration-discovery.md). |
 
-```yaml
-configuration:
-  selector: ${SW_CONFIGURATION:apollo}
-  apollo:
-    apolloMeta: ${SW_CONFIG_APOLLO:http://106.12.25.204:8080}
-    apolloCluster: ${SW_CONFIG_APOLLO_CLUSTER:default}
-    apolloEnv: ${SW_CONFIG_APOLLO_ENV:""}
-    appId: ${SW_CONFIG_APOLLO_APP_ID:skywalking}
-    period: ${SW_CONFIG_APOLLO_PERIOD:5}
+## Group Configuration
+Single Configuration is a config key that corresponds to a group sub config items. A sub config item is a key value pair. The logic structure is:
 ```
-
-## Dynamic Configuration Kuberbetes Configmap Implementation
-
-[configmap](https://kubernetes.io/docs/concepts/configuration/configmap/) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
-
-```yaml
-configuration:
-  selector: ${SW_CONFIGURATION:k8s-configmap}
-  # [example] (../../../../oap-server/server-configuration/configuration-k8s-configmap/src/test/resources/skywalking-dynamic-configmap.example.yaml)
-  k8s-configmap:
-      # Sync period in seconds. Defaults to 60 seconds.
-      period: ${SW_CONFIG_CONFIGMAP_PERIOD:60}
-      # Which namespace is confiigmap deployed in.
-      namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}
-      # Labelselector is used to locate specific configmap
-      labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}
+{configKey}: |{subItemkey1}:{subItemValue1}
+             |{subItemkey2}:{subItemValue2}
+             |{subItemkey3}:{subItemValue3}
+             ...      
+```
+For example:
+```
+{core.default.endpoint-name-grouping-openapi}:|{customerAPI-v1}:{value of customerAPI-v1}
+                                              |{productAPI-v1}:{value of productAPI-v1}
+                                              |{productAPI-v2}:{value of productAPI-v2}
+                                              
 ```
-## Dynamic Configuration Nacos Implementation
+Supported configurations are as follows:
 
-[Nacos](https://github.com/alibaba/nacos) is also supported as Dynamic Configuration Center (DCC). To use it, please configure as follows:
+## Dynamic Configuration Implementations
+- [Dynamic Configuration Service, DCS](./dynamic-config-service.md)
+- [Zookeeper Implementation](./dynamic-config-zookeeper.md)
+- [Etcd Implementation](./dynamic-config-etcd.md)
+- [Consul Implementation](./dynamic-config-consul.md)
+- [Apollo Implementation](./dynamic-config-apollo.md)
+- [Kuberbetes Configmap Implementation](./dynamic-config-configmap.md)
+- [Nacos Implementation](./dynamic-config-nacos.md)
 
-```yaml
-configuration:
-  selector: ${SW_CONFIGURATION:nacos}
-  nacos:
-    # Nacos Server Host
-    serverAddr: ${SW_CONFIG_NACOS_SERVER_ADDR:127.0.0.1}
-    # Nacos Server Port
-    port: ${SW_CONFIG_NACOS_SERVER_PORT:8848}
-    # Nacos Configuration Group
-    group: ${SW_CONFIG_NACOS_SERVER_GROUP:skywalking}
-    # Nacos Configuration namespace
-    namespace: ${SW_CONFIG_NACOS_SERVER_NAMESPACE:}
-    # Unit seconds, sync period. Default fetch every 60 seconds.
-    period: ${SW_CONFIG_NACOS_PERIOD:60}
-    # the name of current cluster, set the name if you want to upstream system known.
-    clusterName: ${SW_CONFIG_NACOS_CLUSTER_NAME:default}
-```