Fim de uma Era: Log Analytics Agent da Azure Monitor foi Descontinuado em 31 de Agosto de 2024, e agora?
Para coletar custom logs de uma VM gerida pelo Azure, recomenda-se a utilização do Azure Monitor e do Azure Agent Monitor (AMA). O Agente do Azure Monitor é o sucessor do Agente de Análise de Log, que foi descontinuado em 31 de agosto de 2024. Atualmente, existem problemas associados ao fornecedor azurerm em relação ao Azure Monitor.
Abaixo encontram-se Links para algumas das capacidades abordadas neste post:
Problema
Atualmente, o método recomendado para coletar logs e armazená-los com o Azure Monitor baseia-se na seguinte configuração:
- Configurar Log Analytics Workspace
- Criar Log Analytics Workspace Table para armazenar logs
- Instalar os agentes corretos na VM
- Configurar uma regra de recolha de dados (DCR)
- Configurar Data Collection Endpoint
- Criar Data Collection Association entre a Regra de Coleta de Dados e a VM
De acordo com a documentação do Azure, aconselha-se a criação de uma tabela no Log Analytics Workspace para armazenar os registos personalizados. Anteriormente, os programadores podiam criar a tabela quando configuravam o Log Analytics Workspace.
resource "azurerm_resource_group" "example" {
name = "example-resources"
location = "West Europe"
}
resource "azurerm_log_analytics_workspace" "example" {
name = "acctest-01"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
sku = "PerGB2018"
retention_in_days = 30
}
resource "azurerm_log_analytics_workspace_table" "container_logs" {
name = "ContainerLog"
workspace_id = azurerm_log_analytics_workspace.example.id
plan = "Basic" # or "Analytics"
retention_in_days = 7 # per docs, setting to null defaults to workspace default
}
O recurso azurerm_log_analytics_workspace_table
foi descontinuado. Atualmente, não há forma de criar a tabela do espaço de trabalho de análise de registos utilizando o fornecedor azurerm.
A solução alternativa
Isto é feito utilizando a AzAPI para criar Log Analytics Workspace Table. O esquema da tabela deve corresponder ao formato dos seus registos.
Para ativar a AzAPI, tem de a incluir na sua configuração do terraform da seguinte forma:
terraform {
required_providers {
azapi = {
source = "Azure/azapi"
version = "~> 1.8.0"
}
}
}
resource "azapi_resource" "data_collection_logs_table" {
name = "Example_CL"
parent_id = azurerm_log_analytics_workspace.example.id
type = "Microsoft.OperationalInsights/workspaces/tables@2022-10-01"
body = jsonencode(
{
"properties" : {
"schema" : {
"name" : "Example_CL",
"columns" : [
{
"name" : "TimeGenerated",
"type" : "datetime",
"description" : "The time at which the data was generated"
},
{
"name" : "Level",
"type" : "string",
"description" : "Log level"
},
{
"name" : "Logger",
"type" : "string",
"description" : "Logger name"
},
{
"name" : "Context",
"type" : "string",
"description" : "Context of the log line"
},
{
"name" : "Message",
"type" : "string",
"description" : "Log message"
},
{
"name" : "AdditionalContext",
"type" : "string",
"description" : "Additional context of the log line"
}
]
},
"retentionInDays" : 30,
"totalRetentionInDays" : 30
}
}
)
}
Este bloco HCL criará a tabela Log Analytics Workspace associado usando o esquema definido. Os detalhes das opções de esquema podem ser encontrados na documentação.
O próximo passo será configurar a Regra de Recolha de Dados (DCR)
resource "azurerm_monitor_data_collection_rule" "example" {
name = "dcr-example"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
data_collection_endpoint_id = azurerm_monitor_data_collection_endpoint.example.id
data_sources {
log_file {
name = "example-logfile"
format = "text"
streams = ["Custom-${azapi_resource.data_collection_logs_table.name}"]
file_patterns = ["/var/log/example/*.log"]
settings {
text {
record_start_timestamp_format = "ISO 8601"
}
}
}
}
destinations {
log_analytics {
name = local.log_analytics_destination
workspace_resource_id = azurerm_log_analytics_workspace.example.id
}
}
data_flow {
streams = ["Custom-${azapi_resource.data_collection_logs_table.name}"]
destinations = [local.log_analytics_destination]
output_stream = "Custom-${azapi_resource.data_collection_logs_table.name}"
}
stream_declaration {
stream_name = "Custom-${azapi_resource.data_collection_logs_table.name}"
column {
name = "TimeGenerated"
type = "datetime"
}
column {
name = "Level"
type = "string"
}
column {
name = "Logger"
type = "string"
}
column {
name = "Context"
type = "string"
}
column {
name = "Message"
type = "string"
}
column {
name = "AdditionalContext"
type = "string"
}
}
}
Este bloco HCL configurará a Regra de Coleta de Dados. A declaração de fluxo DCR deve espelhar o esquema usado no bloco de recursos AzAPI usado para criar Log Analytics Workspace Table. Os recursos finais que sua configuração deve ter são:
- Log Analytics Workspace
- Data Collection Endpoint
- Azure Monitor Agent Extension
- Data Collection Rule Association
resource "azurerm_log_analytics_workspace" "example" {
name = "example"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
sku = "PerGB2018"
retention_in_days = 30
}
resource "azurerm_monitor_data_collection_endpoint" "example" {
name = "mdce"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
kind = "Linux"
}
resource "azurerm_virtual_machine_extension" "ama" {
name = "AzureMonitorLinuxAgent"
virtual_machine_id = azurerm_virtual_machine.example.id
publisher = "Microsoft.Azure.Monitor"
type = "AzureMonitorLinuxAgent"
type_handler_version = "1.0"
}
resource "azurerm_monitor_data_collection_rule_association" "dcr" {
name = "dcr"
target_resource_id = azurerm_virtual_machine.example.id
data_collection_rule_id = azurerm_monitor_data_collection_rule.example.id
}
Depois de aplicar a configuração do terraform, pode ver a tabela através do seu Log Analytics Workspace.