# 告警
告警的核心由一组规则驱动,这些规则定义在config/ Alarm -settings.yml
文件中。
告警规则的定义分为两部分。
- 告警规则。它们定义了应该如何触发度量警报,应该考虑什么条件。
- [网络钩子](#Webhook}。当警告触发时,哪些服务终端需要被告知。
# 规则
报警规则主要有以下几点:
- Rule name。在告警信息中显示的唯一名称。必须以
_rule
结尾。 - Metrics name。 也是oal脚本中的度量名。只支持long,double和int类型。详情见 所有可能的度量名称列表.
- Include names。其下的实体名称都在此规则中。比如服务名,终端名。
- Threshold。阈值。
- OP。 操作符, 支持
>
,<
,=
。欢迎贡献所有的操作符。 - Period.。多久告警规则需要被核实一下。这是一个时间窗口,与后端部署环境时间相匹配。
- Count。 在一个Period窗口中,如果values超过Threshold值(按op),达到Count值,需要发送警报。
- Silence period。在时间N中触发报警后,在TN -> TN + period这个阶段不告警。 默认情况下,它和Period一样,这意味着相同的告警(在同一个Metrics name拥有相同的Id)在同一个Period内只会触发一次。
rules:
# Rule unique name, must be ended with `_rule`.
endpoint_percent_rule:
# Metrics value need to be long, double or int
metrics-name: endpoint_percent
threshold: 75
op: <
# The length of time to evaluate the metrics
period: 10
# How many times after the metrics match the condition, will trigger alarm
count: 3
# How many times of checks, the alarm keeps silence after alarm triggered, default as same as period.
silence-period: 10
service_percent_rule:
metrics-name: service_percent
# [Optional] Default, match all services in this metrics
include-names:
- service_a
- service_b
threshold: 85
op: <
period: 10
count: 4
# 默认告警规则
为了方便,我们在发行版中提供了默认的alarm setting.yml
文件,包括以下规则
1.过去3分钟内服务平均响应时间超过1秒。
1.服务成功率在过去2分钟内低于80%。
1.服务90%响应时间在过去3分钟内低于1000毫秒.
1.服务实例在过去2分钟内的平均响应时间超过1秒。
1.端点平均响应时间过去2分钟超过1秒。
# 所有可能的度量名称列表
这些度量名称定义在 OAL 脚本中, 现在,来自Service, Service Instance, Endpoint的度量可以用于告警,我们会在后期版本中进行扩展。
如果你希望有其它的告警场景,请提交issue或pr。
# Webhook
SkyWalking 的告警 Webhook 要求对等方是一个 Web 容器. 告警的消息会通过 HTTP 请求进行发送, 请求方法为 POST
, Content-Type
为 application/json
,
JSON 格式基于 List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage
, 包含以下信息.
- scopeId. 所有可用的 Scope 请查阅
org.apache.skywalking.oap.server.core.source.DefaultScopeDefine
. - name. 目标 Scope 的实体名称.
- id0. Scope 实体的 ID.
- id1. 未使用.
- alarmMessage. 报警消息内容.
- startTime. 告警时间, 位于当前时间与 UTC 1920/1/1 之间.
以下是一个样例
[{
"scopeId": 1,
"name": "serviceA",
"id0": 12,
"id1": 0,
"alarmMessage": "alarmMessage xxxx",
"startTime": 1560524171000
}, {
"scopeId": 1,
"name": "serviceB",
"id0": 23,
"id1": 0,
"alarmMessage": "alarmMessage yyy",
"startTime": 1560524171000
}]