Partilhar via


Coletar e ler dados OpenTelemetry em Aplicativos de Contêiner do Azure

Usando um agente de dados OpenTelemetry com seu ambiente de Aplicativos de Contêiner do Azure, você pode optar por enviar dados de observabilidade em um formato OpenTelemetry da seguinte forma:

  • Canalização de dados de um agente para um destino pretendido. As opções de destino incluem Azure Monitor Application Insights, Datadog e qualquer ponto de extremidade compatível com o Protocolo OpenTelemetry (OTLP).

  • Alterar facilmente os pontos de extremidade de destino sem ter que reconfigurar como eles emitem dados e sem ter que executar manualmente um agente OpenTelemetry .

Este artigo mostra como configurar um agente OpenTelemetry para seu aplicativo de contêiner.

Configurar um agente OpenTelemetry

Os agentes OpenTelemetry vivem em seu ambiente de aplicativo de contêiner. Você define as configurações do agente por meio de um modelo ARM ou chamadas Bicep para o ambiente, ou através da CLI ou através do Terraform (através do provedor AzAPI).

Cada tipo de ponto de extremidade (Azure Monitor Application Insights, DataDog e OTLP) tem requisitos de configuração específicos.

Pré-requisitos

Habilitar o agente OpenTelemetry gerenciado para seu ambiente não significa automaticamente que o agente coleta dados. Os agentes apenas enviam dados com base nas suas definições de configuração e instrumentam o seu código corretamente.

Configurar código-fonte

Prepare seu aplicativo para coletar dados instalando o SDK do OpenTelemetry e siga as diretrizes do OpenTelemetry para instrumentar métricas, logs ou rastreamentos.

Inicializar pontos de extremidade

Antes de enviar dados para um destino de coleta, primeiro você precisa criar uma instância do serviço de destino. Por exemplo, se você quiser enviar dados para o Azure Monitor Application Insights, precisará criar uma instância do Application Insights com antecedência.

O agente OpenTelemetry gerenciado aceita os seguintes destinos:

  • Azure Monitor Application Insights (Ferramenta de monitorização de aplicações)
  • Datadog
  • Qualquer ponto de extremidade OTLP (por exemplo: New Relic ou Honeycomb)

Nota

A Microsoft fornece suporte para dados enviados para o Azure Monitor Application Insights. Depois que os dados são armazenados em qualquer sistema que não seja da Microsoft, o suporte relacionado a dados é de responsabilidade da organização do ponto de extremidade.

A tabela a seguir mostra que tipo de dados você pode enviar para cada destino:

Destino Registos Métricas Rastreios
Azure App Insights Sim Não Sim
Datadog Sim Sim Sim
Ponto de extremidade configurado para o protocolo OpenTelemetry (OTLP) Sim Sim Sim

Azure Monitor Application Insights (Ferramenta de monitorização de aplicações)

O único detalhe de configuração exigido do Application Insights é a cadeia de conexão. Depois de ter a cadeia de conexão, você pode configurar o agente por meio do modelo ARM do seu aplicativo de contêiner, com comandos da CLI do Azure ou Terraform.

A cadeia de conexão contém uma chave de instrumentação, que é um identificador exclusivo usado para associar telemetria a um recurso específico do Application Insights. As chaves de instrumentação não são tokens de segurança ou chaves de segurança e não são consideradas segredos.

Se você quiser proteger seu recurso do Application Insights contra uso indevido, consulte Autenticação do Microsoft Entra para Application Insights. No entanto, o recurso do Application Insights deve permitir a autenticação local para receber dados do agente de dados OpenTelemetria.

Antes de implantar esse modelo, substitua o <PLACEHOLDERS> por seus valores.

{
  ...
  "properties": {
    "appInsightsConfiguration ": {
      "connectionString": "<APP_INSIGHTS_CONNECTION_STRING>"
    }
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration":{
        "destinations": ["appInsights"]
      },
      "logsConfiguration": {
        "destinations": ["appInsights"]
      }
    }
  }
}

Datadog

Você não precisará executar o agente Datadog em seu aplicativo de contêiner se habilitar o agente OpenTelemetry gerenciado para seu ambiente.

A configuração do agente OpenTelemetry requer um valor para site e key da instância do Datadog. Reúna esses valores de sua instância Datadog de acordo com esta tabela:

Propriedade de instância Datadog Propriedade de configuração do agente OpenTelemetry
DD_SITE site
DD_API_KEY key

Se você criou sua instância Datadog no portal do Azure, consulte Chaves de API para obter mais informações.

Depois de ter esses detalhes de configuração, você pode configurar o agente por meio do modelo ARM ou Bicep do aplicativo contêiner ou com comandos da CLI do Azure.

Evite especificar o valor de um segredo, como sua chave de API Datadog, diretamente em um ambiente de produção. Em vez disso, use uma referência a um segredo armazenado no Cofre de Chaves do Azure.

Você deve habilitar o cofre de chaves para a implantação do modelo. Para habilitar a implantação de modelo, crie o cofre de chaves com a propriedade habilitada enabledForTemplateDeployment ou execute o seguinte comando da CLI do Azure, substituindo o <KEY_VAULT_NAME> pelo seu valor:

az keyvault update --name <KEY_VAULT_NAME> --enabled-for-template-deployment true

Para obter mais informações, consulte:

Crie um arquivo de parâmetro para recuperar sua chave de API Datadog de um Cofre de Chaves do Azure.

Antes de implantar os seguintes arquivos, substitua o <PLACEHOLDERS> por seus valores.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "datadogapikey": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT_NAME>"
        },
        "secretName": "<KEY_VAULT_SECRET_NAME>"
      }
    }
  }
}

Agora você pode fazer referência ao datadogapikey parâmetro em seu modelo ARM.

{
  ...
  "parameters": {
    "datadogapikey": {
      "type": "securestring"
    }
  },
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "destinationsConfiguration":{
        ...
        "dataDogConfiguration":{
          "site": "<YOUR_DATADOG_SUBDOMAIN>.datadoghq.com",
          "key": "<YOUR_DATADOG_KEY>"
        }
      },
      "tracesConfiguration":{
        "destinations": ["dataDog"]
      },
      "metricsConfiguration": {
        "destinations": ["dataDog"]
      }
    }
  }
}

Para implantar o recurso, execute o seguinte comando da CLI do Azure, substituindo o <PLACEHOLDERS> pelos seus valores.

az deployment group create \
  --resource-group <RESOURCE_GROUP> \
  --template-file <ARM_TEMPLATE_FILE> \
  --parameters <PARAMETER_FILE>

Ponto de extremidade OTLP

Um ponto de extremidade do protocolo OpenTelemetry (OTLP) é um destino de dados de telemetria que consome dados de OpenTelemetry. Na configuração da tua aplicação, podes adicionar vários endpoints OTLP. O exemplo a seguir adiciona dois pontos de extremidade e envia os seguintes dados para esses pontos de extremidade.

Nome do ponto final Dados enviados para o endpoint
oltp1 Métricas e/ou rastreamentos
oltp2 Registos e/ou vestígios

Embora você possa configurar quantos pontos de extremidade configurados por OTLP desejar, cada ponto de extremidade deve ter um nome distinto.

{
  "properties": {
    "appInsightsConfiguration": {},
    "openTelemetryConfiguration": {
      "destinationsConfiguration":{
        "otlpConfigurations": [
          {
            "name": "otlp1",
            "endpoint": "ENDPOINT_URL_1",
            "insecure": false,
            "headers": "api-key-1=key"
          },
          {
            "name": "otlp2",
            "endpoint": "ENDPOINT_URL_2",
            "insecure": true
          }
        ]
      },
      "logsConfiguration": { 
        "destinations": ["otlp2"]
      },
      "tracesConfiguration":{
        "destinations": ["otlp1", "otlp2"]
      },
      "metricsConfiguration": {
        "destinations": ["otlp1"]
      }
    }
  }
}

Nome Descrição
resource-group o nome do grupo de recursos. Você pode configurar o grupo padrão usando az configure --defaults group=<NAME>.
name Nome do ambiente Container Apps.
otlp-name Um nome que você seleciona para identificar seu ponto de extremidade configurado para OTLP.
endpoint A URL do destino que recebe os dados coletados.
insecure Padrão verdadeiro. Define-se se a segurança de transporte do cliente deve ser ativada para a conexão gRPC do exportador. Se false, o headers parâmetro é necessário.
headers Valores separados por espaço, no formato 'key=value', que fornecem as informações necessárias para a segurança dos endpoints OTLP. Exemplo: "api-key=key other-config-value=value".

Configurar destinos de dados

Para configurar um agente, use a destinations matriz para definir quais agentes seu aplicativo envia dados. As chaves válidas são appInsights, dataDogou o nome do seu ponto de extremidade OTLP personalizado. Você pode controlar como um agente se comporta com base no tipo de dados e nas opções relacionadas ao endpoint.

Por tipo de dados

Opção Exemplo
Selecione um tipo de dados. Você pode configurar logs, métricas e/ou rastreamentos individualmente.
Habilite ou desative qualquer tipo de dados. Você pode optar por enviar apenas rastreamentos e nenhum outro dado.
Envie um tipo de dados para vários destinos finais. Você pode enviar logs tanto para o DataDog quanto para um endpoint configurado em OTLP.
Envie diferentes tipos de dados para diferentes locais. Você pode enviar rastreamentos para um ponto de extremidade OTLP e métricas para o DataDog.
Desative o envio de todos os tipos de dados. Você pode optar por não enviar nenhum dado através do agente OpenTelemetria.

Por ponto final

  • Você só pode configurar um ponto de extremidade do Application Insights e do Datadog de cada vez.
  • Embora possa definir mais do que um endpoint configurado para OTLP, cada um deve ter um nome distinto.

O exemplo de modelo ARM a seguir mostra como usar um ponto de extremidade OTLP chamado customDashboard. Envia:

  • rastreios para informações sobre aplicações e customDashboard
  • logs para insights do aplicativo e customDashboard
  • métricas para DataDog e customDashboard
{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

Exportar sinais do OpenTelemetry dos componentes do sistema

Na versão 2024-08-02-previewda API OpenTelemetry , você pode configurar seu ambiente de aplicativo de contêiner para exportar sinais OpenTelemetry de componentes do sistema para seus destinos de dados.

Use a configuração a seguir para exportar rastreamentos Dapr e métricas KEDA.

Rastreamentos de Dapr

O modelo ARM de exemplo a seguir mostra como exportar rastreamentos Dapr para seus destinos de rastreamento.

{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ],
        "includeDapr": true
      }
    }
  }
}

Para saber mais sobre como usar o Dapr em aplicativos de contêiner, consulte Visão geral do Dapr.

Métricas KEDA

O modelo ARM de exemplo a seguir mostra como exportar métricas KEDA para seus destinos de métricas.

{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ],
        "includeKeda": true
      }
    }
  }
}

Para saber mais sobre o suporte a KEDA em aplicativos de contêiner, consulte Definir regras de dimensionamento.

Exemplo de configuração OpenTelemetry

O modelo de exemplo a seguir mostra como você pode configurar seu aplicativo de contêiner para coletar dados de telemetria usando o Azure Monitor Application Insights, Datadog e com um agente OTLP personalizado chamado customDashboard.

Este exemplo funciona com o arquivo de parâmetro usado para recuperar a chave da API Datadog de um Cofre de Chaves do Azure.

Antes de implantar esse modelo, substitua o <PLACEHOLDERS> por seus valores.

{
  "location": "eastus",
  "properties": {
    "appInsightsConfiguration": {
      "connectionString": "<APP_INSIGHTS_CONNECTION_STRING>"
    },
    "openTelemetryConfiguration": {
      "destinationsConfiguration": {
        "dataDogConfiguration": {
          "site": "datadoghq.com",
          "key": "parameters('datadogapikey')]"
        },
        "otlpConfigurations": [
          {
            "name": "customDashboard",
            "endpoint": "<OTLP_ENDPOINT_URL>",
            "insecure": true
          }
        ]
      },
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

Para obter mais informações, consulte Microsoft.App/managedEnvironments.

Resiliência dos dados

No caso de uma interrupção de mensagens para um ponto de extremidade, o agente OpenTelemetry usa o seguinte procedimento para dar suporte à resiliência de dados.

  • Buffer e tentativas em memória: o agente mantém os dados em memória e continua a tentar (com recuo) por até cinco minutos.
  • Eliminação de dados: Se a fila em buffer for preenchida ou se o ponto de extremidade permanecer inativo após as tentativas de reenvio, o agente irá descartar os lotes mais antigos para evitar esgotar a memória.

Variáveis de ambiente

O agente OpenTelemetry injeta automaticamente um conjunto de variáveis de ambiente em seu aplicativo em tempo de execução.

As duas primeiras variáveis de ambiente seguem a configuração padrão do exportador OpenTelemetry e são usadas em kits de desenvolvimento de software padrão OTLP. Se você definir explicitamente a variável de ambiente na especificação do aplicativo de contêiner, seu valor substituirá o valor injetado automaticamente.

Saiba mais sobre a configuração do exportador OTLP; consulte a Configuração do Exportador OTLP.

Nome Descrição
OTEL_EXPORTER_OTLP_ENDPOINT Um URL de ponto final base para qualquer tipo de sinal, com um número de porta especificado opcionalmente. Essa configuração é útil quando você está enviando mais de um sinal para o mesmo ponto de extremidade e deseja que uma variável de ambiente controle o ponto de extremidade. Exemplo: http://otel.service.k8se-apps:4317/
OTEL_EXPORTER_OTLP_PROTOCOL Especifica o protocolo de transporte OTLP usado para todos os dados de telemetria. O agente gerenciado suporta apenas grpc. Valor: grpc.

As outras três variáveis de ambiente são específicas dos Aplicativos de Contêiner do Azure e são sempre injetadas. Essas variáveis contêm URLs de endpoints do agente para cada tipo de dados específico (logs, métricas, traços).

Essas variáveis só são necessárias se estiveres a usar simultaneamente o agente OpenTelemetry gerido e outro agente OpenTelemetry. O uso dessas variáveis oferece controle sobre como rotear dados entre os diferentes agentes OpenTelemetria.

Nome Descrição Exemplo
CONTAINERAPP_OTEL_TRACING_GRPC_ENDPOINT URL de ponto final apenas para dados de rastreamento. http://otel.service.k8se-apps:43178/v1/traces/
CONTAINERAPP_OTEL_LOGGING_GRPC_ENDPOINT URL apenas para dados de log. http://otel.service.k8se-apps:43178/v1/logs/
CONTAINERAPP_OTEL_METRIC_GRPC_ENDPOINT URL do ponto final para apenas dados métricos. http://otel.service.k8se-apps:43178/v1/metrics/

Custos do agente OpenTelemetry

O agente OpenTelemetry gerido funciona sem custos de computação adicionais para si. A Microsoft fornece e gere a infraestrutura do agente dentro do seu ambiente Container Apps.

No entanto, é responsável pelas cobranças aplicadas pelos serviços de destino para onde envia os seus dados de telemetria. Consulte o serviço de destino para conhecer a estrutura e os termos de faturamento. Por exemplo, se você enviar dados para o Azure Monitor Application Insights e para o Datadog, será responsável pelas cobranças aplicadas por ambos os serviços.

Alocação de recursos para agentes

O agente OpenTelemetry gerido é provisionado com os seguintes recursos fixos:

  • CPU: 0,5 núcleos vCPU
  • Memória: 1,5 GB de RAM
  • Réplicas: Réplica única (não configurável)

Estes recursos são geridos pela Microsoft e não aparecem nas suas métricas de faturação ou consumo de recursos.

Limitações conhecidas

  • Os dados do sistema, como logs do sistema ou métricas padrão das Aplicações de Contentores, não estão disponíveis para serem enviados ao agente do OpenTelemetry.
  • O endpoint do Application Insights não aceita métricas.
  • As definições de configuração residem a nível do ambiente. Você pode enviar diferentes tipos de dados para destinos diferentes, mas não pode dividir seus dados por aplicativo. Por exemplo, no mesmo aplicativo você pode enviar métricas para o Datadog e rastreamentos para o App Insights.
  • O agente gerenciado suporta apenas o protocolo de transporte gRPC para dados de telemetria.
  • O agente OpenTelemetry gerido funciona como uma única réplica e não pode ser escalado ou configurado para alta disponibilidade.
  • O estado do agente e as métricas de saúde não estão atualmente expostos no portal Azure nem através de APIs de monitorização.
  • Os segredos (como chaves API) devem ser especificados diretamente em templates – a integração do Azure Key Vault para configuração de agentes não é atualmente suportada.

Perguntas frequentes

  • Preciso fazer referência ao SDK do OpenTelemetry no meu código?

    Sim. O SDK cria dados de telemetria e o agente gerenciado é responsável apenas por rotear dados.

  • Por que o list comando retorna null?

    Quando se executa az containerapp env telemetry otlp list, a resposta é null se o valor for um token confidencial que precisa de proteção.

  • Sou cobrado pelos recursos computacionais do agente OpenTelemetry?

    Não. A Microsoft fornece e gere a infraestrutura do agente sem custos adicionais de computação. Apenas é cobrado pelos serviços de destino que recebem os seus dados de telemetria.

  • Posso escalar o agente OpenTelemetry ou executar múltiplas réplicas?

    Não. O agente gerido atualmente funciona como uma única réplica com alocação de recursos fixos (0,5 CPU, 1,5GB de RAM). Configurações de alta disponibilidade não são atualmente suportadas.

  • Como posso monitorizar a saúde e o estado do agente OpenTelemetry?

    O estado do agente e as métricas de saúde não estão atualmente expostas. Esta funcionalidade está planeada para um lançamento futuro.

Próximos passos