ALIYUN::SLS::Alert类型用于创建告警。
语法
{
"Type": "ALIYUN::SLS::Alert",
"Properties": {
"Project": String,
"Detail": Map
}
}
属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
Project | String | 是 | 否 | 日志项目名称。 | 无 |
Detail | Map | 是 | 是 | 告警详情。 | 更多信息,请参见Detail属性。 |
Detail语法
"Detail": {
"Type": String,
"Description": String,
"Configuration": Map,
"State": String,
"Schedule": Map,
"DisplayName": String,
"Name": String
}
Detail属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
Type | String | 否 | 否 | 告警类型。 | 无 |
Description | String | 否 | 是 | 告警描述信息。 | 无 |
Configuration | Map | 是 | 是 | 告警配置。 | 更多信息,请参见Configuration属性。 |
State | String | 否 | 否 | 是否启用告警。 | 取值:- Enable:启用告警。
- Disabled:不启用告警。
|
Schedule | Map | 是 | 是 | 日志服务评估警报规则的时间间隔。 | 在警报规则评估期间,如果查询返回的日志条目超过100个,则只检查前100个日志条目。 更多信息,请参见Schedule属性。 |
DisplayName | String | 是 | 是 | 告警显示的名称。 | 长度为1~64个字符。 |
Name | String | 是 | 否 | 告警名称。 | 无 |
Configuration语法
"Configuration": {
"Throttling": String,
"Condition": String,
"NotificationList": List,
"NotifyThreshold": Integer,
"Dashboard": String,
"QueryList": List,
"Type": String,
"GroupConfiguration": Map,
"NoDataFire": Boolean,
"Threshold": Integer,
"SeverityConfigurations": List,
"Labels": List,
"AutoAnnotation": Boolean,
"PolicyConfiguration": Map,
"SendResolved": Boolean,
"NoDataSeverity": Integer,
"Annotations": List,
"MuteUntil": Integer,
"JoinConfigurations": List,
"Version": String
}
Configuration属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
Throttling | String | 否 | 是 | 通知间隔。 | 无 |
Condition | String | 否 | 是 | 触发条件。 | 支持加( )、减(-)、乘(*)、除(/)、取模(%)5种基础运算符和大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)、不等于(!=)、正则匹配 (=~)、 正则不匹配(!~)8种比较运算符。 更多信息,请参见告警条件表达式语法。 |
NotificationList | List | 否 | 是 | 通知列表。 | 更多信息,请参见NotificationList属性。 |
NotifyThreshold | Integer | 否 | 是 | 触发通知阈值。 | 无 |
Dashboard | String | 是 | 是 | 所属仪表盘。 | 无 |
QueryList | List | 是 | 是 | 查询列表。 | 更多信息,请参见QueryList属性。 |
Type | String | 否 | 是 | 告警类型。 | 固定值:default。 |
GroupConfiguration | Map | 否 | 是 | 分组评估配置。 | 更多信息,请参见GroupConfiguration属性。 |
NoDataFire | Boolean | 否 | 是 | 无数据是否触发告警。 | 取值: |
Threshold | Integer | 否 | 是 | 设置连续触发阈值。 | 当累计的触发次数达到该值时,产生一条告警。不满足触发条件时不计入统计。 |
SeverityConfigurations | List | 否 | 是 | 触发条件,至少设置一条触发条件。 | 更多信息,请参见SeverityConfigurations属性。 |
Labels | List | 否 | 是 | 标签。 | 更多信息,请参见Labels属性。 |
AutoAnnotation | Boolean | 否 | 是 | 是否开启自动添加标注。 | 取值:- true(默认):开启自动添加标注。系统自动在告警中添加__count__等信息。
更多信息,请参见自动标注。 - false:关闭自动添加标注。
|
PolicyConfiguration | Map | 否 | 是 | 告警策略配置。 | 更多信息,请参见PolicyConfiguration属性。 |
SendResolved | Boolean | 否 | 是 | 是否发送恢复通知。 | 取值:- true:开启告警恢复通知。告警恢复时,发送一条恢复告警。
更多信息,请参见恢复通知。 - false(默认):关闭告警恢复通知。
|
NoDataSeverity | Integer | 否 | 是 | 无数据触发告警时的告警严重度。 | 更多信息,请参见告警严重度。 |
Annotations | List | 否 | 是 | 标注。 | 更多信息,请参见Annotations属性。 |
MuteUntil | Integer | 否 | 是 | 告警触发阈值。 | 无 |
JoinConfigurations | List | 否 | 是 | 集合操作配置。 | 更多信息,请参见JoinConfigurations属性。- 如果QueryList中只有一项查询统计,则不需要设置JoinConfigurations。
- 如果QueryList中有2~3个查询统计,则必须设置JoinConfigurations,用于关联多个查询分析结果。
更多信息,请参见多集合操作机制。
|
Version | String | 否 | 是 | 告警版本。 | 固定值:2.0。 |
NotificationList语法
"NotificationList": [
{
"Type": String,
"MobileList": List,
"ServiceUri": String,
"Content": String,
"EmailList": List,
"Method": String,
"Headers": Map
}
]
NotificationList属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
Type | String | 是 | 否 | 通知类型。 | 取值:- SMS:短信。
- Voice:语音。
- Email:电子邮件。
- MessageCenter:通知中心。
- DingTalk:WebHook-钉钉机器人。
- Webhook:WebHook-自定义。
|
Content | String | 否 | 否 | 通知内容。 | 支持使用模板变量:${Project}, ${Condition}, ${AlertName}, ${AlertID}, ${Dashboard}, ${FireTime}, ${Results} 。更多信息,请参见通知方式。 |
MobileList | List | 否 | 否 | 手机号码。 | 通知类型为短信、语音时该参数必填。 同一手机号码每天接收的通知不超过50条。 |
ServiceUri | String | 否 | 否 | 请求地址。 | 通知类型为WebHook-自定义或WebHook-钉钉机器人时该参数必填。 |
EmailList | List | 否 | 否 | 邮件地址。 | 通知类型为电子邮件时该参数必填。 同一邮箱每天接收的邮件不超过100条。 |
Method | String | 否 | 否 | 请求的方法。 | 无 |
Headers | Map | 否 | 否 | 请求头信息。 | 无 |
QueryList语法
"QueryList": [
{
"Query": String,
"LogStore": String,
"Start": String,
"TimeSpanType": String,
"End": String,
"ChartTitle": String,
"DashboardId": String,
"Region": String,
"RoleArn": String,
"StoreType": String,
"PowerSqlMode": String,
"Project": String,
"Store": String
}
]
QueryList属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
Query | String | 是 | 否 | 查询语句。 | 无 |
LogStore | String | 否 | 否 | 日志库。 | 无 |
Start | String | 是 | 否 | 查询开始时间。 | 无 |
TimeSpanType | String | 是 | 否 | 查询区间。 | 无 |
End | String | 是 | 否 | 查询结束时间。 | 无 |
ChartTitle | String | 否 | 否 | 图表标题。 | 无 |
DashboardId | String | 否 | 否 | 告警仪表盘ID。 | 无 |
Region | String | 否 | 否 | 查询Project所在地域。 | 无 |
RoleArn | String | 否 | 否 | 访问数据所需的RAM角色的ARN。 | 更多信息,请参见配置访问控制。 |
StoreType | String | 否 | 否 | 数据源类型。 | 取值:- log:日志库。
- metric:时序库。
- meta:资源数据。
|
PowerSqlMode | String | 否 | 否 | 是否使用独享SQL。 | 取值:- auto:自动切换。
- enable:启动独享SQL。
- disable:禁用独享SQL。
|
Project | String | 否 | 否 | 所关联的Project。 | 无 |
Store | String | 否 | 否 | 所关联的Logstore、Metricstore或资源数据。 | 无 |
Schedule语法
"Schedule": {
"Type": String,
"Interval": String,
"Hour": Integer,
"DayOfWeek": Integer,
"CronExpression": String,
"Delay": Integer,
"RunImmediately": Boolean
}
Schedule属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
Type | String | 是 | 是 | 类型。 | 取值:- Hourly:每小时。
- Daily:每天。
- Weekly:每周。
- FixedRate:固定间隔。
- Cron:Cron表达式。
|
Interval | String | 否 | 是 | 触发周期。 | 当Type取值为FixedRate时,该参数必须指定。 取值示例: |
Hour | Integer | 否 | 是 | 触发时间。 | 当Type取值为Daily或Weekly时,该参数必须指定。 取值范围:0~23。 |
DayOfWeek | Integer | 否 | 是 | 触发时间(星期)。 | 当Type取值为Weekly时,该参数必须指定。 取值范围:1~7。 |
CronExpression | String | 否 | 是 | Cron表达式。 | 当Type取值为Cron时,该参数必须指定。 |
RunImmediately | Boolean | 否 | 是 | 是否立即触发。 | 取值: |
Delay | Integer | 否 | 是 | 延迟触发。 | 无 |
SeverityConfigurations语法
"SeverityConfigurations": {
"EvalCondition": Map,
"Severity": Integer
}
EvalCondition语法
"EvalCondition": {
"Condition": String,
"CountCondition": String
}
EvalCondition属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
Condition | String | 否 | 否 | 数据匹配表达式。 | - 不需要判定数据内容时,设置为空字符串即可。
- 其余情况,需设置为表达式,例如:errCnt > 10。
|
CountCondition | String | 否 | 否 | 数据条数判断表达式。 | - 表示存在数据即满足时,设置为空字符串即可。
- 其余情况,需设置为表达式,例如:__count__ > 3。
|
Labels语法
"Labels": [{
"Value": String,
"Key": String
}]
Labels属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
Value | String | 是 | 否 | 字段值。 | 无 |
Key | String | 是 | 否 | 字段名称。 | 无 |
GroupConfiguration语法
"GroupConfiguration": {
"Type": String,
"Fields": List
}
GroupConfiguration属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
Type | String | 是 | 否 | 分组评估类型。 | 取值:- no_group:不分组。
- custom:自定义。
- labels_auto:标签自动。仅适用于时序数据。
|
Fields | List | 否 | 否 | 用于分组评估的字段。 | 无 |
Annotations语法
"Annotations": [{
"Value": String,
"Key": String
}]
Annotations属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
Key | String | 是 | 否 | 字段名称。 | 无 |
Value | String | 是 | 否 | 字段值。 | 无 |
JoinConfigurations语法
"JoinConfigurations": {
"Type": String,
"Condition": String
}
JoinConfigurations属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
Condition | String | 否 | 否 | 条件表达式。 | 当type取值为cross_join、concat或no_join时,必须设置该参数。例如:$0.host == $1.ip。 |
Type | String | 是 | 否 | 集合操作类型。 | 取值:- cross_join:笛卡尔积。
- inner_join:内联。
- left_join:左联。
- right_join:右联。
- full_join:全联。
- left_exclude:左斥。
- right_exclude:右斥。
- concat:拼接,顺序遍历每个数据集。
- no_join:不合并,只取第一个数据集。
|
PolicyConfiguration语法
"PolicyConfiguration": {
"RepeatInterval": String,
"ActionPolicyId": String,
"AlertPolicyId": String,
"UseDefault": Boolean
}
PolicyConfiguration属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
---|
RepeatInterval | String | 否 | 否 | 重复等待时间。 | 无 |
ActionPolicyId | String | 否 | 否 | 使用的行动策略ID。 | 如果是高级模式且所选的告警策略未配置动态行动策略,则设置ActionPolicyId为空字符串。 |
AlertPolicyId | String | 否 | 否 | 告警策略ID。 | - 如果是极简模式或普通模式,设置为sls.builtin.dynamic(系统内置的动态告警策略)。
- 如果是高级模式,设置为指定的告警策略ID。
|
UseDefault | Boolean | 否 | 否 | 兼容字段。 | 固定值:false。 |
示例
YAML
格式
ROSTemplateFormatVersion: '2015-09-01'
Parameters: {}
Resources:
Alert:
Type: ALIYUN::SLS::Alert
Properties:
Project: TestSlsProject
Detail:
DisplayName: ros-test-alert
Description: test
Schedule:
Delay: 1
Interval: 15m
Type: FixedRate
RunImmediately: false
State: Enabled
Configuration:
Throttling: 5m
NotifyThreshold: 1
QueryList:
- End: now
LogStore: audit-cf5362d1f87754fb29
ChartTitle: k8s-log-c7b729e7ea122425182133bc2c3ea
Start: '-15m'
Query: |-
objectRef.resource : "networkpolicies" and verb : create NOT user.username: node NOT user.username: serviceaccount NOT user.username: apiserver NOT user.username: kube-scheduler NOT user.username: kube-controller-manager | SELECT auditID as "事件ID", date_format(from_unixtime(__time__), '%Y-%m-%d %T' ) as "操作时间", "objectRef.name" as "Name", "objectRef.namespace" as "Namespace", "responseStatus.code" as "状态码",
CASE WHEN "user.username" != 'kubernetes-admin' then "user.username"
WHEN "user.username" = 'kubernetes-admin' and regexp_like("annotations.authorization.k8s.io/reason", 'RoleBinding') then regexp_extract("annotations.authorization.k8s.io/reason", ' to User "(\w+)"', 1) ELSE 'kubernetes-admin' END
as "操作账号",
CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END
as "源地址" order by "操作时间"
TimeSpanType: Custom
Dashboard: audit-cf5362d1f87754fb4a_network_policy_op_cn
NotificationList:
- Content: Message
ServiceUri: http://xxxx
Type: DingTalk
- Content: Email Message
EmailList:
- abc@test.com
Type: Email
- MobileList:
- 132373830xx
Content: Cellphone message
Type: SMS
Condition: total > 1
Type: Alert
Name: alert_2
Outputs:
Name:
Description: Alert name.
Value:
Fn::GetAtt:
- Alert
- Name
JSON
格式
{
"ROSTemplateFormatVersion": "2015-09-01",
"Parameters": {
},
"Resources": {
"Alert": {
"Type": "ALIYUN::SLS::Alert",
"Properties": {
"Project": "TestSlsProject",
"Detail": {
"DisplayName": "ros-test-alert",
"Description": "test",
"Schedule": {
"Delay": 1,
"Interval": "15m",
"Type": "FixedRate",
"RunImmediately": false
},
"State": "Enabled",
"Configuration": {
"Throttling": "5m",
"NotifyThreshold": 1,
"QueryList": [
{
"End": "now",
"LogStore": "audit-cf5362d1f87754fb29",
"ChartTitle": "k8s-log-c7b729e7ea122425182133bc2c3ea",
"Start": "-15m",
"Query": "objectRef.resource : \"networkpolicies\" and verb : create NOT user.username: node NOT user.username: serviceaccount NOT user.username: apiserver NOT user.username: kube-scheduler NOT user.username: kube-controller-manager | SELECT auditID as \"事件ID\", date_format(from_unixtime(__time__), '%Y-%m-%d %T' ) as \"操作时间\", \"objectRef.name\" as \"Name\", \"objectRef.namespace\" as \"Namespace\", \"responseStatus.code\" as \"状态码\",\n CASE WHEN \"user.username\" != 'kubernetes-admin' then \"user.username\"\n WHEN \"user.username\" = 'kubernetes-admin' and regexp_like(\"annotations.authorization.k8s.io/reason\", 'RoleBinding') then regexp_extract(\"annotations.authorization.k8s.io/reason\", ' to User \"(\\w+)\"', 1) ELSE 'kubernetes-admin' END \n as \"操作账号\", \nCASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END\nas \"源地址\" order by \"操作时间\"",
"TimeSpanType": "Custom"
}
],
"Dashboard": "audit-cf5362d1f87754fb4a_network_policy_op_cn",
"NotificationList": [
{
"Content": "Message",
"ServiceUri": "http://xxxx",
"Type": "DingTalk"
},
{
"Content": "Email Message",
"EmailList": [
"abc@test.com"
],
"Type": "Email"
},
{
"MobileList": [
"132373830xx"
],
"Content": "Cellphone message",
"Type": "SMS"
}
],
"Condition": "total > 1"
},
"Type": "Alert",
"Name": "alert_2"
}
}
}
},
"Outputs": {
"Name": {
"Description": "Alert name.",
"Value": {
"Fn::GetAtt": [
"Alert",
"Name"
]
}
}
}
}