terraform-provider-azurerm监控与日志:Application Insights与Log Analytics
在云原生架构中,监控与日志系统是保障服务稳定性的核心组件。本文将通过terraform-provider-azurerm,详细介绍如何基于Azure Monitor构建完整的可观测性方案,重点解析Application Insights与Log Analytics的配置实践,帮助运营人员实现资源状态全链路追踪。
核心组件与架构
Azure监控生态主要包含两大核心服务:Application Insights专注于应用性能监控(APM),提供实时请求追踪、异常检测和用户行为分析;Log Analytics则作为集中式日志平台,支持多源数据聚合与高级查询。两者通过Azure Monitor无缝集成,形成从基础设施到应用层的全栈可观测性。
Log Analytics工作区配置
基础部署
创建Log Analytics工作区是搭建日志系统的第一步,以下示例展示如何通过Terraform声明式配置实现基础部署:
resource "azurerm_resource_group" "monitoring" {
name = "monitoring-resources"
location = "East Asia"
}
resource "azurerm_log_analytics_workspace" "main" {
name = "app-monitor-ws"
location = azurerm_resource_group.monitoring.location
resource_group_name = azurerm_resource_group.monitoring.name
sku = "PerGB2018"
retention_in_days = 30
tags = {
Environment = "Production"
Department = "DevOps"
}
}
数据接入配置
通过诊断设置实现Azure资源日志集中收集,以Kusto集群为例:
resource "azurerm_monitor_diagnostic_setting" "kusto" {
name = "kusto-diagnostics"
target_resource_id = data.azurerm_kusto_cluster.example.id
eventhub_name = azurerm_eventhub.logs.name
eventhub_authorization_rule_id = azurerm_eventhub_namespace_authorization_rule.root.id
dynamic "enabled_log" {
for_each = data.azurerm_monitor_diagnostic_categories.example.log_category_types
content {
category = enabled_log.key
}
}
metric {
category = "AllMetrics"
}
}
Application Insights配置
资源部署
Application Insights资源配置需关联应用服务,支持自动检测框架类型并生成遥测配置:
resource "azurerm_application_insights" "app" {
name = "app-insights-demo"
location = azurerm_resource_group.monitoring.location
resource_group_name = azurerm_resource_group.monitoring.name
application_type = "web"
retention_in_days = 90
workspace_id = azurerm_log_analytics_workspace.main.id
sampling_percentage = 100
enable_ip_masking = true
}
应用集成
通过应用设置实现与App Service的无缝集成:
resource "azurerm_app_service" "webapp" {
# 其他基础配置...
app_settings = {
"APPINSIGHTS_INSTRUMENTATIONKEY" = azurerm_application_insights.app.instrumentation_key
"APPLICATIONINSIGHTS_CONNECTION_STRING" = azurerm_application_insights.app.connection_string
"APPINSIGHTS_SAMPLING_PERCENTAGE" = "100"
}
}
高级功能实现
跨资源查询
利用Log Analytics的跨资源查询能力,实现Application Insights数据与基础设施日志的关联分析:
AppRequests
| where Success == false
| join kind=inner (
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.COMPUTE"
| where Category == "VMHealth"
) on $left.ClientIP == $right.ClientIP
| project TimeGenerated, RequestId, VMName, ClientIP, ResultCode
智能警报配置
结合指标告警与日志查询告警,构建多维度异常检测机制:
resource "azurerm_monitor_metric_alert" "high_error_rate" {
name = "high-error-rate-alert"
resource_group_name = azurerm_resource_group.monitoring.name
scopes = [azurerm_application_insights.app.id]
description = "当5xx错误率超过5%时触发警报"
criteria {
metric_namespace = "Microsoft.Insights/components"
metric_name = "requests/failed"
aggregation = "Average"
operator = "GreaterThan"
threshold = 5
time_aggregation = "Total"
dimension {
name = "ComponentName"
operator = "Include"
values = [azurerm_application_insights.app.name]
}
}
action {
action_group_id = azurerm_monitor_action_group.alerts.id
}
}
最佳实践与注意事项
- 工作区设计:建议按环境(开发/测试/生产)分离Log Analytics工作区,避免数据混杂
- 成本优化:通过设置合理的数据保留期(非生产环境可设为7-14天)和采样率降低存储成本
- 安全控制:启用日志数据加密,通过RBAC严格控制查询权限
- 合规审计:配置诊断日志导出至Blob存储,满足长期合规归档需求
完整配置示例可参考项目中的azure-monitoring目录,包含数据收集规则、事件中心集成等进阶场景实现。
延伸阅读:DEVELOPER.md中的"Observability"章节提供了更多开发视角的监控最佳实践。
通过本文介绍的配置方法,运营团队可快速构建标准化的Azure监控体系,实现从基础设施到应用层的全栈可观测。建议结合Azure Monitor的内置仪表盘与工作簿功能,进一步提升数据可视化与问题定位效率。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



