diff --git a/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/pom.xml b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/pom.xml new file mode 100644 index 00000000..68b75f51 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/pom.xml @@ -0,0 +1,78 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-example + ${revision} + + hippo4j-spring-boot-starter-es-monitor-example + + + true + + + + + cn.hippo4j + hippo4j-example-core + ${revision} + + + + cn.hippo4j + hippo4j-core-spring-boot-starter + ${revision} + + + + org.springframework.boot + spring-boot-starter-web + + + + org.apache.tomcat.embed + tomcat-embed-core + ${tomcat-embed-core.version} + + + + + + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + diff --git a/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/java/cn/hippo4j/example/es/monitor/Hippo4JExampleEsMonitorApplication.java b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/java/cn/hippo4j/example/es/monitor/Hippo4JExampleEsMonitorApplication.java new file mode 100644 index 00000000..83903493 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/java/cn/hippo4j/example/es/monitor/Hippo4JExampleEsMonitorApplication.java @@ -0,0 +1,31 @@ +/* + * 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 cn.hippo4j.example.es.monitor; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@EnableDynamicThreadPool +@SpringBootApplication(scanBasePackages = {"cn.hippo4j.example.core", "cn.hippo4j.monitor"}) +public class Hippo4JExampleEsMonitorApplication { + + public static void main(String[] args) { + SpringApplication.run(Hippo4JExampleEsMonitorApplication.class, args); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/resources/application.properties b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/resources/application.properties new file mode 100644 index 00000000..33e86166 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/resources/application.properties @@ -0,0 +1,41 @@ +server.port=8088 + +server.servlet.context-path=/example + +spring.profiles.active=dev +spring.application.name=dynamic-threadpool-example + +es.host = xxx +es.scheme = xxx +es.userName = xxx +es.password = xxx +es.thread-pool-state.index.name = thread-pool-state + +spring.dynamic.thread-pool.item-id=test +spring.dynamic.thread-pool.enable=true +spring.dynamic.thread-pool.banner=false +spring.dynamic.thread-pool.collect=true +spring.dynamic.thread-pool.collect-type=es +spring.dynamic.thread-pool.notify-platforms[0].platform=DING +spring.dynamic.thread-pool.notify-platforms[0].token=xxx +spring.dynamic.thread-pool.notify-platforms[0].secret=xxx +spring.dynamic.thread-pool.apollo.namespace=threadpool.yaml +spring.dynamic.thread-pool.config-file-type=yaml +spring.dynamic.thread-pool.alarm=true +spring.dynamic.thread-pool.check-state-interval=3000 +spring.dynamic.thread-pool.capacity-alarm=80 +spring.dynamic.thread-pool.alarm-interval=8 +spring.dynamic.thread-pool.executors[0].thread-pool-id=message-consume +spring.dynamic.thread-pool.executors[0].core-pool-size=32 +spring.dynamic.thread-pool.executors[0].maximum-pool-size=32 +spring.dynamic.thread-pool.executors[0].queue-capacity=999 +spring.dynamic.thread-pool.executors[0].execute-time-out=1500 +spring.dynamic.thread-pool.executors[0].blocking-queue=ResizableCapacityLinkedBlockIngQueue +spring.dynamic.thread-pool.executors[0].rejected-handler=CallerRunsPolicy +spring.dynamic.thread-pool.executors[0].keep-alive-time=1024 +spring.dynamic.thread-pool.executors[0].allow-core-thread-time-out=true +spring.dynamic.thread-pool.executors[0].thread-name-prefix=untimely-thread-pool +spring.dynamic.thread-pool.executors[0].notify.is-alarm=true +spring.dynamic.thread-pool.executors[0].notify.capacity-alarm=20 +spring.dynamic.thread-pool.executors[0].notify.interval=2 +spring.dynamic.thread-pool.executors[0].notify.receive=xxx diff --git a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java new file mode 100644 index 00000000..c43ff9f0 --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java @@ -0,0 +1,81 @@ +package cn.hippo4j.monitor.es; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import com.google.common.base.Throwables; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.common.Strings; +import org.springframework.core.env.Environment; + +import java.util.List; + +/** + * Create by yuyang + * 2022/8/4 16:26 + */ +@Slf4j +public class EsClientHolder { + + private static String host; + private static String scheme; + private static String userName; + private static String password; + + private static RestHighLevelClient client; + + private static RestHighLevelClient initRestClient() { + try { + Environment environment = ApplicationContextHolder.getInstance().getEnvironment(); + host = environment.getProperty("es.host"); + scheme = environment.getProperty("es.schema"); + userName = environment.getProperty("es.userName"); + password = environment.getProperty("es.password"); + + List hosts = parseHosts(); + + if (Strings.isNullOrEmpty(userName) || Strings.isNullOrEmpty(password)) { + client = new RestHighLevelClient(RestClient.builder(hosts.toArray(new HttpHost[]{}))); + } else { + client = new RestHighLevelClient(RestClient.builder(hosts.toArray(new HttpHost[]{})) + .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider()))); + } + + log.info("[ES RestHighLevelClient] success to connect es!host:{},scheme:{}", host, scheme); + return client; + } catch (Exception ex) { + log.error("[ES RestHighLevelClient] fail to connect es! cause:{}", Throwables.getStackTraceAsString(ex)); + } + return null; + } + + private static BasicCredentialsProvider getCredentialsProvider() { + if (!Strings.isNullOrEmpty(userName) && !Strings.isNullOrEmpty(password)) { + final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, + new UsernamePasswordCredentials(userName, password)); + return credentialsProvider; + } + return null; + } + + public static RestHighLevelClient getClient() { + return null == client ? initRestClient() : client; + } + + private static List parseHosts() { + String[] hostAndPorts = host.split(","); + + List hosts = Lists.newArrayList(); + for (String hostAndPort : hostAndPorts) { + hosts.add(new HttpHost(hostAndPort.split(":")[0], Integer.parseInt(hostAndPort.split(":")[1]), scheme)); + } + return hosts; + } + +} diff --git a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java index f49832fb..aeed1d5c 100644 --- a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java +++ b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java @@ -19,54 +19,128 @@ package cn.hippo4j.monitor.es; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; +import cn.hippo4j.monitor.es.model.EsThreadPoolRunStateInfo; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.io.FileUtil; import com.example.monitor.base.AbstractDynamicThreadPoolMonitor; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import io.micrometer.core.instrument.Metrics; -import io.micrometer.core.instrument.Tag; +import lombok.extern.slf4j.Slf4j; +import org.elasticsearch.action.admin.indices.alias.Alias; +import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; +import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; +import org.elasticsearch.action.admin.indices.get.GetIndexRequest; +import org.elasticsearch.action.index.IndexRequest; +import org.elasticsearch.action.index.IndexResponse; +import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.xcontent.XContentType; import org.springframework.core.env.Environment; +import org.springframework.util.StringUtils; -import java.util.Map; - -/** - * Prometheus monitor handler. - */ +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; +@Slf4j public class EsMonitorHandler extends AbstractDynamicThreadPoolMonitor { - private final Map RUN_STATE_CACHE = Maps.newConcurrentMap(); - public EsMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { super(threadPoolRunStateHandler); } + private AtomicBoolean isIndexExist = null; + @Override protected void execute(ThreadPoolRunStateInfo poolRunStateInfo) { - Environment environment = ApplicationContextHolder.getInstance().getEnvironment(); - RestHighLevelClient esClient = ApplicationContextHolder.getBean(RestHighLevelClient.class); + EsThreadPoolRunStateInfo esThreadPoolRunStateInfo = new EsThreadPoolRunStateInfo(); + BeanUtil.copyProperties(poolRunStateInfo, esThreadPoolRunStateInfo); + Environment environment = ApplicationContextHolder.getInstance().getEnvironment(); + String indexName = environment.getProperty("es.index.name", "thread-pool-state"); String applicationName = environment.getProperty("spring.application.name", "application"); - // Iterable tags = Lists.newArrayList( - // Tag.of(DYNAMIC_THREAD_POOL_ID_TAG, poolRunStateInfo.getTpId()), - // Tag.of(APPLICATION_NAME_TAG, applicationName)); - // // load - // Metrics.gauge(metricName("current.load"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getSimpleCurrentLoad); - // Metrics.gauge(metricName("peak.load"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getSimplePeakLoad); - // // thread pool - // Metrics.gauge(metricName("core.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getCoreSize); - // Metrics.gauge(metricName("maximum.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getMaximumSize); - // Metrics.gauge(metricName("current.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getPoolSize); - // Metrics.gauge(metricName("largest.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getLargestPoolSize); - // Metrics.gauge(metricName("active.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getActiveSize); - // // queue - // Metrics.gauge(metricName("queue.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getQueueSize); - // Metrics.gauge(metricName("queue.capacity"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getQueueCapacity); - // Metrics.gauge(metricName("queue.remaining.capacity"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getQueueRemainingCapacity); - // // other - // Metrics.gauge(metricName("completed.task.count"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getCompletedTaskCount); - // Metrics.gauge(metricName("reject.count"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getRejectCount); + + if (!this.isExists(indexName)) { + List rawMapping = FileUtil.readLines(new File(Thread.currentThread().getContextClassLoader().getResource("mapping.json").getPath()), StandardCharsets.UTF_8); + String mapping = String.join(" ", rawMapping); + //if index doesn't exsit, this function may try to create one, but recommend to create index manually. + this.createIndex(indexName, "_doc", mapping, null, null, null); + } + + esThreadPoolRunStateInfo.setApplicationName(applicationName); + esThreadPoolRunStateInfo.setId("thread-pool-state-" + System.currentTimeMillis()); + this.log2Es(esThreadPoolRunStateInfo, indexName); + } + + public void log2Es(EsThreadPoolRunStateInfo esThreadPoolRunStateInfo, String indexName) { + RestHighLevelClient client = EsClientHolder.getClient(); + + try { + IndexRequest request = new IndexRequest(indexName, "_doc"); + request.id(esThreadPoolRunStateInfo.getId()); + String stateJson = JSONUtil.toJSONString(esThreadPoolRunStateInfo); + request.source(stateJson, XContentType.JSON); + + IndexResponse response = client.index(request, RequestOptions.DEFAULT); + log.info("write thread-pool state to es:{}", stateJson); + } catch (Exception ex) { + log.error("es index error, the exception was thrown in create index. name:{},type:{},id:{}. {} ", + indexName, + "_doc", + esThreadPoolRunStateInfo.getId(), + ex); + } + } + + public synchronized boolean isExists(String index) { + if (Objects.isNull(isIndexExist)) { + boolean exists = false; + GetIndexRequest request = new GetIndexRequest(); + request.indices(index); + try { + RestHighLevelClient client = EsClientHolder.getClient(); + exists = client.indices().exists(request, RequestOptions.DEFAULT); + } catch (IOException e) { + e.printStackTrace(); + } + isIndexExist = new AtomicBoolean(exists); + } + return isIndexExist.get(); + } + + public boolean createIndex(String index, String type, String mapping, Integer shards, Integer replicas, String alias) { + RestHighLevelClient client = EsClientHolder.getClient(); + boolean acknowledged = false; + CreateIndexRequest request = new CreateIndexRequest(index); + if (StringUtils.hasText(mapping)) { + request.mapping(type, mapping, XContentType.JSON); + } + if (!Objects.isNull(shards) && !Objects.isNull(replicas)) { + request.settings(Settings.builder() + .put("index.number_of_shards", shards) //5 + .put("index.number_of_replicas", replicas));//1 + } + if (StringUtils.hasText(alias)) { + request.alias(new Alias(alias)); + } + try { + CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); + acknowledged = createIndexResponse.isAcknowledged(); + } catch (IOException e) { + e.printStackTrace(); + } + if (acknowledged) { + log.info("create es index success"); + isIndexExist.set(true); + } else { + log.error("create es index fail"); + throw new RuntimeException("cannot auto create thread-pool state es index"); + } + return acknowledged; + } @Override diff --git a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/config/EsConfig.java b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/config/EsConfig.java deleted file mode 100644 index 50daa653..00000000 --- a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/config/EsConfig.java +++ /dev/null @@ -1,148 +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 cn.hippo4j.monitor.es.config; - -import com.google.common.base.Throwables; -import com.google.common.collect.Lists; -import lombok.Getter; -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.elasticsearch.client.RestClient; -import org.elasticsearch.client.RestHighLevelClient; -import org.elasticsearch.common.Strings; -import org.elasticsearch.common.unit.TimeValue; -import org.elasticsearch.search.builder.SearchSourceBuilder; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.List; - -@Slf4j -@Configuration -@ConfigurationProperties(prefix = "es") -@Getter -@Setter -public class EsConfig { - - // cluster name - private String cluster; - // such as ip1:9200,ip2:9200 - private String host; - // such as :http - private String scheme; - private String userName; - private String password; - private int timeout; - - private RestHighLevelClient client; - @Getter - private SearchSourceBuilder searchBuilder; - - public EsConfig() { - } - - public EsConfig(String host) { - initRestClient(host, null, null); - } - - public EsConfig(String host, String userName, String password) { - initRestClient(host, userName, password); - } - - public RestHighLevelClient initRestClient(String host, String userName, String password) { - this.host = host; - this.userName = userName; - this.password = password; - - return initRestClient(); - } - - @Bean(destroyMethod = "close") - protected RestHighLevelClient initRestClient() { - try { - List hosts = parseHosts(); - - if (Strings.isNullOrEmpty(userName) || Strings.isNullOrEmpty(password)) { - client = new RestHighLevelClient(RestClient.builder(hosts.toArray(new HttpHost[]{}))); - } else { - client = new RestHighLevelClient(RestClient.builder(hosts.toArray(new HttpHost[]{})) - .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider()))); - } - - log.info("[ES RestHighLevelClient] ES连接成功!host:{},scheme:{}", host, scheme); - return client; - } catch (Exception ex) { - log.error("[ES RestHighLevelClient] ES连接失败! cause:{}", Throwables.getStackTraceAsString(ex)); - } - return null; - } - - @Bean - protected BasicCredentialsProvider getCredentialsProvider() { - if (!Strings.isNullOrEmpty(userName) && !Strings.isNullOrEmpty(password)) { - final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, - new UsernamePasswordCredentials(userName, password)); - return credentialsProvider; - } - return null; - } - - public RestHighLevelClient getClient() { - return null == client ? initRestClient() : client; - } - - @Bean - public SearchSourceBuilder getSearchSourceBuilder() { - if (null == searchBuilder) { - SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); - sourceBuilder.timeout(new TimeValue(timeout)); - - searchBuilder = sourceBuilder; - } - - return searchBuilder; - } - - private List parseHosts() { - String[] hostAndPorts = host.split(","); - - List hosts = Lists.newArrayList(); - for (String hostAndPort : hostAndPorts) { - hosts.add(new HttpHost(hostAndPort.split(":")[0], Integer.parseInt(hostAndPort.split(":")[1]), scheme)); - } - return hosts; - } - - public void printDebugConfigs() { - String debug = "EsSettings: \n" + - "cluster:" + cluster + "\n" + - "host:" + host + "\n" + - "scheme:" + scheme + "\n" + - "userName:" + userName + "\n" + - "password:" + password + "\n" + - "timeout:" + timeout; - - log.info(debug); - } -} diff --git a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/model/EsThreadPoolRunStateInfo.java b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/model/EsThreadPoolRunStateInfo.java new file mode 100644 index 00000000..de5688f0 --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/model/EsThreadPoolRunStateInfo.java @@ -0,0 +1,19 @@ +package cn.hippo4j.monitor.es.model; + +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import lombok.Getter; +import lombok.Setter; + +/** + * Create by yuyang + * 2022/8/4 17:17 + */ +@Getter +@Setter +public class EsThreadPoolRunStateInfo extends ThreadPoolRunStateInfo{ + + private String Id; + + private String applicationName; + +} diff --git a/hippo4j-monitor/hippo4j-monitor-es/src/main/resources/mapping.json b/hippo4j-monitor/hippo4j-monitor-es/src/main/resources/mapping.json new file mode 100644 index 00000000..83255022 --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-es/src/main/resources/mapping.json @@ -0,0 +1,78 @@ + { + "_doc": { + "properties": { + "activeSize": { + "type": "long" + }, + "applicationName": { + "type": "keyword" + }, + "clientLastRefreshTime": { + "type": "text" + }, + "completedTaskCount": { + "type": "long" + }, + "coreSize": { + "type": "long" + }, + "currentLoad": { + "type": "text" + }, + "freeMemory": { + "type": "text" + }, + "host": { + "type": "keyword" + }, + "id": { + "type": "text" + }, + "largestPoolSize": { + "type": "long" + }, + "maximumSize": { + "type": "long" + }, + "memoryProportion": { + "type": "text" + }, + "peakLoad": { + "type": "text" + }, + "poolSize": { + "type": "long" + }, + "queueCapacity": { + "type": "long" + }, + "queueRemainingCapacity": { + "type": "long" + }, + "queueSize": { + "type": "long" + }, + "queueType": { + "type": "text" + }, + "rejectCount": { + "type": "long" + }, + "rejectedName": { + "type": "text" + }, + "simpleCurrentLoad": { + "type": "long" + }, + "simplePeakLoad": { + "type": "long" + }, + "timestamp": { + "type": "date" + }, + "tpId": { + "type": "keyword" + } + } + } + } \ No newline at end of file diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/DynamicThreadPoolCoreAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/DynamicThreadPoolCoreAutoConfiguration.java index dbbc7107..ac5fdc76 100644 --- a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/DynamicThreadPoolCoreAutoConfiguration.java +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/DynamicThreadPoolCoreAutoConfiguration.java @@ -59,7 +59,8 @@ import org.springframework.core.annotation.Order; @Import({ ConfigHandlerConfiguration.EmbeddedNacos.class, ConfigHandlerConfiguration.EmbeddedNacosCloud.class, ConfigHandlerConfiguration.EmbeddedApollo.class, ConfigHandlerConfiguration.EmbeddedZookeeper.class, - MonitorHandlerConfiguration.EmbeddedLogMonitor.class, MonitorHandlerConfiguration.EmbeddedPrometheusMonitor.class + MonitorHandlerConfiguration.EmbeddedLogMonitor.class, MonitorHandlerConfiguration.EmbeddedPrometheusMonitor.class, + MonitorHandlerConfiguration.EmbeddedEsMonitor.class }) public class DynamicThreadPoolCoreAutoConfiguration { diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/condition/EsMonitorCondition.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/condition/EsMonitorCondition.java index a6758d3c..ee791f44 100644 --- a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/condition/EsMonitorCondition.java +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/condition/EsMonitorCondition.java @@ -31,7 +31,7 @@ public class EsMonitorCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - String collectType = context.getEnvironment().getProperty(BootstrapCoreProperties.PREFIX + "collect-type", ""); + String collectType = context.getEnvironment().getProperty(BootstrapCoreProperties.PREFIX + ".collect-type", ""); return StringUtil.isNotEmpty(collectType) && collectType.contains(MonitorTypeEnum.ES.name().toLowerCase()) ? true : false; } }