参考官网文档翻译过来,部分不准,仅供参考
官方文档
一.告警
警报核心由一组规则驱动,这些规则在config/alarm-settings.yml中定义。 警报规则定义分为两部分。
1.Alarm rules。 它们定义了应如何触发指标警报,应考虑哪些条件。 2.Webhooks。 Web服务端点列表,在触发警报后应调用该列表。
二.规则
报警规则由以下键组成
规则名称(Rule name): 唯一名称,显示在警报消息中。必须以结尾_rule。 指标名称(Metrics name): OAL脚本中的AKA指标名称。仅支持long,double,int类型。 包括名称(Include names): 以下实体名称包含在该规则中。如服务名,端点名。 排除名称(Exclude names): 此规则排除以下实体名称。如服务名,端点名。 阈值(Threshold): 目标值。 操作符(OP): 操作,支持>,<,=。欢迎贡献所有OP。 期间(Period): 应该检查警报规则多长时间。这是一个时间窗口,与后端部署环境时间一起出现。 阈值(Count): 在周期窗口中,如果值 s 的数量超过阈值(通过OP),达到计数,则应发送警报。 沉默期(Silence period): 在Time-N中触发警报后,请在TN-> TN +期间保持静音。默认情况下,它与Period(周期)相同,这意味着在一个周期内,将触发一次相同的警报(相同度量值名称中的相同ID)。
三.默认警报规则
alarm-setting.yml为了方便起见,我们在发行版中提供了默认设置,其中包括以下规则
最近3分钟内服务平均响应时间超过1秒。 最近2分钟的服务成功率低于80%。 在过去3分钟内,服务90%的响应时间超过1秒 最近2分钟内服务实例的平均响应时间超过1秒。 最近2分钟内端点平均响应时间超过1秒。
演示才把值设置低了,时间根据项目运行情况配置
# 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.
# Sample alarm rules.
rules:
# Rule unique name, must be ended with `_rule`.
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 8
period: 1
count: 1
silence-period: 2
message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.
service_sla_rule:
# Metrics value need to be long, double or int
metrics-name: service_sla
op: "<"
threshold: 8
# The length of time to evaluate the metrics
period: 1
# How many times after the metrics match the condition, will trigger alarm
count: 1
# How many times of checks, the alarm keeps silence after alarm triggered, default as same as period.
silence-period: 2
message: Successful rate of service {name} is lower than 80% in 2 minutes of last 10 minutes
service_p90_sla_rule:
# Metrics value need to be long, double or int
metrics-name: service_p90
op: ">"
threshold: 8
period: 1
count: 1
silence-period: 2
message: 90% response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes
service_instance_resp_time_rule:
metrics-name: service_instance_resp_time
op: ">"
threshold: 8
period: 10
count: 1
silence-period: 2
message: Response time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutes
# Active endpoint related metrics alarm will cost more memory than service and service instance metrics alarm.
# Because the number of endpoint is much more than service and instance.
#
endpoint_avg_rule:
metrics-name: endpoint_avg
op: ">"
threshold: 6
period: 10
count: 2
silence-period: 5
message: Response time of endpoint {name} is more than 1000ms in 2 minutes of last 10 minutes
webhooks:
# - http://127.0.0.1/notify/
- http://192.168.124.4:58080/alarm/pushData
四.Webhook
Webhook要求对等方是一个Web容器。警报消息将按application/json内容类型通过HTTP发布。JSON格式基于List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage以下关键信息。
范围(scopeId, scope): 所有范围都在org.apache.skywalking.oap.server.core.source.DefaultScopeDefine中定义。 名字(name): 目标范围实体名称。 实体的ID(id0): 作用域实体的ID,与名称匹配。 实体的ID(id1): 今天不使用。 规则名称(ruleName): 您在中配置的规则名称alarm-settings.yml。 报警消息(alarmMessage): 报警文本消息。 时间(startTime): 以毫秒为单位,介于当前时间和UTC 1970年1月1日午夜之间。
消息内容例如:
[
{
"scopeId": 3,
"scope": "ENDPOINT",
"name": "/areaDetail/findById in ES-DEMO",
"id0": 4,
"id1": 0,
"ruleName": "endpoint_avg_rule",
"alarmMessage": "Response time of endpoint /areaDetail/findById in ES-DEMO is more than 1000ms in 2 minutes of last 10 minutes",
"startTime": 1577330120698
}
]
Webhook接口
@RequestMapping("/alarm")
@RestController
@Slf4j
public class AlarmController {
@RequestMapping(value = "/pushData", method = RequestMethod.POST)
public void alarm(@RequestBody List<AlarmMessageDto> alarmMessageList) {
log.error("===================={}", alarmMessageList.toString());
// todo 具体处理告警信息
}
}
消息体
@Data
public class AlarmMessageDto {
/**
* 范围id。所有范围都在org.apache.skywalking.oap.server.core.source.DefaultScopeDefine中定义
*/
private int scopeId;
/**
* 范围
*/
private String scope;
/**
* 目标范围实体名称
*/
private String name;
/**
* 您在中配置的规则名称alarm-settings.yml
*/
private String ruleName;
/**
* 作用域实体的ID,与名称匹配
*/
private int id0;
/**
* 不使用
*/
private int id1;
/**
* 报警文本消息
*/
private String alarmMessage;
/**
* 时间,以毫秒为单位,介于当前时间和UTC 1970年1月1日午夜之间
*/
private long startTime;
}
五.效果
在根据接收到的消息对接钉钉或者邮箱通知运营人员
评论区