使用Terraform玩转SLS告警

2022-05-10 04:37 54 浏览

目标读者

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

方案背景

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

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

使用场景

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

  • 告警资源初始化

  • 告警监控规则管理

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

场景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命令行。

  • 在Cloud Shell中使用Terraform

  • 在本地安装和部署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        = "1632486684"   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\": \"18888888889\", \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创建和管理的资源)进行导入。


    分享:
    相关内容
    • 一天完成基于Serverless架构的头像漫画风处理小程序
    • Serverless 应用优化四则秘诀
      Serverless 架构下,虽然我们更多精力是关注我们的业务代码,但是实际上对于一些配置和成本也是需要进行关注的,并且在必要的时候,还需要根据配置与成本进行对我们的 Serverless 应用进行配置优化和代码优化。资源评估依旧重要Serverless 架构虽然是按量付费的,但是并不代表他就一定比传统的服务器租用费用低,如果我们对自己的项目评估不准确,对一些指标设置不合理,Serverless
    • 轻量级AWS CloudTrail审计方案
    • 通过日志服务实现数据库MySQL入湖OSS实践
      目标读者需要将MySQL数据导入SLS或者OSS进行分析和存储的开发运维人员。方案背景日志服务(SLS)是云原生观测分析平台,为Log/Metric/Trace等数据提供大规模、低成本、实时平台化服务。一站式提供数据采集、加工、分析、告警可视化与投递功能。阿里云提供了企业级的数据湖解决方案,存储层基于阿里云对象存储OSS构建。日志服务支持开箱即用的OSS投递入湖功能,实现数据的端到端的
    • MySQL到SLS:一站式查询分析可视化场景介绍
    相关推荐
    阿里云
    热门内容
    • 如何解决[Docker管理器]运行时发生错误!
      解决办法:返回主页,点击右上角修复。或者等待10分钟自主会修复!
    • 宝塔防火墙禁止境外访问,禁止境内访问讲解
      一、禁止境外访问,禁止境内访问简介首先说明一下:禁止海外访问--->禁止除大陆之外的地区访问禁止境内访问---> 禁止国内访问二、防御设置2.1 禁止海外访问 (全局开关+站点开关=开启)这里全局开关需要开启。这个开启只是说开启了全局的。如果需要网站开启需要在网站里面开启才能让网站禁止海外访问两边开启成功之后才是真正的给这个网站开启了禁止海外访问2.1 禁止境内访问 (
    • 如何解决宝塔安装出现"下载宝塔运行环境失败,请尝试...
      用的是阿里云服务器,安全组该放行的端口都放行了您好,您那边使用的是哪个地区的服务器呢?您那边执行下面命令绑定下hosts然后重新安装看下是否正常echo "36.133.1.8 www.bt.cn download.bt.cn api.bt.cn dg1.bt.cn dg2.bt.cn" >> /etc/hosts
    • 如何解决ubuntu20.04编译安装nginx失败
    • 如何解决面板安装成功,无法启动
      面板已经安装成功,但是无法启动面板。您使用的服务器是什么版本的呢?该错误提示缺少了gevnet和psutil模块使用SSH工具链接服务器,然后执行下面命令安装模块,然后重启面板如果重启不成功,执行bt 22命令查看面板日志!btpip install psutilbtpip install gevent
    Tags标签
    联系方式