0.Core.Foundation/monitor.tf (88 lines of code) (raw):

###################################################################### # Monitor (https://learn.microsoft.com/azure/azure-monitor/overview) # ###################################################################### variable monitor { type = object({ name = string grafanaDashboard = object({ tier = string version = number apiKey = object({ enable = bool }) }) applicationInsights = object({ type = string }) logAnalytics = object({ workspace = object({ tier = string }) }) retentionDays = number }) } resource azurerm_monitor_workspace studio { name = var.monitor.name resource_group_name = azurerm_resource_group.studio_monitor.name location = azurerm_resource_group.studio_monitor.location public_network_access_enabled = false } resource azurerm_dashboard_grafana studio { name = var.monitor.name resource_group_name = azurerm_resource_group.studio_monitor.name location = azurerm_resource_group.studio_monitor.location sku = var.monitor.grafanaDashboard.tier grafana_major_version = var.monitor.grafanaDashboard.version api_key_enabled = var.monitor.grafanaDashboard.apiKey.enable public_network_access_enabled = false identity { type = "UserAssigned" identity_ids = [ azurerm_user_assigned_identity.studio.id ] } azure_monitor_workspace_integrations { resource_id = azurerm_monitor_workspace.studio.id } } resource azurerm_log_analytics_workspace studio { name = var.monitor.name resource_group_name = azurerm_resource_group.studio_monitor.name location = azurerm_resource_group.studio_monitor.location sku = var.monitor.logAnalytics.workspace.tier retention_in_days = var.monitor.retentionDays internet_ingestion_enabled = false internet_query_enabled = false identity { type = "UserAssigned" identity_ids = [ azurerm_user_assigned_identity.studio.id ] } } resource azurerm_application_insights studio { name = var.monitor.name resource_group_name = azurerm_resource_group.studio_monitor.name location = azurerm_resource_group.studio_monitor.location workspace_id = azurerm_log_analytics_workspace.studio.id application_type = var.monitor.applicationInsights.type retention_in_days = var.monitor.retentionDays internet_ingestion_enabled = false internet_query_enabled = false } output monitor { value = { resourceGroup = { name = azurerm_resource_group.studio_monitor.name location = azurerm_resource_group.studio_monitor.location } workspace = { name = azurerm_monitor_workspace.studio.name } logAnalytics = { id = azurerm_log_analytics_workspace.studio.id } applicationInsights = { id = azurerm_application_insights.studio.id name = azurerm_application_insights.studio.name } } }