ALIYUN::SLS::Alert类型用于创建告警。

语法

{
  "Type": "ALIYUN::SLS::Alert",
  "Properties": {
    "Project": String,
    "Detail": Map
  }
}

属性

属性名称类型必须允许更新描述约束
ProjectString日志项目名称。
DetailMap告警详情。更多信息,请参见Detail属性

Detail语法

"Detail": {
  "Type": String,
  "Description": String,
  "Configuration": Map,
  "State": String,
  "Schedule": Map,
  "DisplayName": String,
  "Name": String
}

Detail属性

属性名称类型必须允许更新描述约束
TypeString告警类型。
DescriptionString告警描述信息。
ConfigurationMap告警配置。更多信息,请参见Configuration属性
StateString是否启用告警。取值:
  • Enable:启用告警。
  • Disabled:不启用告警。
ScheduleMap日志服务评估警报规则的时间间隔。在警报规则评估期间,如果查询返回的日志条目超过100个,则只检查前100个日志条目。

更多信息,请参见Schedule属性

DisplayNameString告警显示的名称。长度为1~64个字符。
NameString告警名称。

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属性

属性名称类型必须允许更新描述约束
ThrottlingString通知间隔。
ConditionString触发条件。支持加( )、减(-)、乘(*)、除(/)、取模(%)5种基础运算符和大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)、不等于(!=)、正则匹配 (=~)、 正则不匹配(!~)8种比较运算符。

更多信息,请参见告警条件表达式语法

NotificationListList通知列表。更多信息,请参见NotificationList属性
NotifyThresholdInteger触发通知阈值。
DashboardString所属仪表盘。
QueryListList查询列表。更多信息,请参见QueryList属性
TypeString告警类型。固定值:default。
GroupConfigurationMap分组评估配置。更多信息,请参见GroupConfiguration属性
NoDataFireBoolean无数据是否触发告警。取值:
  • true:开启无数据告警。

    如果查询和分析的结果为无数据的次数时,超过连续触发阈值,则产生一条告警。

    说明 当查询和分析的结果有多个时,使用集合操作后的结果。

    更多信息,请参见无数据告警

  • false(默认):关闭无数据告警。
ThresholdInteger设置连续触发阈值。当累计的触发次数达到该值时,产生一条告警。不满足触发条件时不计入统计。
SeverityConfigurationsList触发条件,至少设置一条触发条件。更多信息,请参见SeverityConfigurations属性
LabelsList标签。更多信息,请参见Labels属性
AutoAnnotationBoolean是否开启自动添加标注。取值:
  • true(默认):开启自动添加标注。系统自动在告警中添加__count__等信息。

    更多信息,请参见自动标注

  • false:关闭自动添加标注。
PolicyConfigurationMap告警策略配置。更多信息,请参见PolicyConfiguration属性
SendResolvedBoolean是否发送恢复通知。取值:
  • true:开启告警恢复通知。告警恢复时,发送一条恢复告警。

    更多信息,请参见恢复通知

  • false(默认):关闭告警恢复通知。
NoDataSeverityInteger无数据触发告警时的告警严重度。更多信息,请参见告警严重度
AnnotationsList标注。更多信息,请参见Annotations属性
MuteUntilInteger告警触发阈值。
JoinConfigurationsList集合操作配置。更多信息,请参见JoinConfigurations属性
  • 如果QueryList中只有一项查询统计,则不需要设置JoinConfigurations。
  • 如果QueryList中有2~3个查询统计,则必须设置JoinConfigurations,用于关联多个查询分析结果。

    更多信息,请参见多集合操作机制

VersionString告警版本。固定值:2.0。

NotificationList语法

"NotificationList": [
  {
    "Type": String,
    "MobileList": List,
    "ServiceUri": String,
    "Content": String,
    "EmailList": List,
    "Method": String,
    "Headers": Map
  }
]

NotificationList属性

属性名称类型必须允许更新描述约束
TypeString通知类型。取值:
  • SMS:短信。
  • Voice:语音。
  • Email:电子邮件。
  • MessageCenter:通知中心。
  • DingTalk:WebHook-钉钉机器人。
  • Webhook:WebHook-自定义。
ContentString通知内容。支持使用模板变量:${Project}, ${Condition}, ${AlertName}, ${AlertID}, ${Dashboard}, ${FireTime}, ${Results}

更多信息,请参见通知方式

MobileListList手机号码。

通知类型为短信、语音时该参数必填。

同一手机号码每天接收的通知不超过50条。

ServiceUriString请求地址。通知类型为WebHook-自定义或WebHook-钉钉机器人时该参数必填。
EmailListList邮件地址。通知类型为电子邮件时该参数必填。

同一邮箱每天接收的邮件不超过100条。

MethodString请求的方法。
HeadersMap请求头信息。

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属性

属性名称类型必须允许更新描述约束
QueryString查询语句。
LogStoreString日志库。
StartString查询开始时间。
TimeSpanTypeString查询区间。
EndString查询结束时间。
ChartTitleString图表标题。
DashboardIdString告警仪表盘ID。
RegionString查询Project所在地域。
RoleArnString访问数据所需的RAM角色的ARN。更多信息,请参见配置访问控制
StoreTypeString数据源类型。取值:
  • log:日志库。
  • metric:时序库。
  • meta:资源数据。
PowerSqlModeString是否使用独享SQL。取值:
  • auto:自动切换。
  • enable:启动独享SQL。
  • disable:禁用独享SQL。
ProjectString所关联的Project。
StoreString所关联的Logstore、Metricstore或资源数据。

Schedule语法

"Schedule": {
  "Type": String,
  "Interval": String,
  "Hour": Integer,
  "DayOfWeek": Integer,
  "CronExpression": String,
  "Delay": Integer,
  "RunImmediately": Boolean
}

Schedule属性

属性名称类型必须允许更新描述约束
TypeString类型。取值:
  • Hourly:每小时。
  • Daily:每天。
  • Weekly:每周。
  • FixedRate:固定间隔。
  • Cron:Cron表达式。
IntervalString触发周期。当Type取值为FixedRate时,该参数必须指定。

取值示例:

  • 10d:十天。
  • 10h:十小时。
  • 10m:十分钟。
HourInteger触发时间。当Type取值为Daily或Weekly时,该参数必须指定。

取值范围:0~23。

DayOfWeekInteger触发时间(星期)。当Type取值为Weekly时,该参数必须指定。

取值范围:1~7。

CronExpressionStringCron表达式。当Type取值为Cron时,该参数必须指定。
RunImmediatelyBoolean是否立即触发。取值:
  • true:立即触发。
  • false:非立即触发。
DelayInteger延迟触发。

SeverityConfigurations语法

"SeverityConfigurations": {
  "EvalCondition": Map,
  "Severity": Integer
}

SeverityConfigurations属性

属性名称类型必须允许更新描述约束
EvalConditionMap触发条件。更多信息,请参见EvalCondition属性
SeverityInteger告警严重度。更多信息,请参见告警监控规则数据结构

EvalCondition语法

"EvalCondition": {
 "Condition": String,
 "CountCondition": String
}

EvalCondition属性

属性名称类型必须允许更新描述约束
ConditionString数据匹配表达式。
  • 不需要判定数据内容时,设置为空字符串即可。
  • 其余情况,需设置为表达式,例如:errCnt > 10。
CountConditionString数据条数判断表达式。
  • 表示存在数据即满足时,设置为空字符串即可。
  • 其余情况,需设置为表达式,例如:__count__ > 3。

Labels语法

"Labels": [{
  "Value": String,
  "Key": String
}]

Labels属性

属性名称类型必须允许更新描述约束
ValueString字段值。
KeyString字段名称。

GroupConfiguration语法

"GroupConfiguration": {
   "Type": String,
   "Fields": List
}

GroupConfiguration属性

属性名称类型必须允许更新描述约束
TypeString分组评估类型。取值:
  • no_group:不分组。
  • custom:自定义。
  • labels_auto:标签自动。仅适用于时序数据。
FieldsList用于分组评估的字段。

Annotations语法

"Annotations": [{
  "Value": String,
  "Key": String
}]

Annotations属性

属性名称类型必须允许更新描述约束
KeyString字段名称。
ValueString字段值。

JoinConfigurations语法

"JoinConfigurations": {
   "Type": String,
   "Condition": String
}

JoinConfigurations属性

属性名称类型必须允许更新描述约束
ConditionString条件表达式。当type取值为cross_join、concat或no_join时,必须设置该参数。例如:$0.host == $1.ip。
TypeString集合操作类型。取值:
  • 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属性

属性名称类型必须允许更新描述约束
RepeatIntervalString重复等待时间。
ActionPolicyIdString使用的行动策略ID。如果是高级模式且所选的告警策略未配置动态行动策略,则设置ActionPolicyId为空字符串。
AlertPolicyIdString告警策略ID。
  • 如果是极简模式或普通模式,设置为sls.builtin.dynamic(系统内置的动态告警策略)。
  • 如果是高级模式,设置为指定的告警策略ID。
UseDefaultBoolean兼容字段。固定值:false。

返回值

Fn::GetAtt

Name:告警名称。

示例

  • 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"
            ]
          }
        }
      }
    }