使用Terraform玩转SLS告警

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文主要介绍使用Terraform来操作SLS告警监控,告警管理。

本文主要介绍使用Terraform来操作SLS告警监控,告警管理。

目标读者

对告警监控、告警管理有需求的开发运维(DevOps)工程师、稳定性工程师(SRE)、可观测平台运维人员等。

方案背景

Terraform是有HashiCorp公司开源的IT基础架构的自动化编排工具,“Write,Plan and Create Infrastructure as Code”,Terraform的命令行接口(CLI)提供了一种简单的机制,用于将配置文件部署到阿里云或者其他任意支持的云上,并对其进行版本控制。

SLS告警是一站式告警监控、降噪、事务管理、通知分派的智能运维平台。包含日志/时序存储、告警监控、告警管理、通知管理等模块;强大的功能当然也有自动化配置的需求,本文将介绍如何使用Terraform进行简单的配置,即可完成在无界面的告警配置。

使用场景

SLS告警主要涉及三类操作:

  • 告警资源初始化

  • 告警监控规则管理

  • 告警策略/资源数据管理

image.png

场景1:告警资源初始化

  • 初始化告警资源

  • 中心Project:名称为sls-alert-{uid}-{region},其中uid为阿里云主账号,region为用户指定的中心Project地域

  • 中心Logstore:名称为internal-alert-center-log,该logstore挂载在中心Project下,为免费Logstore,主要用来存储告警在执行过程中的执行历史和诊断信息。

  • 内置告警仪表盘:包括全局告警排障中心,全局告警链路中心,全局告警规则中心,开放告警中心。

  • 每个阿里云主账号只需要初始化一次即可;多次操作幂等。

  • 初始化Project告警资源

  • 告警监控规则必须挂载在SLS的某个Project下,在某个Project下创建告警规则之前,需要先初始化Project下的告警资源

  • 告警历史统计Logstore:名称为internal-alert-history,该Logstore为免费Logstore,存储了当前Project下所有告警规则的评估历史记录,包括每次评估的状态和告警触发状态。

  • 内置告警历史统计仪表盘:名称为internal-alert-analysis,仪表盘为内置仪表盘,展示了告警监控规则的执行历史成功率等。

  • 每个Project只需要初始化一次即可;多次操作幂等。

场景2:告警监控规则管理

告警监控规则是指可以设置对时序,日志等数据源的监控设置,包含协同监控,分组评估,触发条件设置,严重度设置,无数据告警和告警恢复等条件参数的设置。

场景3:告警资源数据管理

在SLS告警中,监控规则触发后,触发的告警消息会发现设置好的告警策略中,告警策略包含合并、静默、抑制等降噪处理,经过降噪处理后会发往指定的行动策略,行动策略可以简单的理解为通知渠道;

通知渠道包含短信、语音、邮件、Webhook、钉钉、微信、飞书、Function Compute和EventBridge等。里面涉及用户、用户组、Webhook的管理;

以上告警策略、行动策略、用户、用户组、Webhook等,在SLS中统称为告警资源数据。​

方案实施

本文以一个典型的logstore监控为例,使用Terraform来管理日志服务的告警资源、监控规则、和告警资源数据。

前提条件

安装和配置Terraform

Terraform安装和配置可以参考阿里云Terraform的官方链接,并且在Cloud Shell中已经集成Terraform命令行。

操作步骤

步骤一:配置身份信息以及告警相关的中心区域

export ALICLOUD_ACCESS_KEY="LTAIUrZCw3********"
export ALICLOUD_SECRET_KEY="zfwwWAMWIAiooj14GQ2*************"
export ALICLOUD_REGION="cn-heyuan"

步骤二:初始化阿里云告警资源

如下配置会在ALICLOUD_REGION下创建资源如下:

  • project:名称格式为sls-alert-{uid}-{region}

  • logstore:internal-alert-center-log(该logstore免费)

  • Project内置仪表盘:全局告警排障中心,全局告警链路中心,全局告警规则中心,开放告警中心

  • 具体参数含义可以参考:alicloud_log_alert_resource

data "alicloud_log_alert_resource" "example" {
  type          = "user"
  lang          = "cn"
}

步骤三:初始化Project告警资源

如下配置会在test-project下创建如下资源:

  • logstore:internal-alert-log (该logstore免费)

  • 告警仪表盘

  • 注意,test-project需要在ALICLOUD_REGION这个region下

  • 具体参数含义可以参考:alicloud_log_alert_resource

data "alicloud_log_alert_resource" "example" {
  type          = "project"
  project       = "test-project"
}

步骤四:创建告警规则

以下配置将会创建告警监控规则,主要包括如下内容:

  • 告警名称、定时策略、无数据告警等

  • 查询列表,可以指定logstore和metricstore查询

  • 标签,标注配置,分组评估,严重度配置等

  • 告警策略和行动策略配置

  • 具体参数含义参考:alicloud_log_alert

resource "alicloud_log_alert" "example" {
  version           = "2.0"
  type              = "default"
  project_name      = "test-project"
  alert_name        = "tf-test-alert-2"
  alert_displayname = "tf-test-alert-displayname-2"
  dashboard         = "tf-test-dashboard"
  mute_until        = "163248****"
  no_data_fire      = "false"
  no_data_severity  = 8
  send_resolved     = true
  schedule_interval = "5m"
  schedule_type     = "FixedRate"
  query_list {
    store       = "tf-test-logstore"
    store_type  = "log"
    project     = "test-project"
    region      = "cn-heyuan"
    chart_title = "chart_title"
    start       = "-60s"
    end         = "20s"
    query       = "* AND aliyun | select count(1) as cnt"
    time_span_type = "Custom"
  }
  query_list {
    store       = "tf-test-logstore-5"
    store_type  = "log"
    project     = "test-project"
    region      = "cn-heyuan"
    chart_title = "chart_title"
    start       = "-60s"
    end         = "20s"
    query       = "error | select count(1) as error_cnt"
    time_span_type = "Custom"
  }
  join_configurations {
      type = "cross_join"
      condition = ""
  }
  labels {
    key = "env"
    value = "test"
  }
  labels {
    key = "env1"
    value = "test1"
  }
  annotations {
    key = "title"
    value = "alert title-1"
  }
  annotations {
    key = "desc"
    value = "alert desc"
  }
  annotations {
    key = "test_key"
    value = "test value"
  }
  group_configuration {
    type   = "custom"
    fields = ["a", "b", "d"]
  }
  severity_configurations {
    severity = 8
    eval_condition = {
      condition = "cnt > 3"
      count_condition = "__count__ > 3"
    }
  }
  severity_configurations {
    severity = 6
    eval_condition = {
      condition = ""
      count_condition = "__count__ > 0"
    }
  }
  severity_configurations {
    severity = 2
    eval_condition = {
      condition = ""
      count_condition = ""
    }
  }
  
  policy_configuration {
    alert_policy_id  = "sls.builtin.dynamic"
    action_policy_id = "sls_test_action"
    repeat_interval  = "1m"
  }
}

步骤五:告警资源创建

告警资源主要包括用户、用户组、值班组、webhook集成、告警策略、行动策略、内容模板、默认日志和渠道额度等。接下来以用户创建为例,介绍terraform格式,下面附有相关资源列表及结构介绍。

  1. 用户创建

  • resource_name使用资源类型表格中的sls.common.user

  • record_id表示用户的ID

  • tag表示用户名称

  • value是一个JSON字符串,参照上表中的结构示例

resource "alicloud_log_resource_record" "user" {
  resource_name         = "sls.common.user"
  record_id             = "test_tf_user"
  tag                   = "test tf user" 
  value                 = "{\n\t\"user_name\": \"test tf user\", \n\t\"sms_enabled\": true, \n\t\"phone\": \"1390000****\", \n\t\"voice_enabled\": false, \n\t\"email\": [\n\t\t\"test@qq.com\"\n\t], \n\t\"enabled\": true, \n\t\"user_id\": \"test_tf_user\", \n\t\"country_code\": \"86\"\n}"
}

相关资源介绍

资源类型

resource_name

record_id

tag

value结构举例

备注

用户

sls.common.user

值同user_id

值同user_name

用户组

sls.common_user_group

值同

user_group_id

值同

user_group_name

  • record_id:user_id

  • tag: user_name

值班组

sls.alert.oncall_group

值同oncall_id

值同

oncall_name

webhook集成

sls.alert.action_webhook

值同id

值同name

  • type类型有:

  • dingtalk

  • wechat

  • lark

  • slack

  • custom

  • 除了 custom 类型外,其余几类 method 字段固定为 POST,headers 固定为空数组。

告警策略

sls.alert.alert_policy

值同policy_id

值同policy_name

  • is_default 固定为 false

  • group_script 为路由合并策略

  • inhibit_script 为抑制策略

  • silence_script 为静默策略

  • 通过Terraform配置,group_script、inhibit_script 以及 silence_script 只包含DSL脚本信息,没有UI配置信息,因此控制台上无法看到相应的图形展示

行动策略

sls.alert.action_policy

值同action_policy_id

值同action_policy_name

  • is_default 固定为 false

  • labels 为保留字段,固定为{}

  • primary_policy_script 为第一行动策略

  • secondary_policy_script 为第二行动策略

  • escalation_* 为控制第二行动策略是否开启的配置,可参考控制台上配置项

  • 通过Terraform配置的话,primary_policy_script 以及 secondary_policy_script 只包含DSL脚本信息,没有UI配置信息,因此控制台上无法看到相应的图形展示

内容模板

sls.alert.content_template

值同template_id

值同template_name

  • is_default 固定为 false

  • templates 下包含每个渠道的模板配置,如果某个渠道的 content 为空,则使用系统默认的模板配置,参考 默认内容模板

  • locale 取值为 zh-CN 或 en-US

  • webhook 和 fc 渠道的 send_type 取值为 single 或者 merged,表示逐条通知或者合并通知

默认日历

sls.common.calender

值同calender_id

值同calender_name

  • 默认日历的 id 固定为 default_calendar

  • 日历配置比较复杂,建议通过控制台来操作

渠道额度

sls.alert.channel_quota

值同id

值空

  • id 固定为 default

  • quota_script 为 DSL 配置,通过 Terraform 配置会丢失UI配置信息,因此控制台上无法看到相应的图形展示

  • 建议通过控制台来配置

Terraform常用命令

  • 创建terraform.tf文件,输入上述内容,并保存在当前的执行目录中。

  • terraform init:初始化terraform配置

  • terraform plan:可以查看terraform.tf将修改与已生效(apply)的差异,结果以diff形式展示

  • terraform apply:将terraform.tf中的资源的创建和更新

  • terraform destory:对资源进行销毁

  • terraform import:对已有资源(通过非Terraform创建和管理的资源)进行导入。

参考

image.png

相关实践学习
日志服务之数据清洗与入湖
本教程介绍如何使用日志服务接入NGINX模拟数据,通过数据加工对数据进行清洗并归档至OSS中进行存储。
目录
相关文章
|
2月前
|
SQL 存储 监控
使用CloudLens for SLS监控Project资源配额最佳实践
本文主要介绍如何使用CloudLens for SLS中全局错误日志、监控指标做Project 资源配额的水位监控 、超限监控 以及 如何提交资源配额提升申请。
79351 19
使用CloudLens for SLS监控Project资源配额最佳实践
|
2月前
|
JSON Prometheus Cloud Native
Grafana 系列 -Loki- 基于日志实现告警
Grafana 系列 -Loki- 基于日志实现告警
|
存储 SQL 监控
SLS新版告警自助排查系列之告警监控
在SLS告警中,告警监控通过对数据源的查询监控,然后产生告警,并将告警发送到告警管理,告警管理会对告警进行降噪处理包括合并抑制静默后,在将告警发送给行动管理,最终发送通知到用户配置的接收渠道。在整个过程中,告警监控作为告警的源头,决定着告警是否能准确的发出。在配置告警监控规则时,配置不当或者配置错误都会导致告警不能触发或者不是希望的触发。本文主要介绍在告警监控中如何进行自助排查问题。
545 0
|
弹性计算 Prometheus 运维
【数据可观测】阿里云的Grafana云监控大盘服务
阿里云发布的grafana托管服务,更是为云上的资产提供了高效的监控数据可观测能力。阿里云grafana弹性、免运维,可以方便的对接云上云下的各种数据源。
2267 1
【数据可观测】阿里云的Grafana云监控大盘服务
阿里云Grafana告警管理
Grafana服务默认集成到ARMS告警管理中,通过在Grafana中配置告警的通知对象可以将Grafana的告警事件上报至ARMS告警管理中。在ARMS告警管理中配置Grafana对应的通知策略后,系统将会通过电话、短信、邮件或钉钉的方式发送告警通知。本文介绍如何通过配置Grafana告警将Grafana告警上报至ARMS告警管理。
704 1
阿里云Grafana告警管理
|
2月前
|
存储 弹性计算 API
使用Terraform玩转logtail日志采集
本文将介绍使用Terraform实现logtail日志自动化采集的最佳实践。
使用Terraform玩转logtail日志采集
|
存储 JSON 运维
使用Terraform玩转SLS告警
Terraform是有HashiCorp公司开源的IT基础架构的自动化编排工具,“Write,Plan and Create Infrastructure as Code”,Terraform的命令行接口(CLI)提供了一种简单的机制,用于将配置文件部署到阿里云或者其他任意支持的云上,并对其进行版本控制。 SLS告警告警是一站式告警监控、降噪、事务管理、通知分派的智能运维平台。包含日志/时序存储、告警监控、告警管理、通知管理等模块;强大的功能当然也有自动化配置的需求,本文将介绍如何使用Terraform进行简单的配置,即可完成在无界面的告警配置。
717 0
使用Terraform玩转SLS告警
|
存储 Prometheus 运维
顺滑迁移Prometheus告警到SLS告警
Prometheus作为一个开源的云原生监控系统,具有很广泛的应用场景,通过各种Exporter收集各类设备,应用的指标,将各类指标抽象为时序数据,在Prometheus上可以使用PromQL进行高效的指标查询和分析。SLS告警是云上的一站式告警监控运维平台,支持各种Ops场景。SLS告警系统主要包括指标采集,监控系统,告警管理,通知管理等子系统。本文介绍如何将Prometheus告警无缝转换为SLS告警,并使用SLS告警的管理功能。
733 0
|
JSON 监控 应用服务中间件
SLS告警最佳实践——Webhook通知最佳实践
SLS告警通知对接了常用的各种 IM 系统,例如钉钉、企业微信、飞书、Slack。SLS对这些系统的 Webhook 进行了包装,用户无需关心各个通知渠道的具体消息格式,只需要配置希望通知的内容即可。 除此之外,还有其它的一些场景,需要使用通用Webhook(自定义 Webhook),本文主要介绍通用 Webhook 使用过程中常见的一些问题和最佳实践。
674 0
|
存储 运维 Kubernetes
SLS告警最佳实践—— K8s事件中心告警管理
K8S事件中心是SLS的日志应用之一,主要记录了集群的状态变更,包括创建Pod、运行Pod、删除Pod、组件异常等。K8S事件中心实时收集K8S中的所有事件并提供存储、查询、分析、可视化与告警能力。K8s事件中心默认也会提供仪表盘和告警,本文主要介绍下如何在ACK控制台和SLS控制台管理K8s事件中心的告警及其区别和使用场景。
1117 0
SLS告警最佳实践—— K8s事件中心告警管理

推荐镜像

更多