From dd09d08c0cba8d2c66d01cf18a48643e64e040ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Thu, 23 Nov 2023 00:22:41 +0800 Subject: [PATCH] Support `Scratch The OAP Config Dump`. (#11579) --- dist-material/release-docs/LICENSE | 29 ++++--- docs/en/changes/changes.md | 1 + docs/en/debugging/config_dump.md | 74 +++++++++++++++++ .../setup/backend/configuration-vocabulary.md | 2 + docs/menu.yml | 4 + .../oap/server/core/CoreModuleProvider.java | 2 +- .../core/status/ServerStatusService.java | 56 ++++++++++++- .../module/ApplicationConfiguration.java | 14 ++-- .../debugging-query-plugin/pom.xml | 40 ++++++++++ .../oap/query/debug/DebuggingHTTPHandler.java | 43 ++++++++++ .../oap/query/debug/DebuggingQueryConfig.java | 32 ++++++++ .../oap/query/debug/DebuggingQueryModule.java | 33 ++++++++ .../query/debug/DebuggingQueryProvider.java | 79 +++++++++++++++++++ ...ing.oap.server.library.module.ModuleDefine | 19 +++++ ...g.oap.server.library.module.ModuleProvider | 19 +++++ oap-server/server-query-plugin/pom.xml | 15 ++++ oap-server/server-starter/pom.xml | 5 ++ .../server/starter/OAPServerBootstrap.java | 2 +- .../config/ApplicationConfigLoader.java | 6 ++ .../src/main/resources/application.yml | 6 ++ 20 files changed, 462 insertions(+), 19 deletions(-) create mode 100644 docs/en/debugging/config_dump.md create mode 100644 oap-server/server-query-plugin/debugging-query-plugin/pom.xml create mode 100644 oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingHTTPHandler.java create mode 100644 oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryConfig.java create mode 100644 oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryModule.java create mode 100644 oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryProvider.java create mode 100644 oap-server/server-query-plugin/debugging-query-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine create mode 100644 oap-server/server-query-plugin/debugging-query-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider diff --git a/dist-material/release-docs/LICENSE b/dist-material/release-docs/LICENSE index 2f5dc1458c..a6698c37e3 100644 --- a/dist-material/release-docs/LICENSE +++ b/dist-material/release-docs/LICENSE @@ -461,9 +461,11 @@ The following components are provided under the MIT License. See project link fo The text of each license is also included in licenses/LICENSE-[project].txt. https://npmjs.com/package/@babel/parser/v/7.23.0 7.23.0 MIT - https://npmjs.com/package/@ctrl/tinycolor/v/3.5.0 3.5.0 MIT + https://npmjs.com/package/@ctrl/tinycolor/v/3.6.1 3.6.1 MIT https://npmjs.com/package/@egjs/hammerjs/v/2.0.17 2.0.17 MIT - https://npmjs.com/package/@element-plus/icons-vue/v/1.1.4 1.1.4 MIT + https://npmjs.com/package/@element-plus/icons-vue/v/2.1.0 2.1.0 MIT + https://npmjs.com/package/@floating-ui/core/v/0.7.3 0.7.3 MIT + https://npmjs.com/package/@floating-ui/dom/v/0.5.4 0.5.4 MIT https://npmjs.com/package/@interactjs/actions/v/1.10.17 1.10.17 MIT https://npmjs.com/package/@interactjs/auto-scroll/v/1.10.17 1.10.17 MIT https://npmjs.com/package/@interactjs/auto-start/v/1.10.17 1.10.17 MIT @@ -484,10 +486,10 @@ The text of each license is also included in licenses/LICENSE-[project].txt. https://npmjs.com/package/@intlify/message-compiler/v/9.2.2 9.2.2 MIT https://npmjs.com/package/@intlify/shared/v/9.2.2 9.2.2 MIT https://npmjs.com/package/@intlify/vue-devtools/v/9.2.2 9.2.2 MIT - https://npmjs.com/package/@popperjs/core/v/2.11.6 2.11.6 MIT + https://npmjs.com/package/@popperjs/core/v/2.11.7 2.11.7 MIT https://npmjs.com/package/@types/hammerjs/v/2.0.41 2.0.41 MIT https://npmjs.com/package/@types/lodash/v/4.14.191 4.14.191 MIT - https://npmjs.com/package/@types/lodash-es/v/4.17.6 4.17.6 MIT + https://npmjs.com/package/@types/lodash-es/v/4.17.11 4.17.11 MIT https://npmjs.com/package/@vue/compiler-core/v/3.2.45 3.2.45 MIT https://npmjs.com/package/@vue/compiler-dom/v/3.2.45 3.2.45 MIT https://npmjs.com/package/@vue/compiler-sfc/v/3.2.45 3.2.45 MIT @@ -502,21 +504,28 @@ The text of each license is also included in licenses/LICENSE-[project].txt. https://npmjs.com/package/@vue/server-renderer/v/3.2.45 3.2.45 MIT https://npmjs.com/package/@vue/shared/v/3.2.45 3.2.45 MIT https://npmjs.com/package/async-validator/v/4.2.5 4.2.5 MIT - https://npmjs.com/package/axios/v/0.24.0 0.24.0 MIT + https://npmjs.com/package/asynckit/v/0.4.0 0.4.0 MIT + https://npmjs.com/package/axios/v/1.6.0 1.6.0 MIT + https://npmjs.com/package/axios/node_modules/form-data/v/4.0.0 4.0.0 MIT + https://npmjs.com/package/axios/node_modules/proxy-from-env/v/1.1.0 1.1.0 MIT https://npmjs.com/package/batch-processor/v/1.0.0 1.0.0 MIT https://mvnrepository.com/artifact/com.graphql-java-kickstart/graphql-java-tools/13.0.1 MIT https://mvnrepository.com/artifact/com.graphql-java/graphql-java/21.0 MIT https://mvnrepository.com/artifact/com.graphql-java/graphql-java-extended-scalars/18.1 MIT + https://npmjs.com/package/combined-stream/v/1.0.8 1.0.8 MIT https://npmjs.com/package/component-emitter/v/1.3.0 1.3.0 MIT https://npmjs.com/package/cssfilter/v/0.0.10 0.0.10 MIT https://npmjs.com/package/csstype/v/2.6.21 2.6.21 MIT https://npmjs.com/package/d3-dsv/node_modules/commander/v/7.2.0 7.2.0 MIT https://npmjs.com/package/d3-tip/v/0.9.1 0.9.1 MIT https://npmjs.com/package/dayjs/v/1.11.7 1.11.7 MIT - https://npmjs.com/package/element-plus/v/2.1.0 2.1.0 MIT - https://npmjs.com/package/element-plus/node_modules/@vueuse/core/v/7.7.1 7.7.1 MIT - https://npmjs.com/package/element-plus/node_modules/@vueuse/core/node_modules/@vueuse/shared/v/7.7.1 7.7.1 MIT - https://npmjs.com/package/element-plus/node_modules/@vueuse/core/node_modules/vue-demi/v/0.13.11 0.13.11 MIT + https://npmjs.com/package/delayed-stream/v/1.0.0 1.0.0 MIT + https://npmjs.com/package/element-plus/v/2.2.5 2.2.5 MIT + https://npmjs.com/package/element-plus/node_modules/@types/web-bluetooth/v/0.0.14 0.0.14 MIT + https://npmjs.com/package/element-plus/node_modules/@vueuse/core/v/8.9.4 8.9.4 MIT + https://npmjs.com/package/element-plus/node_modules/@vueuse/core/node_modules/@vueuse/shared/v/8.9.4 8.9.4 MIT + https://npmjs.com/package/element-plus/node_modules/@vueuse/core/node_modules/vue-demi/v/0.14.6 0.14.6 MIT + https://npmjs.com/package/element-plus/node_modules/@vueuse/metadata/v/8.9.4 8.9.4 MIT https://npmjs.com/package/element-resize-detector/v/1.2.4 1.2.4 MIT https://npmjs.com/package/escape-html/v/1.0.3 1.0.3 MIT https://npmjs.com/package/estree-walker/v/2.0.2 2.0.2 MIT @@ -527,6 +536,8 @@ The text of each license is also included in licenses/LICENSE-[project].txt. https://npmjs.com/package/lodash-es/v/4.17.21 4.17.21 MIT https://npmjs.com/package/lodash-unified/v/1.0.3 1.0.3 MIT https://npmjs.com/package/memoize-one/v/6.0.0 6.0.0 MIT + https://npmjs.com/package/mime-db/v/1.52.0 1.52.0 MIT + https://npmjs.com/package/mime-types/v/2.1.35 2.1.35 MIT https://npmjs.com/package/mitt/v/2.1.0 2.1.0 MIT https://npmjs.com/package/moment/v/2.29.4 2.29.4 MIT https://npmjs.com/package/monaco-editor/v/0.34.1 0.34.1 MIT diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 69acc4faa8..582eb1ba09 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -47,6 +47,7 @@ * Repleace go2sky E2E to GO agent. * Replace Metrics v2 protocol with MQE in UI templates and E2E Test. * Fix incorrect apisix metrics otel rules. +* Support `Scratch The OAP Config Dump`. #### UI diff --git a/docs/en/debugging/config_dump.md b/docs/en/debugging/config_dump.md new file mode 100644 index 0000000000..78884dee3e --- /dev/null +++ b/docs/en/debugging/config_dump.md @@ -0,0 +1,74 @@ +# Scratch The OAP Config Dump + +SkyWalking OAP behaviors could be controlled through hundreds of configurations. It is hard to know what is the final +configuration as all the configurations could be overrided by system environments. + +The core config file [application.yml](../../../oap-server/server-starter/src/main/resources/application.yml) lists all +the configurations +and their default values. However, it is still hard to know the runtime value. + +Scratch is a tool to dump the final configuration. It is provided within OAP rest server, which could be accessed +through HTTP GET `http://{core restHost}:{core restPort}/debugging/config/dump`. + +```shell +> curl http://127.0.0.1:12800/debugging/config/dump +cluster.provider=standalone +core.provider=default +core.default.prepareThreads=2 +core.default.restHost=0.0.0.0 +core.default.searchableLogsTags=level,http.status_code +core.default.role=Mixed +core.default.persistentPeriod=25 +core.default.syncPeriodHttpUriRecognitionPattern=10 +core.default.restIdleTimeOut=30000 +core.default.dataKeeperExecutePeriod=5 +core.default.topNReportPeriod=10 +core.default.gRPCSslTrustedCAPath= +core.default.downsampling=[Hour, Day] +core.default.serviceNameMaxLength=70 +core.default.gRPCSslEnabled=false +core.default.restPort=12800 +core.default.serviceCacheRefreshInterval=10 +... +``` + +All booting configurations with their runtime values are listed, including the selected provider for each module. + +## Protect The Secrets + +Some of the configurations contain sensitive values, such as username, password, token, etc. These values would be +masked +in the dump result. For example, the `storage.elasticsearch.password` in the following configurations, + +```yaml +storage: + selector: ${SW_STORAGE:h2} + elasticsearch: + password: ${SW_ES_PASSWORD:""} +``` + +It would be masked and shown as `********` in the dump result. + +```shell +> curl http://127.0.0.1:12800/debugging/config/dump +... +storage.elasticsearch.password=******** +... +``` + +By default, we mask the config keys through the following configurations. + +```yaml +# Include the list of keywords to filter configurations including secrets. Separate keywords by a comma. +keywords4MaskingSecretsOfConfig: ${SW_CORE_KEYWORDS_FOR_MASKING_SECRETS:user,password,token,accessKey,secretKey} +``` + +## Disable The Config Dump Service + +By default, this service is open for helping users to debug and diagnose. If you want to disable it, you need to diable the whole +`debugging-query` module through setting `selector=-`. + +```yaml +debugging-query: + selector: ${SW_DEBUGGING_QUERY:-} +``` \ No newline at end of file diff --git a/docs/en/setup/backend/configuration-vocabulary.md b/docs/en/setup/backend/configuration-vocabulary.md index 961dde11e2..cb4d539a3a 100644 --- a/docs/en/setup/backend/configuration-vocabulary.md +++ b/docs/en/setup/backend/configuration-vocabulary.md @@ -308,6 +308,8 @@ The Configuration Vocabulary lists all available configurations provided by `app | - | - | kafkaTopicLog | Kafka topic name for log. | SW_EXPORTER_KAFKA_TOPIC_LOG | skywalking-export-log | | - | - | exportErrorStatusTraceOnly | Export error status trace segments through the Kafka channel. | SW_EXPORTER_KAFKA_TRACE_FILTER_ERROR | false | | health-checker | default | checkIntervalSeconds | The period of checking OAP internal health status (in seconds). | SW_HEALTH_CHECKER_INTERVAL_SECONDS | 5 | +| debugging-query | default | | | | | +| - | - | keywords4MaskingSecretsOfConfig | Include the list of keywords to filter configurations including secrets. Separate keywords by a comma. | SW_DEBUGGING_QUERY_KEYWORDS_FOR_MASKING_SECRETS | user,password,token,accessKey,secretKey,authentication | | configuration-discovery | default | disableMessageDigest | If true, agent receives the latest configuration every time, even without making any changes. By default, OAP uses the SHA512 message digest mechanism to detect changes in configuration. | SW_DISABLE_MESSAGE_DIGEST | false | | receiver-event | default | gRPC services that handle events data. | - | - | | | aws-firehose-receiver | default | host | Binding IP of HTTP server | SW_RECEIVER_AWS_FIREHOSE_HTTP_HOST | 0.0.0.0 | diff --git a/docs/menu.yml b/docs/menu.yml index a01ed1d4f6..9c05c45777 100644 --- a/docs/menu.yml +++ b/docs/menu.yml @@ -323,6 +323,10 @@ catalog: path: "/en/api/logql-service" - name: "Security Notice" path: "/en/security/readme" + - name: "Debugging" + catalog: + - name: "Scratch The OAP Config Dump" + path: "en/debugging/config_dump" - name: "Academy" catalog: - name: "Scaling SkyWalking server automatically in kubernetes" 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 ef4a2b0767..5599aeba2e 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 @@ -255,7 +255,7 @@ public class CoreModuleProvider extends ModuleProvider { httpServer.initialize(); this.registerServiceImplementation(ConfigService.class, new ConfigService(moduleConfig, this)); - this.registerServiceImplementation(ServerStatusService.class, new ServerStatusService(getManager())); + this.registerServiceImplementation(ServerStatusService.class, new ServerStatusService(getManager(), moduleConfig)); this.registerServiceImplementation( DownSamplingConfigService.class, new DownSamplingConfigService(moduleConfig.getDownsampling())); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/status/ServerStatusService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/status/ServerStatusService.java index c916a777ff..3559a9de8c 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/status/ServerStatusService.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/status/ServerStatusService.java @@ -22,6 +22,8 @@ import java.util.ArrayList; import java.util.List; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.apache.skywalking.oap.server.core.CoreModuleConfig; +import org.apache.skywalking.oap.server.library.module.ApplicationConfiguration; import org.apache.skywalking.oap.server.library.module.ModuleManager; import org.apache.skywalking.oap.server.library.module.Service; import org.apache.skywalking.oap.server.telemetry.TelemetryModule; @@ -38,6 +40,7 @@ import org.apache.skywalking.oap.server.telemetry.api.MetricsTag; @RequiredArgsConstructor public class ServerStatusService implements Service { private final ModuleManager manager; + private final CoreModuleConfig moduleConfig; @Getter private BootingStatus bootingStatus = new BootingStatus(); @Getter @@ -45,7 +48,9 @@ public class ServerStatusService implements Service { private List statusWatchers = new ArrayList<>(); - public void bootedNow(long uptime) { + private List configurations; + + public void bootedNow(List configurations, long uptime) { bootingStatus.setBooted(true); bootingStatus.setUptime(uptime); manager.find(TelemetryModule.NAME) @@ -55,6 +60,7 @@ public class ServerStatusService implements Service { // Set uptime to second .setValue(uptime / 1000d); this.statusWatchers.forEach(watcher -> watcher.onServerBooted(bootingStatus)); + this.configurations = configurations; } public void rebalancedCluster(long rebalancedTime) { @@ -62,7 +68,10 @@ public class ServerStatusService implements Service { manager.find(TelemetryModule.NAME) .provider() .getService(MetricsCreator.class) - .createGauge("cluster_rebalanced_time", "oap cluster rebalanced time after scale", MetricsTag.EMPTY_KEY, MetricsTag.EMPTY_VALUE) + .createGauge( + "cluster_rebalanced_time", "oap cluster rebalanced time after scale", MetricsTag.EMPTY_KEY, + MetricsTag.EMPTY_VALUE + ) .setValue(rebalancedTime / 1000d); this.statusWatchers.forEach(watcher -> watcher.onClusterRebalanced(clusterStatus)); @@ -71,4 +80,47 @@ public class ServerStatusService implements Service { public void registerWatcher(ServerStatusWatcher watcher) { this.statusWatchers.add(watcher); } + + /** + * @return a complete list of booting configurations with effected values. + * @since 9.7.0 + */ + public String dumpBootingConfigurations(String keywords4MaskingSecretsOfConfig) { + if (configurations == null || configurations.isEmpty()) { + return "No available booting configurations."; + } + final String[] keywords = keywords4MaskingSecretsOfConfig.split(","); + StringBuilder configList = new StringBuilder(); + for (ApplicationConfiguration.ModuleConfiguration configuration : configurations) { + final String moduleName = configuration.getModuleName(); + if (configuration.getProviders().size() == 1) { + configList.append(moduleName) + .append(".provider=") + .append(configuration.getProviders().keySet().iterator().next()) + .append("\n"); + } + configuration.getProviders().forEach( + (providerName, providerConfiguration) -> + providerConfiguration.getProperties().forEach( + (key, value) -> { + for (final String keyword : keywords) { + if (key.toString().toLowerCase().contains(keyword.toLowerCase())) { + value = "******"; + } + } + + configList.append(moduleName) + .append(".") + .append(providerName) + .append(".") + .append(key) + .append("=") + .append(value) + .append("\n"); + } + ) + ); + } + return configList.toString(); + } } diff --git a/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ApplicationConfiguration.java b/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ApplicationConfiguration.java index 9a7ac14265..8c295bd36d 100644 --- a/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ApplicationConfiguration.java +++ b/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ApplicationConfiguration.java @@ -20,6 +20,7 @@ package org.apache.skywalking.oap.server.library.module; import java.util.HashMap; import java.util.Properties; +import lombok.Getter; /** * Modularization configurations. The {@link ModuleManager} is going to start, lookup, start modules based on this. @@ -32,7 +33,7 @@ public class ApplicationConfiguration { } public ModuleConfiguration addModule(String moduleName) { - ModuleConfiguration newModule = new ModuleConfiguration(); + ModuleConfiguration newModule = new ModuleConfiguration(moduleName); modules.put(moduleName, newModule); return newModule; } @@ -49,9 +50,13 @@ public class ApplicationConfiguration { * The configurations about a certain module. */ public static class ModuleConfiguration { + @Getter + private final String moduleName; + @Getter private HashMap providers = new HashMap<>(); - private ModuleConfiguration() { + private ModuleConfiguration(String moduleName) { + this.moduleName = moduleName; } public Properties getProviderConfiguration(String name) { @@ -73,14 +78,11 @@ public class ApplicationConfiguration { * The configuration about a certain provider of a module. */ public static class ProviderConfiguration { + @Getter private Properties properties; ProviderConfiguration(Properties properties) { this.properties = properties; } - - private Properties getProperties() { - return properties; - } } } diff --git a/oap-server/server-query-plugin/debugging-query-plugin/pom.xml b/oap-server/server-query-plugin/debugging-query-plugin/pom.xml new file mode 100644 index 0000000000..038be9eada --- /dev/null +++ b/oap-server/server-query-plugin/debugging-query-plugin/pom.xml @@ -0,0 +1,40 @@ + + + + + + server-query-plugin + org.apache.skywalking + 9.7.0-SNAPSHOT + + 4.0.0 + + debugging-query-plugin + jar + + + + org.apache.skywalking + server-core + ${project.version} + + + \ No newline at end of file diff --git a/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingHTTPHandler.java b/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingHTTPHandler.java new file mode 100644 index 0000000000..cd6ef86f5f --- /dev/null +++ b/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingHTTPHandler.java @@ -0,0 +1,43 @@ +/* + * 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.query.debug; + +import com.linecorp.armeria.server.annotation.Get; +import lombok.extern.slf4j.Slf4j; +import org.apache.skywalking.oap.server.core.CoreModule; +import org.apache.skywalking.oap.server.core.status.ServerStatusService; +import org.apache.skywalking.oap.server.library.module.ModuleManager; + +@Slf4j +public class DebuggingHTTPHandler { + private final ServerStatusService serverStatusService; + final DebuggingQueryConfig config; + + public DebuggingHTTPHandler(final ModuleManager manager, final DebuggingQueryConfig config) { + serverStatusService = manager.find(CoreModule.NAME) + .provider() + .getService(ServerStatusService.class); + this.config = config; + } + + @Get("/debugging/config/dump") + public String dumpConfigurations() { + return serverStatusService.dumpBootingConfigurations(config.getKeywords4MaskingSecretsOfConfig()); + } +} diff --git a/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryConfig.java b/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryConfig.java new file mode 100644 index 0000000000..217ced2427 --- /dev/null +++ b/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryConfig.java @@ -0,0 +1,32 @@ +/* + * 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.query.debug; + +import lombok.Getter; +import org.apache.skywalking.oap.server.library.module.ModuleConfig; + +@Getter +public class DebuggingQueryConfig extends ModuleConfig { + /** + * Include the list of keywords to filter configurations including secrets. Separate keywords by a comma. + * + * @since 9.7.0 + */ + private String keywords4MaskingSecretsOfConfig = "user,password,token,accessKey,secretKey,authentication"; +} diff --git a/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryModule.java b/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryModule.java new file mode 100644 index 0000000000..02b5fd5991 --- /dev/null +++ b/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryModule.java @@ -0,0 +1,33 @@ +/* + * 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.query.debug; + +import org.apache.skywalking.oap.server.library.module.ModuleDefine; + +public class DebuggingQueryModule extends ModuleDefine { + public static final String NAME = "debugging-query"; + + public DebuggingQueryModule() { + super(NAME); + } + + public Class[] services() { + return new Class[0]; + } +} diff --git a/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryProvider.java b/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryProvider.java new file mode 100644 index 0000000000..a3618feffb --- /dev/null +++ b/oap-server/server-query-plugin/debugging-query-plugin/src/main/java/org/apache/skywalking/oap/query/debug/DebuggingQueryProvider.java @@ -0,0 +1,79 @@ +/* + * 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.query.debug; + +import com.linecorp.armeria.common.HttpMethod; +import java.util.Collections; +import org.apache.skywalking.oap.server.core.CoreModule; +import org.apache.skywalking.oap.server.core.server.HTTPHandlerRegister; +import org.apache.skywalking.oap.server.library.module.ModuleConfig; +import org.apache.skywalking.oap.server.library.module.ModuleDefine; +import org.apache.skywalking.oap.server.library.module.ModuleProvider; +import org.apache.skywalking.oap.server.library.module.ModuleStartException; +import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException; + +public class DebuggingQueryProvider extends ModuleProvider { + public static final String NAME = "default"; + + private DebuggingQueryConfig config; + + public String name() { + return NAME; + } + + public Class module() { + return DebuggingQueryModule.class; + } + + public ConfigCreator newConfigCreator() { + return new ConfigCreator() { + @Override + public Class type() { + return DebuggingQueryConfig.class; + } + + @Override + public void onInitialized(final DebuggingQueryConfig initialized) { + config = initialized; + } + }; + } + + public void prepare() throws ServiceNotProvidedException { + + } + + public void start() throws ServiceNotProvidedException { + HTTPHandlerRegister service = getManager().find(CoreModule.NAME) + .provider() + .getService(HTTPHandlerRegister.class); + service.addHandler( + new DebuggingHTTPHandler(getManager(), config), + Collections.singletonList(HttpMethod.GET) + ); + } + + public void notifyAfterCompleted() throws ServiceNotProvidedException, ModuleStartException { + + } + + public String[] requiredModules() { + return new String[] {CoreModule.NAME}; + } +} diff --git a/oap-server/server-query-plugin/debugging-query-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine b/oap-server/server-query-plugin/debugging-query-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine new file mode 100644 index 0000000000..0a5b82263a --- /dev/null +++ b/oap-server/server-query-plugin/debugging-query-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine @@ -0,0 +1,19 @@ +# +# 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. +# +# + +org.apache.skywalking.oap.query.debug.DebuggingQueryModule diff --git a/oap-server/server-query-plugin/debugging-query-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider b/oap-server/server-query-plugin/debugging-query-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider new file mode 100644 index 0000000000..32aee0d7b1 --- /dev/null +++ b/oap-server/server-query-plugin/debugging-query-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider @@ -0,0 +1,19 @@ +# +# 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. +# +# + +org.apache.skywalking.oap.query.debug.DebuggingQueryProvider \ No newline at end of file diff --git a/oap-server/server-query-plugin/pom.xml b/oap-server/server-query-plugin/pom.xml index a5c4cade4b..124c163b27 100644 --- a/oap-server/server-query-plugin/pom.xml +++ b/oap-server/server-query-plugin/pom.xml @@ -23,6 +23,20 @@ org.apache.skywalking 9.7.0-SNAPSHOT + + + org.apache.skywalking + library-module + 9.7.0-SNAPSHOT + compile + + + org.apache.skywalking + server-core + 9.7.0-SNAPSHOT + compile + + 4.0.0 server-query-plugin @@ -32,5 +46,6 @@ zipkin-query-plugin promql-plugin logql-plugin + debugging-query-plugin diff --git a/oap-server/server-starter/pom.xml b/oap-server/server-starter/pom.xml index a6248138e6..7b41fd091b 100644 --- a/oap-server/server-starter/pom.xml +++ b/oap-server/server-starter/pom.xml @@ -111,6 +111,11 @@ zipkin-query-plugin ${project.version} + + org.apache.skywalking + debugging-query-plugin + ${project.version} + org.apache.skywalking envoy-metrics-receiver-plugin diff --git a/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerBootstrap.java b/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerBootstrap.java index 4814f25285..fe2d1feec5 100644 --- a/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerBootstrap.java +++ b/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerBootstrap.java @@ -54,7 +54,7 @@ public class OAPServerBootstrap { manager.find(CoreModule.NAME) .provider() .getService(ServerStatusService.class) - .bootedNow(System.currentTimeMillis()); + .bootedNow(configLoader.getResolvedConfigurations(), System.currentTimeMillis()); if (RunningMode.isInitMode()) { log.info("OAP starts up in init mode successfully, exit now..."); diff --git a/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java b/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java index ea2b6acc7c..e7f572c3cf 100644 --- a/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java +++ b/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java @@ -18,6 +18,8 @@ package org.apache.skywalking.oap.server.starter.config; +import java.util.List; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.oap.server.library.module.ApplicationConfiguration; import org.apache.skywalking.oap.server.library.module.ProviderNotFoundException; @@ -47,10 +49,13 @@ public class ApplicationConfigLoader implements ConfigLoader resolvedConfigurations; public ApplicationConfigLoader(final TerminalFriendlyTable bootingParameters) { this.bootingParameters = bootingParameters; this.yaml = new Yaml(); + this.resolvedConfigurations = new ArrayList<>(); } @Override @@ -97,6 +102,7 @@ public class ApplicationConfigLoader implements ConfigLoader