diff --git a/src/main/java/cn/mesalab/config/ApplicationConfig.java b/src/main/java/cn/mesalab/config/ApplicationConfig.java index 1558de5..8dea34d 100644 --- a/src/main/java/cn/mesalab/config/ApplicationConfig.java +++ b/src/main/java/cn/mesalab/config/ApplicationConfig.java @@ -48,6 +48,8 @@ public class ApplicationConfig { public static final Integer BASELINE_RANGE_DAYS = ConfigUtils.getIntProperty("baseline.range.days"); public static final Float BASELINE_RATIONAL_PERCENTILE = ConfigUtils.getFloatProperty("baseline.rational.percentile"); + public static final Float BASELINE_TIMES_PERCENT_TIMES = ConfigUtils.getFloatProperty("baseline.times.percent.times"); + public static final String HBASE_TABLE = ConfigUtils.getStringProperty("hbase.table"); public static final String HBASE_ZOOKEEPER_QUORUM= ConfigUtils.getStringProperty("hbase.zookeeper.quorum"); diff --git a/src/main/java/cn/mesalab/service/BaselineSingleThread.java b/src/main/java/cn/mesalab/service/BaselineSingleThread.java index a5688ed..672c1a5 100644 --- a/src/main/java/cn/mesalab/service/BaselineSingleThread.java +++ b/src/main/java/cn/mesalab/service/BaselineSingleThread.java @@ -183,12 +183,10 @@ public class BaselineSingleThread extends Thread { Listseries = completSeries.stream().map( i -> Integer.valueOf(i.get(ApplicationConfig.BASELINE_METRIC_TYPE).toString())).collect(Collectors.toList()); - // 判断ip出现频率 - float ipFrequency = ipDruidData.size() / (float) completSeries.size(); - updateLogFrequencyCounter(ipFrequency); - if(ipFrequency >ApplicationConfig.BASELINE_HISTORICAL_FREQUENCY_THREAD){ - // 异常值剔除 + // 具备周期性 + if(SeriesUtils.isPeriod(series)){ baselineGenerationType = 1; + // 异常值剔除 double exceptionPercentile = SeriesUtils.percentile(series, ApplicationConfig.BASELINE_EXECEPTION_PERCENTILE); double exceptionFillPercentile = SeriesUtils.percentile(series, ApplicationConfig.BASELINE_EXCECPTION_FILL_PERCENTILE); LOG.debug(ip + ": series-" + series); @@ -197,24 +195,24 @@ public class BaselineSingleThread extends Thread { series.set(i, (int) exceptionFillPercentile); } } - LOG.debug(ip + ": execpSeries-" + series); // KF baselineArr = baselineFunction(series); - // System.out.println("type-01:" + ipPercentile + " " + ip + " " + Arrays.toString(baselineArr)); - LOG.debug(ip + ": baseline-" + baselineArr); } else { - // 判断周期性 - if (SeriesUtils.isPeriod(series)){ + double p99 = SeriesUtils.percentile(series, 0.99); + double p50 = SeriesUtils.percentile(series, 0.50); + + // 无周期性 + float ipFrequency = ipDruidData.size() / (float) completSeries.size(); + updateLogFrequencyCounter(ipFrequency); + // p99/p50 > 10 + if(ipFrequency >ApplicationConfig.BASELINE_HISTORICAL_FREQUENCY_THREAD && p99/p50 > ApplicationConfig.BASELINE_TIMES_PERCENT_TIMES){ baselineGenerationType = 2; - // KF - baselineArr = baselineFunction(series); - // System.out.println("type-02:" + ipPercentile + " " + ip + " " + Arrays.toString(baselineArr)); - } else { - baselineGenerationType = 3; Arrays.fill(baselineArr, ipPercentile); - // System.out.println("type-03:" + ipPercentile + " " + ip + " " + Arrays.toString(baselineArr)); + } else { + return null; } } + updateLogGenerateTypeCounter(baselineGenerationType); // 计算默认值-非零数据的百分位数 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index cb4a075..ef31254 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -55,7 +55,10 @@ baseline.period.correlative.threshold=0.5 baseline.historical.frequency.thread=0.2 baseline.exception.percentile=0.99 baseline.exception.fill.percentile=0.99 -baseline.rational.percentile=0.95 +baseline.rational.percentile=0.99 + +# p99/p50 倍数阈值 +baseline.times.percent.times=10 #Kalman Filter baseline.kalman.q=0.1