使用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模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
消息中间件 存储 运维
Zabbix与ELK整合实现对安全日志数据的实时监控告警
Zabbix与ELK整合实现对安全日志数据的实时监控告警
Zabbix与ELK整合实现对安全日志数据的实时监控告警
|
5月前
|
运维 Serverless API
Serverless 应用引擎产品使用合集之sls日志告警调用函数计算,出现抛出的结果异常,是什么原因
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
5月前
|
存储 运维 Serverless
函数计算产品使用问题之日志告警不生效,一般是由于什么造成的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
Web App开发 存储 监控
日志服务之告警接入与管理
本教程介绍如何使用日志服务接入NGINX模拟数据,并配置告警规则来对NGINX访问错误进行监控。
405 0
|
6月前
|
JSON Prometheus Cloud Native
Grafana 系列 -Loki- 基于日志实现告警
Grafana 系列 -Loki- 基于日志实现告警
|
监控 数据库
136 日志监控告警系统案例(代码实现)
136 日志监控告警系统案例(代码实现)
114 0
|
监控
135 日志监控告警系统案例(数据模型设计)
135 日志监控告警系统案例(数据模型设计)
154 0
|
消息中间件 监控 关系型数据库
134 日志监控告警系统案例(功能架构分析)
134 日志监控告警系统案例(功能架构分析)
140 0
|
分布式计算 监控 前端开发
133 日志监控告警系统案例(需求分析)
133 日志监控告警系统案例(需求分析)
100 0
|
6月前
|
机器学习/深度学习 运维 监控
用SLS配置日志关键字告警的N种方法
本文由日志关键词告警出发,介绍了使用SLS进行关键词监控告警配置,并且介绍了几种常见的配置方法,可以覆盖关键词监控的大部分场景。
343 0
用SLS配置日志关键字告警的N种方法

推荐镜像

更多