ALIYUN::SLS::Alert

更新时间:
复制 MD 格式

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。更多信息,请参见跨Project监控数据授权。
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。

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

SeverityConfigurations语法

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

SeverityConfigurations属性

属性名称类型必须允许更新描述约束
EvalConditionMap否否触发条件。更多信息,请参见EvalCondition属性。
SeverityInteger是否告警严重度。更多信息,请参见告警严重度 取值 Critical(严重) 10 High(高) 8 Medium(中) 6 Low(低) 4 Report(报告) 2。

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