Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
SkyWalking
提交
3d188e60
S
SkyWalking
项目概览
apache
/
SkyWalking
上一次同步 1 年多
通知
302
Star
21345
Fork
6091
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
3d188e60
编写于
5月 25, 2021
作者:
wu-sheng
提交者:
GitHub
5月 25, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix counter misuse in the alarm core. Alarm can't be triggered in time. (#7005)
* Fix counter misuse in the alarm core * Submit changelog
上级
32718d1d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
60 addition
and
67 deletion
+60
-67
CHANGES.md
CHANGES.md
+1
-0
oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java
...kywalking/oap/server/core/alarm/provider/RunningRule.java
+33
-30
oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java
...lking/oap/server/core/alarm/provider/RunningRuleTest.java
+26
-37
未找到文件。
CHANGES.md
浏览文件 @
3d188e60
...
@@ -51,6 +51,7 @@ Release Notes.
...
@@ -51,6 +51,7 @@ Release Notes.
*
Fix:
`!=`
is not supported in oal when parameters are numbers.
*
Fix:
`!=`
is not supported in oal when parameters are numbers.
*
Include events of the entity(s) in the alarm.
*
Include events of the entity(s) in the alarm.
*
Support
`native-json`
format log in kafka-fetcher-plugin.
*
Support
`native-json`
format log in kafka-fetcher-plugin.
*
Fix counter misuse in the alarm core. Alarm can't be triggered in time.
#### UI
#### UI
*
Add logo for kong plugin.
*
Add logo for kong plugin.
...
...
oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java
浏览文件 @
3d188e60
...
@@ -29,7 +29,6 @@ import java.util.concurrent.ConcurrentHashMap;
...
@@ -29,7 +29,6 @@ import java.util.concurrent.ConcurrentHashMap;
import
java.util.concurrent.locks.ReentrantLock
;
import
java.util.concurrent.locks.ReentrantLock
;
import
java.util.regex.Pattern
;
import
java.util.regex.Pattern
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
lombok.ToString
;
import
lombok.ToString
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
...
@@ -107,7 +106,11 @@ public class RunningRule {
...
@@ -107,7 +106,11 @@ public class RunningRule {
Pattern
.
compile
(
alarmRule
.
getExcludeLabelsRegex
())
:
null
;
Pattern
.
compile
(
alarmRule
.
getExcludeLabelsRegex
())
:
null
;
this
.
formatter
=
new
AlarmMessageFormatter
(
alarmRule
.
getMessage
());
this
.
formatter
=
new
AlarmMessageFormatter
(
alarmRule
.
getMessage
());
this
.
onlyAsCondition
=
alarmRule
.
isOnlyAsCondition
();
this
.
onlyAsCondition
=
alarmRule
.
isOnlyAsCondition
();
this
.
tags
=
alarmRule
.
getTags
().
entrySet
().
stream
().
map
(
e
->
new
Tag
(
e
.
getKey
(),
e
.
getValue
())).
collect
(
Collectors
.
toList
());
this
.
tags
=
alarmRule
.
getTags
()
.
entrySet
()
.
stream
()
.
map
(
e
->
new
Tag
(
e
.
getKey
(),
e
.
getValue
()))
.
collect
(
Collectors
.
toList
());
}
}
/**
/**
...
@@ -146,12 +149,13 @@ public class RunningRule {
...
@@ -146,12 +149,13 @@ public class RunningRule {
threshold
.
setType
(
MetricsValueType
.
MULTI_INTS
);
threshold
.
setType
(
MetricsValueType
.
MULTI_INTS
);
}
else
if
(
metrics
instanceof
LabeledValueHolder
)
{
}
else
if
(
metrics
instanceof
LabeledValueHolder
)
{
if
(((
LabeledValueHolder
)
metrics
).
getValue
().
keys
().
stream
()
if
(((
LabeledValueHolder
)
metrics
).
getValue
().
keys
().
stream
()
.
noneMatch
(
label
->
validate
(
.
noneMatch
(
label
->
validate
(
label
,
label
,
includeLabels
,
includeLabels
,
excludeLabels
,
excludeLabels
,
includeLabelsRegex
,
includeLabelsRegex
,
excludeLabelsRegex
)))
{
excludeLabelsRegex
)))
{
return
;
return
;
}
}
valueType
=
MetricsValueType
.
LABELED_LONG
;
valueType
=
MetricsValueType
.
LABELED_LONG
;
...
@@ -169,11 +173,11 @@ public class RunningRule {
...
@@ -169,11 +173,11 @@ public class RunningRule {
}
}
/**
/**
* Validate target whether matching rules which is included list, excludes list, include regular expression
* Validate target whether matching rules which is included list, excludes list, include regular expression
or
*
or
exclude regular expression.
* exclude regular expression.
*/
*/
private
boolean
validate
(
String
target
,
List
<
String
>
includeList
,
List
<
String
>
excludeList
,
private
boolean
validate
(
String
target
,
List
<
String
>
includeList
,
List
<
String
>
excludeList
,
Pattern
includeRegex
,
Pattern
excludeRegex
)
{
Pattern
includeRegex
,
Pattern
excludeRegex
)
{
if
(
CollectionUtils
.
isNotEmpty
(
includeList
))
{
if
(
CollectionUtils
.
isNotEmpty
(
includeList
))
{
if
(!
includeList
.
contains
(
target
))
{
if
(!
includeList
.
contains
(
target
))
{
if
(
log
.
isTraceEnabled
())
{
if
(
log
.
isTraceEnabled
())
{
...
@@ -256,7 +260,6 @@ public class RunningRule {
...
@@ -256,7 +260,6 @@ public class RunningRule {
public
class
Window
{
public
class
Window
{
private
LocalDateTime
endTime
;
private
LocalDateTime
endTime
;
private
int
period
;
private
int
period
;
private
int
counter
;
private
int
silenceCountdown
;
private
int
silenceCountdown
;
private
LinkedList
<
Metrics
>
values
;
private
LinkedList
<
Metrics
>
values
;
...
@@ -266,7 +269,6 @@ public class RunningRule {
...
@@ -266,7 +269,6 @@ public class RunningRule {
this
.
period
=
period
;
this
.
period
=
period
;
// -1 means silence countdown is not running.
// -1 means silence countdown is not running.
silenceCountdown
=
-
1
;
silenceCountdown
=
-
1
;
counter
=
0
;
init
();
init
();
}
}
...
@@ -320,7 +322,10 @@ public class RunningRule {
...
@@ -320,7 +322,10 @@ public class RunningRule {
// too old data
// too old data
// also should happen, but maybe if agent/probe mechanism time is not right.
// also should happen, but maybe if agent/probe mechanism time is not right.
if
(
log
.
isTraceEnabled
())
{
if
(
log
.
isTraceEnabled
())
{
log
.
trace
(
"Timebucket is {}, endTime is {} and value size is {}"
,
timeBucket
,
this
.
endTime
,
values
.
size
());
log
.
trace
(
"Timebucket is {}, endTime is {} and value size is {}"
,
timeBucket
,
this
.
endTime
,
values
.
size
()
);
}
}
return
;
return
;
}
}
...
@@ -338,12 +343,10 @@ public class RunningRule {
...
@@ -338,12 +343,10 @@ public class RunningRule {
if
(
isMatch
())
{
if
(
isMatch
())
{
/*
/*
* When
* When
* 1. Metrics value threshold triggers alarm by rule
* 1. Alarm trigger conditions are satisfied.
* 2. Counter reaches the count threshold;
* 2. Isn't in silence stage, judged by SilenceCountdown(!=0).
* 3. Isn't in silence stage, judged by SilenceCountdown(!=0).
*/
*/
counter
++;
if
(
silenceCountdown
<
1
)
{
if
(
counter
>=
countThreshold
&&
silenceCountdown
<
1
)
{
silenceCountdown
=
silencePeriod
;
silenceCountdown
=
silencePeriod
;
return
Optional
.
of
(
new
AlarmMessage
());
return
Optional
.
of
(
new
AlarmMessage
());
}
else
{
}
else
{
...
@@ -351,9 +354,6 @@ public class RunningRule {
...
@@ -351,9 +354,6 @@ public class RunningRule {
}
}
}
else
{
}
else
{
silenceCountdown
--;
silenceCountdown
--;
if
(
counter
>
0
)
{
counter
--;
}
}
}
return
Optional
.
empty
();
return
Optional
.
empty
();
}
}
...
@@ -415,13 +415,14 @@ public class RunningRule {
...
@@ -415,13 +415,14 @@ public class RunningRule {
DataTable
values
=
((
LabeledValueHolder
)
metrics
).
getValue
();
DataTable
values
=
((
LabeledValueHolder
)
metrics
).
getValue
();
lexpected
=
RunningRule
.
this
.
threshold
.
getLongThreshold
();
lexpected
=
RunningRule
.
this
.
threshold
.
getLongThreshold
();
if
(
values
.
keys
().
stream
().
anyMatch
(
label
->
if
(
values
.
keys
().
stream
().
anyMatch
(
label
->
validate
(
validate
(
label
,
label
,
RunningRule
.
this
.
includeLabels
,
RunningRule
.
this
.
includeLabels
,
RunningRule
.
this
.
excludeLabels
,
RunningRule
.
this
.
excludeLabels
,
RunningRule
.
this
.
includeLabelsRegex
,
RunningRule
.
this
.
includeLabelsRegex
,
RunningRule
.
this
.
excludeLabelsRegex
)
RunningRule
.
this
.
excludeLabelsRegex
&&
op
.
test
(
lexpected
,
values
.
get
(
label
))))
{
)
&&
op
.
test
(
lexpected
,
values
.
get
(
label
))))
{
matchCount
++;
matchCount
++;
}
}
break
;
break
;
...
@@ -466,7 +467,9 @@ public class RunningRule {
...
@@ -466,7 +467,9 @@ public class RunningRule {
break
;
break
;
case
LABELED_LONG:
case
LABELED_LONG:
DataTable
dt
=
((
LabeledValueHolder
)
m
).
getValue
();
DataTable
dt
=
((
LabeledValueHolder
)
m
).
getValue
();
TraceLogMetric
l
=
new
TraceLogMetric
(
m
.
getTimeBucket
(),
dt
.
sortedValues
(
Comparator
.
naturalOrder
()).
toArray
(
new
Number
[
0
]));
TraceLogMetric
l
=
new
TraceLogMetric
(
m
.
getTimeBucket
(),
dt
.
sortedValues
(
Comparator
.
naturalOrder
())
.
toArray
(
new
Number
[
0
]));
l
.
labels
=
dt
.
sortedKeys
(
Comparator
.
naturalOrder
()).
toArray
(
new
String
[
0
]);
l
.
labels
=
dt
.
sortedKeys
(
Comparator
.
naturalOrder
()).
toArray
(
new
String
[
0
]);
r
.
add
(
l
);
r
.
add
(
l
);
}
}
...
...
oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java
浏览文件 @
3d188e60
...
@@ -19,11 +19,11 @@
...
@@ -19,11 +19,11 @@
package
org.apache.skywalking.oap.server.core.alarm.provider
;
package
org.apache.skywalking.oap.server.core.alarm.provider
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Lists
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Objects
;
import
java.util.HashMap
;
import
lombok.Getter
;
import
lombok.Getter
;
import
lombok.Setter
;
import
lombok.Setter
;
import
org.apache.skywalking.oap.server.core.Const
;
import
org.apache.skywalking.oap.server.core.Const
;
...
@@ -103,21 +103,16 @@ public class RunningRuleTest {
...
@@ -103,21 +103,16 @@ public class RunningRuleTest {
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod1
,
70
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod1
,
70
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod2
,
71
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod2
,
71
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod3
,
74
));
// check at 201808301440
// check at 201808301440
List
<
AlarmMessage
>
alarmMessages
=
runningRule
.
check
();
List
<
AlarmMessage
>
alarmMessages
=
runningRule
.
check
();
Assert
.
assertEquals
(
0
,
alarmMessages
.
size
());
Assert
.
assertEquals
(
0
,
alarmMessages
.
size
());
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301441"
));
// check at 201808301441
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod3
,
74
));
alarmMessages
=
runningRule
.
check
();
Assert
.
assertEquals
(
0
,
alarmMessages
.
size
());
// check at 201808301440
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301442"
));
// check at 201808301442
alarmMessages
=
runningRule
.
check
();
alarmMessages
=
runningRule
.
check
();
Assert
.
assertEquals
(
1
,
alarmMessages
.
size
());
Assert
.
assertEquals
(
1
,
alarmMessages
.
size
());
Assert
.
assertEquals
(
"Successful rate of endpoint Service_123 is lower than 75%"
,
alarmMessages
.
get
(
0
)
.
getAlarmMessage
());
}
}
@Test
@Test
...
@@ -142,22 +137,18 @@ public class RunningRuleTest {
...
@@ -142,22 +137,18 @@ public class RunningRuleTest {
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMultipleValueMetrics
(
timeInPeriod1
,
70
,
60
,
40
,
40
,
40
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMultipleValueMetrics
(
timeInPeriod1
,
70
,
60
,
40
,
40
,
40
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMultipleValueMetrics
(
timeInPeriod2
,
60
,
60
,
40
,
40
,
40
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMultipleValueMetrics
(
timeInPeriod2
,
60
,
60
,
40
,
40
,
40
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMultipleValueMetrics
(
timeInPeriod3
,
74
,
60
,
40
,
40
,
40
));
// check at 201808301440
// check at 201808301440
List
<
AlarmMessage
>
alarmMessages
=
runningRule
.
check
();
List
<
AlarmMessage
>
alarmMessages
=
runningRule
.
check
();
Assert
.
assertEquals
(
0
,
alarmMessages
.
size
());
Assert
.
assertEquals
(
0
,
alarmMessages
.
size
());
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301441"
));
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301441"
));
// check at 201808301441
alarmMessages
=
runningRule
.
check
();
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMultipleValueMetrics
(
timeInPeriod3
,
74
,
60
,
40
,
40
,
40
));
Assert
.
assertEquals
(
0
,
alarmMessages
.
size
());
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301442"
));
// check at 201808301440
// check at 201808301442
alarmMessages
=
runningRule
.
check
();
alarmMessages
=
runningRule
.
check
();
Assert
.
assertEquals
(
1
,
alarmMessages
.
size
());
Assert
.
assertEquals
(
1
,
alarmMessages
.
size
());
Assert
.
assertEquals
(
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301441"
));
"response percentile of endpoint Service_123 is lower than expected values"
,
alarmMessages
.
get
(
0
)
.
getAlarmMessage
());
}
}
@Test
@Test
...
@@ -243,16 +234,18 @@ public class RunningRuleTest {
...
@@ -243,16 +234,18 @@ public class RunningRuleTest {
long
timeInPeriod3
=
201808301438L
;
long
timeInPeriod3
=
201808301438L
;
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod1
,
70
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod1
,
70
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod2
,
71
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod2
,
71
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod3
,
74
));
// check at 201808301440
// check at 201808301440
Assert
.
assertEquals
(
0
,
runningRule
.
check
().
size
());
//check matches, no alarm
Assert
.
assertEquals
(
0
,
runningRule
.
check
().
size
());
//check matches, no alarm
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301441"
));
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301441"
));
// check at 201808301441
Assert
.
assertEquals
(
0
,
runningRule
.
check
().
size
());
//check matches, no alarm
runningRule
.
in
(
getMetaInAlarm
(
123
),
getMetrics
(
timeInPeriod3
,
74
));
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301442"
));
// check at 201808301440
Assert
.
assertEquals
(
1
,
runningRule
.
check
().
size
());
//alarm
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301441"
));
// check at 201808301442
// check at 201808301442
Assert
.
assertNotEquals
(
0
,
runningRule
.
check
().
size
());
//alarm
Assert
.
assertEquals
(
0
,
runningRule
.
check
().
size
());
//silence, no alarm
Assert
.
assertEquals
(
0
,
runningRule
.
check
().
size
());
//silence, no alarm
Assert
.
assertEquals
(
0
,
runningRule
.
check
().
size
());
//silence, no alarm
Assert
.
assertEquals
(
0
,
runningRule
.
check
().
size
());
//silence, no alarm
Assert
.
assertNotEquals
(
0
,
runningRule
.
check
().
size
());
//alarm
Assert
.
assertNotEquals
(
0
,
runningRule
.
check
().
size
());
//alarm
...
@@ -304,7 +297,8 @@ public class RunningRuleTest {
...
@@ -304,7 +297,8 @@ public class RunningRuleTest {
alarmRule
.
setThreshold
(
"1000"
);
alarmRule
.
setThreshold
(
"1000"
);
alarmRule
.
setCount
(
1
);
alarmRule
.
setCount
(
1
);
alarmRule
.
setPeriod
(
10
);
alarmRule
.
setPeriod
(
10
);
alarmRule
.
setMessage
(
"Response time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutes"
);
alarmRule
.
setMessage
(
"Response time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutes"
);
alarmRule
.
setIncludeNamesRegex
(
"Service\\_1(\\d)+"
);
alarmRule
.
setIncludeNamesRegex
(
"Service\\_1(\\d)+"
);
alarmRule
.
setTags
(
new
HashMap
<
String
,
String
>()
{{
alarmRule
.
setTags
(
new
HashMap
<
String
,
String
>()
{{
put
(
"key"
,
"value"
);
put
(
"key"
,
"value"
);
...
@@ -338,7 +332,8 @@ public class RunningRuleTest {
...
@@ -338,7 +332,8 @@ public class RunningRuleTest {
alarmRule
.
setThreshold
(
"1000"
);
alarmRule
.
setThreshold
(
"1000"
);
alarmRule
.
setCount
(
1
);
alarmRule
.
setCount
(
1
);
alarmRule
.
setPeriod
(
10
);
alarmRule
.
setPeriod
(
10
);
alarmRule
.
setMessage
(
"Response time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutes"
);
alarmRule
.
setMessage
(
"Response time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutes"
);
alarmRule
.
setExcludeNamesRegex
(
"Service\\_2(\\d)+"
);
alarmRule
.
setExcludeNamesRegex
(
"Service\\_2(\\d)+"
);
alarmRule
.
setTags
(
new
HashMap
<
String
,
String
>()
{{
alarmRule
.
setTags
(
new
HashMap
<
String
,
String
>()
{{
put
(
"key"
,
"value"
);
put
(
"key"
,
"value"
);
...
@@ -603,22 +598,16 @@ public class RunningRuleTest {
...
@@ -603,22 +598,16 @@ public class RunningRuleTest {
runningRule
.
in
(
getMetaInAlarm
(
123
),
getLabeledValueMetrics
(
timeInPeriod1
,
"50,17|99,11"
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getLabeledValueMetrics
(
timeInPeriod1
,
"50,17|99,11"
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getLabeledValueMetrics
(
timeInPeriod2
,
"75,15|95,12"
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getLabeledValueMetrics
(
timeInPeriod2
,
"75,15|95,12"
));
runningRule
.
in
(
getMetaInAlarm
(
123
),
getLabeledValueMetrics
(
timeInPeriod3
,
"90,1|99,20"
));
// check at 201808301440
List
<
AlarmMessage
>
alarmMessages
=
runningRule
.
check
();
List
<
AlarmMessage
>
alarmMessages
=
runningRule
.
check
();
Assert
.
assertEquals
(
0
,
alarmMessages
.
size
());
Assert
.
assertEquals
(
0
,
alarmMessages
.
size
());
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301441"
));
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301441"
));
// check at 201808301441
alarmMessages
=
runningRule
.
check
();
runningRule
.
in
(
getMetaInAlarm
(
123
),
getLabeledValueMetrics
(
timeInPeriod3
,
"90,1|99,20"
));
Assert
.
assertEquals
(
0
,
alarmMessages
.
size
());
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301442"
));
// check at 201808301440
// check at 201808301442
alarmMessages
=
runningRule
.
check
();
alarmMessages
=
runningRule
.
check
();
Assert
.
assertEquals
(
1
,
alarmMessages
.
size
());
Assert
.
assertEquals
(
1
,
alarmMessages
.
size
());
Assert
.
assertEquals
(
runningRule
.
moveTo
(
TIME_BUCKET_FORMATTER
.
parseLocalDateTime
(
"201808301441"
));
"response percentile of endpoint Service_123 is lower than expected value"
,
alarmMessages
.
get
(
0
)
.
getAlarmMessage
());
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录