Delen via


OpenTelemetry-gegevens verzamelen en lezen in Azure Container Apps

Met behulp van een OpenTelemetry-gegevensagent met uw Azure Container Apps-omgeving kunt u ervoor kiezen om waarneembaarheidsgegevens te verzenden in een OpenTelemetry-indeling door:

  • Gegevens van een agent doorspitten naar een gewenst eindpunt. Doelopties zijn onder andere Azure Monitor Application Insights, Datadog en een met OpenTelemetry Protocol (OTLP) compatibel eindpunt.

  • U kunt eenvoudig doeleindpunten wijzigen zonder dat u opnieuw hoeft te configureren hoe ze gegevens verzenden en zonder dat u handmatig een OpenTelemetry-agent hoeft uit te voeren.

In dit artikel leest u hoe u een OpenTelemetry-agent instelt en configureert voor uw container-app.

Een OpenTelemetry-agent configureren

OpenTelemetry-agents bevinden zich in uw container-app-omgeving. U configureert agentinstellingen via een ARM-sjabloon of Bicep-aanroepen naar de omgeving, of via de CLI of via Terraform (via de AzAPI-provider).

Elk eindpunttype (Azure Monitor Application Insights, DataDog en OTLP) heeft specifieke configuratievereisten.

Vereisten

Als u de beheerde OpenTelemetry-agent inschakelt voor uw omgeving, betekent dit niet automatisch dat de agent gegevens verzamelt. Agents verzenden alleen gegevens op basis van uw configuratie-instellingen en instrumenteren uw code correct.

Broncode configureren

Bereid uw toepassing voor om gegevens te verzamelen door de OpenTelemetry SDK te installeren en de OpenTelemetry-richtlijnen te volgen voor het instrumenteren van metrische gegevens, logboeken of traceringen.

Eindpunten initialiseren

Voordat u gegevens naar een verzamelingsbestemming kunt verzenden, moet u eerst een exemplaar van de doelservice maken. Als u bijvoorbeeld gegevens wilt verzenden naar Azure Monitor Application Insights, moet u van tevoren een Application Insights-exemplaar maken.

De beheerde OpenTelemetry-agent accepteert de volgende bestemmingen:

  • Azure Monitor Application Insights, een hulpprogramma voor applicatiebewaking
  • Datadog
  • Elk OTLP-eindpunt (bijvoorbeeld: New Relic of Honeycomb)

Notitie

Microsoft biedt ondersteuning voor gegevens die naar Azure Monitor Application Insights worden verzonden. Zodra gegevens zijn opgeslagen in een niet-Microsoft-systeem, is gegevensgerelateerde ondersteuning de verantwoordelijkheid van de organisatie van het eindpunt.

In de volgende tabel ziet u welk type gegevens u naar elke bestemming kunt verzenden:

Bestemming Logboeken Metrische gegevens Traceringen
inzichten Azure-app Ja Nee. Ja
Datadog Ja Ja Ja
Geconfigureerd eindpunt van OpenTelemetry Protocol (OTLP) Ja Ja Ja

Azure Monitor Application Insights, een hulpprogramma voor applicatiebewaking

De enige configuratiedetails die zijn vereist vanuit Application Insights, zijn de verbindingsreeks. Zodra u de verbindingsreeks hebt, kunt u de agent configureren via de ARM-sjabloon van uw container-app, met Azure CLI-opdrachten of Terraform.

De verbindingsreeks bevat een instrumentatiesleutel, een unieke id die wordt gebruikt om telemetrie te koppelen aan een specifieke Application Insights-resource. Instrumentatiesleutels zijn geen beveiligingstokens of beveiligingssleutels en worden niet beschouwd als geheimen.

Als u uw Application Insights-resource wilt beveiligen tegen misbruik, raadpleegt u Microsoft Entra-verificatie voor Application Insights. De Application Insights-resource moet echter lokale verificatie toestaan om gegevens te ontvangen van de OpenTelemetry-gegevensagent.

Voordat u deze sjabloon implementeert, vervangt u de <PLACEHOLDERS> waarden door uw waarden.

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

Datadog

U hoeft de Datadog-agent niet uit te voeren in uw container-app als u de beheerde OpenTelemetry-agent inschakelt voor uw omgeving.

De configuratie van de OpenTelemetry-agent vereist een waarde voor site en key van uw Datadog-exemplaar. Verzamel deze waarden van uw Datadog-exemplaar volgens deze tabel:

Eigenschap Datadog-instantie Configuratie-eigenschap OpenTelemetry-agent
DD_SITE site
DD_API_KEY key

Als u uw Datadog-exemplaar hebt gemaakt in Azure Portal, raadpleegt u API-sleutels voor meer informatie.

Zodra u deze configuratiegegevens hebt, kunt u de agent configureren via de ARM- of Bicep-sjabloon van uw container-app of met Azure CLI-opdrachten.

Vermijd het opgeven van de waarde van een geheim, zoals uw Datadog-API-sleutel, rechtstreeks in een productieomgeving. Gebruik in plaats daarvan een verwijzing naar een geheim dat is opgeslagen in Azure Key Vault.

U moet de sleutelkluis inschakelen voor sjabloonimplementatie. Als u sjabloonimplementatie wilt inschakelen, maakt u de sleutelkluis met de enabledForTemplateDeployment eigenschap ingeschakeld of voert u de volgende Azure CLI-opdracht uit, waarbij u de waarde vervangt door uw <KEY_VAULT_NAME> waarde:

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

Zie voor meer informatie:

Maak een parameterbestand om uw Datadog-API-sleutel op te halen uit een Azure Key Vault.

Voordat u de volgende bestanden implementeert, vervangt u de <PLACEHOLDERS> door uw waarden.

{
  "$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>"
      }
    }
  }
}

U kunt nu verwijzen naar de datadogapikey parameter in uw ARM-sjabloon.

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

Voer de volgende Azure CLI-opdracht uit om de resource te implementeren, waarbij u de <PLACEHOLDERS> waarden vervangt.

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

OTLP-eindpunt

Een OTLP-eindpunt (OpenTelemetry Protocol) is een doel voor telemetriegegevens dat OpenTelemetry-gegevens verbruikt. In de toepassingsconfiguratie kunt u meerdere OTLP-eindpunten toevoegen. In het volgende voorbeeld worden twee eindpunten toegevoegd en worden de volgende gegevens naar deze eindpunten verzonden.

Naam Eeindpunt Gegevens die naar het eindpunt worden verzonden
oltp1 Metrische gegevens en/of traceringen
oltp2 Logboeken en/of traceringen

Hoewel u zoveel OTLP-geconfigureerde eindpunten kunt instellen als u wilt, moet elk eindpunt een afzonderlijke naam hebben.

{
  "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"]
      }
    }
  }
}

Naam Beschrijving
resource-group De naam van de resourcegroep. U kunt de standaardgroep configureren met behulp van az configure --defaults group=<NAME>.
name Naam van de Container Apps-omgeving.
otlp-name Een naam die u selecteert om uw door OTLP geconfigureerde eindpunt te identificeren.
endpoint De URL van de bestemming die verzamelde gegevens ontvangt.
insecure Standaard waar. Hiermee definieert u of clienttransportbeveiliging moet worden ingeschakeld voor de gRPC-verbinding van de exporteur. Als dit onwaar is, is de headers parameter vereist.
headers Door spaties gescheiden waarden, in de indeling 'key=value', die vereiste informatie biedt voor de beveiliging van de OTLP-eindpunten. Voorbeeld: "api-key=key other-config-value=value".

Gegevensbestemmingen configureren

Als u een agent wilt configureren, gebruikt u de destinations matrix om te definiëren welke agents uw toepassing gegevens verzendt. Geldige sleutels zijn appInsights, dataDogof de naam van uw aangepaste OTLP-eindpunt. U kunt bepalen hoe een agent zich gedraagt op basis van gegevenstype en opties voor eindpunten.

Op gegevenstype

Optie Opmerking
Selecteer een gegevenstype. U kunt logboeken, metrische gegevens en/of traceringen afzonderlijk configureren.
Schakel een gegevenstype in of uit. U kunt ervoor kiezen om alleen traceringen en geen andere gegevens te verzenden.
Eén gegevenstype verzenden naar meerdere eindpunten. U kunt logboeken verzenden naar zowel DataDog als een door OTLP geconfigureerd eindpunt.
Verschillende gegevenstypen verzenden naar verschillende locaties. U kunt traceringen verzenden naar een OTLP-eindpunt en metrische gegevens naar DataDog.
Schakel het verzenden van alle gegevenstypen uit. U kunt ervoor kiezen geen gegevens te verzenden via de OpenTelemetry-agent.

Op eindpunt

  • U kunt slechts één Application Insights- en Datadog-eindpunt per keer instellen.
  • Hoewel u meerdere OTLP-geconfigureerde eindpunten kunt definiëren, moet elk eindpunt een afzonderlijke naam hebben.

In het volgende voorbeeld van een ARM-sjabloon ziet u hoe u een OTLP-eindpunt met de naam customDashboardKUNT gebruiken. Er wordt het volgende verzonden:

  • traceringen naar app-inzichten en customDashboard
  • logboeken voor app-inzichten en customDashboard
  • metrische gegevens voor DataDog en customDashboard
{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

OpenTelemetry-signalen exporteren van systeemonderdelen

Vanuit de openTelemetry-API-versie 2024-08-02-previewkunt u uw container-app-omgeving configureren om systeemonderdelen OpenTelemetry-signalen naar uw gegevensbestemmingen te exporteren.

Gebruik de volgende configuratie om Dapr-traceringen en KEDA-metrische gegevens te exporteren.

Dapr-traceringen

In de volgende ARM-sjabloon wordt getoond hoe Dapr-traceringen geëxporteerd kunnen worden naar uw traceringenbestemmingen.

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

Zie Overzicht van Dapr voor meer informatie over het gebruik van Dapr in container-apps.

KEDA-metrische gegevens

In het volgende voorbeeld van een ARM-sjabloon ziet u hoe u KEDA-metrische gegevens exporteert naar uw metrische doelen.

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

Zie Schaalregels instellen voor meer informatie over KEDA-ondersteuning in Container Apps.

Voorbeeld van configuratie van OpenTelemetry

In de volgende voorbeeldsjabloon ziet u hoe u uw container-app kunt configureren voor het verzamelen van telemetriegegevens met behulp van Azure Monitor Application Insights, Datadog en met een aangepaste OTLP-agent met de naam customDashboard.

Dit voorbeeld werkt met het parameterbestand dat wordt gebruikt om de Datadog-API-sleutel op te halen uit een Azure Key Vault.

Voordat u deze sjabloon implementeert, vervangt u de <PLACEHOLDERS> waarden door uw waarden.

{
  "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"
        ]
      }
    }
  }
}

Zie Microsoft.App/managedEnvironments voor meer informatie.

Gegevenstolerantie

In het geval van onderbrekingen bij berichtdoorgifte naar een eindpunt, gebruikt de OpenTelemetry-agent de volgende procedure om de gegevensrobuustheid te waarborgen.

  • In-memory buffering en nieuwe pogingen: de agent houdt gegevens in het geheugen en blijft gedurende maximaal vijf minuten opnieuw proberen (met terugval).
  • Gegevens verwijderen: Als de gebufferde wachtrij vol raakt of het eindpunt nog steeds uitvalt na nieuwe pogingen, worden de oudste batches verwijderd om te voorkomen dat er onvoldoende geheugen beschikbaar is.

Omgevingsvariabelen

De OpenTelemetry-agent injecteert automatisch een set omgevingsvariabelen in uw toepassing tijdens runtime.

De eerste twee omgevingsvariabelen volgen de standaard configuratie van de OpenTelemetry-exporteur en worden gebruikt in OTLP-standaardsoftwareontwikkelingskits. Als u de omgevingsvariabele expliciet instelt in de specificatie van de container-app, overschrijft uw waarde de automatisch geïnjecteerde waarde.

Meer informatie over de configuratie van de OTLP-exporteur raadpleegt u otLP-exporteurconfiguratie.

Naam Beschrijving
OTEL_EXPORTER_OTLP_ENDPOINT Een basiseindpunt-URL voor elk signaaltype, met een optioneel opgegeven poortnummer. Deze instelling is handig wanneer u meer dan één signaal naar hetzelfde eindpunt verzendt en één omgevingsvariabele het eindpunt wilt beheren. Voorbeeld: http://otel.service.k8se-apps:4317/
OTEL_EXPORTER_OTLP_PROTOCOL Hiermee geeft u het OTLP-transportprotocol dat wordt gebruikt voor alle telemetriegegevens. De beheerde agent ondersteunt grpcalleen . Waarde: grpc.

De andere drie omgevingsvariabelen zijn specifiek voor Azure Container Apps en worden altijd geïnjecteerd. Deze variabelen bevatten de eindpunt-URL's van de agent voor elk specifiek gegevenstype (logboeken, metrische gegevens, traceringen).

Deze variabelen zijn alleen nodig als u zowel de beheerde OpenTelemetry-agent als een andere OpenTelemetry-agent gebruikt. Als u deze variabelen gebruikt, hebt u controle over het routeren van gegevens tussen de verschillende OpenTelemetry-agents.

Naam Beschrijving Opmerking
CONTAINERAPP_OTEL_TRACING_GRPC_ENDPOINT Eindpunt-URL voor alleen traceringsgegevens. http://otel.service.k8se-apps:43178/v1/traces/
CONTAINERAPP_OTEL_LOGGING_GRPC_ENDPOINT Eindpunt-URL voor alleen logboekgegevens. http://otel.service.k8se-apps:43178/v1/logs/
CONTAINERAPP_OTEL_METRIC_GRPC_ENDPOINT Eindpunt-URL voor alleen metrische gegevens. http://otel.service.k8se-apps:43178/v1/metrics/

Kosten van OpenTelemetry-agent

De beheerde OpenTelemetry-agent wordt zonder extra rekenkosten voor u uitgevoerd. Microsoft richt de agentinfrastructuur in en beheert deze in uw Container Apps-omgeving.

U bent echter verantwoordelijk voor kosten die worden toegepast door de doelservices waar u uw telemetriegegevens verzendt. Zie de doelservice voor hun factureringsstructuur en voorwaarden. Als u bijvoorbeeld gegevens verzendt naar Zowel Azure Monitor Application Insights als Datadog, bent u verantwoordelijk voor de kosten die door beide services worden toegepast.

Resourcetoewijzing van agent

De beheerde OpenTelemetry-agent wordt ingericht met de volgende vaste resources:

  • CPU: 0,5 vCPU-kernen
  • Geheugen: 1,5 GB RAM
  • Replica's: enkele replica (niet configureerbaar)

Deze resources worden beheerd door Microsoft en worden niet weergegeven in de metrische gegevens voor facturering of resourceverbruik.

Bekende beperkingen

  • Systeemgegevens, zoals systeemlogboeken of metrische standaardgegevens van Container Apps, kunnen niet worden verzonden naar de OpenTelemetry-agent.
  • Het Application Insights-eindpunt accepteert geen metrische gegevens.
  • Configuratie-instellingen bevinden zich op het omgevingsniveau. U kunt verschillende gegevenstypen naar verschillende bestemmingen verzenden, maar u kunt uw gegevens niet opsplitsen per app. In dezelfde app kunt u bijvoorbeeld metrische gegevens verzenden naar Datadog en traceringen naar App Insights.
  • De beheerde agent ondersteunt alleen het gRPC-transportprotocol voor telemetriegegevens.
  • De beheerde OpenTelemetry-agent wordt uitgevoerd als één replica en kan niet worden geschaald of geconfigureerd voor hoge beschikbaarheid.
  • Metingen over agentstatus en gezondheidsstatistieken worden momenteel niet weergegeven in de Azure portal of via bewakings-API's.
  • Geheimen (zoals API-sleutels) moeten rechtstreeks worden opgegeven in sjablonen. Azure Key Vault-integratie voor agentconfiguratie wordt momenteel niet ondersteund.

Veelgestelde vragen

  • Moet ik in mijn code verwijzen naar de OpenTelemetry SDK?

    Ja. De SDK maakt telemetriegegevens en de beheerde agent is alleen verantwoordelijk voor het routeren van gegevens.

  • Waarom retourneert de list opdracht null?

    Wanneer u uitvoert az containerapp env telemetry otlp list, is null het antwoord wanneer de waarde een gevoelig token is dat beveiliging nodig heeft.

  • Worden er kosten in rekening gebracht voor de rekenresources van de OpenTelemetry-agent?

    Nee. Microsoft richt de agentinfrastructuur in en beheert deze zonder extra rekenkosten. Er worden alleen kosten in rekening gebracht voor doelservices die uw telemetriegegevens ontvangen.

  • Kan ik de OpenTelemetry-agent schalen of meerdere replica's uitvoeren?

    Nee. De beheerde agent wordt momenteel uitgevoerd als één replica met vaste resourcetoewijzing (0,5 CPU, 1,5 GB RAM). Configuraties voor hoge beschikbaarheid worden momenteel niet ondersteund.

  • Hoe kan ik de conditie en status van de OpenTelemetry-agent controleren?

    Agentstatus en gezondheidsstatistieken worden momenteel niet blootgesteld. Deze mogelijkheid is gepland voor een toekomstige release.

Volgende stappen