如何在 terraform 中为 SQL DB 创建警报规则

Posted

技术标签:

【中文标题】如何在 terraform 中为 SQL DB 创建警报规则【英文标题】:How to create alert rule in terraform for SQL DB 【发布时间】:2021-10-31 07:00:49 【问题描述】:

我似乎找不到任何示例,并且根据我在做什么,我遇到了不同的错误。

我正在努力让它发挥作用,但它没有发生......有什么想法吗?

resource "azurerm_monitor_metric_alert" "example" 
  name                = "example-metricalert"
  resource_group_name = azurerm_resource_group.example.name
  scopes              = [azurerm_mssql_database.test.server_id]
  description         = "Action will be triggered when cpu is greater than 80%."

  criteria 
    metric_namespace = "Microsoft.Sql/servers/databases"
    metric_name      = "CPU_percentage"
    aggregation      = "Average"
    operator         = "GreaterThan"
    threshold        = 80



【问题讨论】:

可能还值得添加创建资源组和 sql server 的代码 “不同的错误取决于我在做什么” - 究竟是什么错误? 创建或更新指标警报“example-metricalert”时出错(资源组“tempsql-rg”):insights.MetricAlertsClient#CreateOrUpdate:响应请求失败:StatusCode=400 -- 原始错误:autorest/天蓝色:服务返回错误。 Status=400 Code="ResourceNotFound" Message="\"code\":\"BadRequest\",\"message\":\"检测无效值:Microsoft.Sql/servers/databases 查询参数:'metricnamespace' ,值必须是:Microsoft.Sql/servers 如果提供了查询参数,也可以跳过这个可选的查询参数。\ 不确定如何解决此错误。我更改了 metric_name = "cpu_percent" 因为我找到了一个指标名称列表...如果我更改 metric_namespace ="Microsoft.Sql/servers" 那么我得到一组全新的错误.. 它也没有我想要使用的指标 cpu 百分比 【参考方案1】:

您可以使用以下代码为 SQL DB 创建指标警报。我已经针对现有的 SQL DB 对其进行了测试,因此使用了数据块。

Main.tf

   provider "azurerm" 
  features 



data "azurerm_mssql_server" "example" 
  name                = "ztestansumanserver"
  resource_group_name = "yourresourcegroup"


data "azurerm_mssql_database" "dbtomonitor" 
  name      = "testansumandb"
  server_id = data.azurerm_mssql_server.example.id


resource "azurerm_monitor_action_group" "example" 
  name                = "CriticalAlertsAction"
  resource_group_name = data.azurerm_mssql_server.example.resource_group_name
  short_name          = "p0action"

  email_receiver 
    name                    = "sendtoadmin"
    email_address           = "youremailid"
    use_common_alert_schema = true
  


resource "azurerm_monitor_metric_alert" "example" 
  name                = "example-metricalert"
  resource_group_name = data.azurerm_mssql_server.example.resource_group_name
  scopes              = [data.azurerm_mssql_database.dbtomonitor.id]
  description         = "Action will be triggered when cpu percent is greater than 80."

  criteria 
    metric_namespace = "Microsoft.Sql/servers/databases"
    metric_name      = "cpu_percent"
    aggregation      = "Average"
    operator         = "GreaterThan"
    threshold        = 80
  
 action 
    action_group_id = azurerm_monitor_action_group.example.id
  

输出:

注意:根据上面的脚本警报创建成功,它也会在cpu_percent > 80时触发一封邮件给你。

参考:

Azure Monitor supported metrics by resource type - Azure Monitor | Microsoft Docs

【讨论】:

谢谢!不同的是 .id 而我使用的是 .server_id

以上是关于如何在 terraform 中为 SQL DB 创建警报规则的主要内容,如果未能解决你的问题,请参考以下文章

如果 SQL :parameter 在 DB2 JDBC 中为“ALL”,如何匹配所有行?

Terraform 在 Azure SQL 数据库中启用 MIcrosoft Defender for SQL

在 terraform 文件而不是 env 变量中为 Terraform 提供凭据

terraform:如何覆盖 AWS RDS 最终快照

在 Terraform 中为价格配置 AWS 自动扩展组?

如何创建通用 cosmos db terraform 模块以添加多个地理位置