Shromažďování a čtení dat OpenTelemetry v Azure Container Apps

Pomocí datového agenta OpenTelemetry s prostředím Azure Container Apps se můžete rozhodnout odesílat data pozorovatelnosti ve formátu OpenTelemetry:

  • Předávání dat od agenta do určeného koncového bodu Mezi cílové možnosti patří Azure Monitor Application Insights, Datadog a jakýkoli koncový bod kompatibilní s protokolem OpenTelemetry (OTLP).

  • Snadné změny cílových koncových bodů bez nutnosti překonfigurovat způsob generování dat a bez nutnosti ručního spuštění agenta OpenTelemetry.

V tomto článku se dozvíte, jak nastavit a nakonfigurovat agenta OpenTelemetry pro vaši aplikaci kontejneru.

Konfigurace agenta OpenTelemetry

Agenti OpenTelemetry žijí v prostředí vaší aplikace kontejneru. Nastavení agenta nakonfigurujete prostřednictvím šablony ARM nebo volání Bicep do prostředí, nebo prostřednictvím rozhraní příkazového řádku nebo prostřednictvím Terraformu (prostřednictvím poskytovatele AzAPI).

Každý typ koncového bodu (Azure Monitor Application Insights, Datadog a OTLP) má specifické požadavky na konfiguraci.

Požadavky

Povolení spravovaného agenta OpenTelemetry pro vaše prostředí neznamená, že agent shromažďuje data. Agenti odesílají data pouze na základě vašich nastavení konfigurace a správného instrumentování vašeho kódu.

Konfigurace zdrojového kódu

Připravte svoji aplikaci na shromažďování dat instalací sady OpenTelemetry SDK a postupujte podle pokynů OpenTelemetry pro instrumentaci metrik, logů nebo sledování.

Inicializace koncových bodů

Než budete moct odesílat data do cíle kolekce, musíte nejprve vytvořit instanci cílové služby. Pokud například chcete odesílat data do služby Azure Monitor Application Insights, musíte předem vytvořit instanci Application Insights.

Spravovaný agent OpenTelemetry přijímá následující destinace:

  • Azure Monitor - informace o aplikaci Insights
  • Datadog
  • Libovolný koncový bod OTLP (například: New Relic nebo Honeycomb)

Poznámka:

Microsoft poskytuje podporu pro data odesílaná do služby Azure Monitor Application Insights. Jakmile jsou data uložená v jakémkoli systému, který není microsoftem, zodpovídá za podporu související s daty organizace koncového bodu.

Následující tabulka ukazuje, jaký typ dat můžete odeslat do každého cíle:

Cíl Protokoly Metriky Trasování
Azure Monitor Application Insights Ano Ne Ano
Datadog Ano Ano Ano
Dynatrace Ano Ano Ano
New Relic Ano Ano Ano
Elastický Ano Ano Ano
Koncový bod kompatibilní s protokolem OpenTelemetry (OTLP) Ano Ano Ano

Průvodci cíli exportu

Použijte následující příručky s podrobnostmi o nastavení a ověření pro daný cíl.

Cíl Guide
Datadog Export dat OpenTelemetry do Datadog ve službě Azure Container Apps
Dynatrace Export dat OpenTelemetry do služby Dynatrace v Azure Container Apps
New Relic Export dat OpenTelemetry do služby New Relic v Azure Container Apps
Elastic Export dat OpenTelemetry do služby Elastic v Azure Container Apps
Azure Monitor - informace o aplikaci Insights Azure Monitor Application Insights
Další koncové body kompatibilní s OTLP Koncový bod OTLP

Azure Monitor - informace o aplikaci Insights

Jedinými podrobnostmi konfigurace, které application Insights vyžaduje, je připojovací řetězec. Jakmile budete mít připojovací řetězec, můžete agenta nakonfigurovat prostřednictvím šablony ARM vaší aplikace kontejneru pomocí příkazů Azure CLI nebo Terraformu.

Připojovací řetězec obsahuje instrumentační klíč, což je jedinečný identifikátor sloužící k přidružení telemetrie ke konkrétnímu prostředku Application Insights. Klíče instrumentace nejsou tokeny zabezpečení ani klíče zabezpečení a nejsou považovány za tajné kódy.

Pokud chcete chránit prostředek Application Insights před zneužitím, přečtěte si téma Ověřování Microsoft Entra pro Application Insights. Prostředek Application Insights však musí povolit místnímu ověřování přijímat data z datového agenta OpenTelemetry.

Než nasadíte tuto šablonu, nahraďte <PLACEHOLDERS> svými hodnotami.

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

Datadog

Pokud pro své prostředí povolíte spravovaného agenta OpenTelemetry, nemusíte v aplikaci kontejneru spouštět agenta Datadog.

Podrobný postup najdete v tématu Export telemetrických dat z agenta OpenTelemetry spravovaného službou Azure Container Apps do Datadogu.

Konfigurace agenta OpenTelemetry vyžaduje hodnotu site a key z vaší instance Datadog. Shromážděte tyto hodnoty z instance datadogu podle této tabulky:

Vlastnost instance Datadog Vlastnost konfigurace agenta OpenTelemetry
DD_SITE site
DD_API_KEY key

Pokud jste instanci služby Datadog vytvořili na webu Azure Portal, další informace najdete v tématu Klíče rozhraní API .

Jakmile budete mít tyto podrobnosti o konfiguraci, můžete agenta nakonfigurovat prostřednictvím šablony ARM nebo Bicep vaší aplikace kontejneru nebo pomocí příkazů Azure CLI.

Vyhněte se zadávání hodnoty tajného kódu, například klíče rozhraní API služby Datadog, přímo v produkčním prostředí. Místo toho použijte odkaz na tajný klíč uložený ve službě Azure Key Vault.

Pro nasazení šablony musíte povolit trezor klíčů. Pokud chcete povolit nasazení šablony, vytvořte trezor klíčů s povolenou enabledForTemplateDeployment vlastností nebo spusťte následující příkaz Azure CLI a nahraďte <KEY_VAULT_NAME> hodnotu vaší hodnotou:

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

Další informace naleznete v tématu:

Vytvořte soubor parametrů pro načtení klíče rozhraní API služby Datadog ze služby Azure Key Vault.

Než nasadíte následující soubory, nahraďte <PLACEHOLDERS> svými hodnotami.

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

Teď můžete odkazovat na datadogapikey parametr v šabloně 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"]
      }
    }
  }
}

Pro nasazení prostředku spusťte následující příkaz Azure CLI a nahraďte <PLACEHOLDERS> svými hodnotami.

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

Koncový bod OTLP

Koncový bod protokolu OpenTelemetry (OTLP) je cíl telemetrických dat, který využívá data OpenTelemetry. V konfiguraci aplikace můžete přidat několik koncových bodů OTLP. Následující příklad přidá dva koncové body a do těchto koncových bodů odešle následující data.

Název koncového bodu Data odesílaná do koncového bodu
oltp1 Metriky a/nebo trasování
oltp2 Protokoly a/nebo sledování

I když můžete nastavit libovolný počet koncových bodů nakonfigurovaných OTLP, každý koncový bod musí mít jedinečný název.

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

Název Popis
resource-group Název skupiny prostředků. Výchozí skupinu můžete nakonfigurovat pomocí az configure --defaults group=<NAME>.
name Název prostředí Container Apps.
otlp-name Název, který vyberete k identifikaci koncového bodu nakonfigurovaného pro OTLP.
endpoint Adresa URL cíle, který přijímá shromážděná data.
insecure Výchozí hodnota true. Definuje, zda má být povoleno zabezpečení přenosu pro klienta u gRPC připojení vývozce. Pokud je hodnota false, headers je parametr povinný.
headers Hodnoty oddělené mezerami ve formátu key=value, které poskytují požadované informace pro zabezpečení koncových bodů OTLP. Příklad: "api-key=key other-config-value=value".

Konfigurace cílů dat

Ke konfiguraci agenta použijte destinations pole k definování agentů, které aplikace odesílá data. Platné klíče jsou buď appInsights, dataDognebo název vlastního koncového bodu OTLP. Můžete řídit chování agenta na základě datových typů a možností souvisejících s koncovým bodem.

Podle datového typu

Možnost Příklad
Vyberte datový typ. Protokoly, metriky a/nebo trasování můžete nakonfigurovat jednotlivě.
Povolte nebo zakažte libovolný datový typ. Můžete se rozhodnout odesílat pouze trasování a žádná jiná data.
Odešlete jeden datový typ do více koncových bodů. Logy můžete odesílat současně do Datadogu i do koncového bodu nakonfigurovaného pro OTLP.
Odesílání různých datových typů do různých umístění Trasování můžete odeslat do koncového bodu OTLP a metrik do služby Datadog.
Zakažte odesílání všech datových typů. Prostřednictvím agenta OpenTelemetry se můžete rozhodnout, že se žádná data neodesílají.

Podle koncového bodu

  • Vždy můžete nastavit jenom jeden koncový bod Application Insights a Datadog.
  • I když můžete definovat více než jeden koncový bod nakonfigurovaný OTLP, každý z nich musí mít jedinečný název.

Následující příklad šablony ARM ukazuje, jak použít koncový bod OTLP s názvem customDashboard. Odesílá:

  • trasování do aplikace Insights a customDashboard
  • protokoly do aplikace Insights a customDashboard
  • metriky pro Datadog a customDashboard
{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

Export systémových komponent – signály OpenTelemetry

Z verze 2024-08-02-preview rozhraní API OpenTelemetry můžete nakonfigurovat prostředí aplikace kontejneru tak, aby systémové komponenty exportovaly signály OpenTelemetry do cílů dat.

K exportu trasování Dapr a metrik KEDA použijte následující konfiguraci.

Trasování Dapr

Následující příklad šablony ARM ukazuje, jak exportovat trasování Dapr do vámi určených cílových míst.

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

Další informace o tom, jak používat Dapr v kontejnerových aplikacích, najdete v tématu Přehled dapr.

Metriky KEDA

Následující příklad šablony ARM ukazuje, jak exportovat metriky KEDA do cílů metrik.

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

Další informace o podpoře KEDA v Container Apps najdete v tématu Nastavení pravidel škálování.

Příklad konfigurace OpenTelemetry

Následující příklad šablony ukazuje, jak můžete aplikaci kontejneru nakonfigurovat tak, aby shromažďovala telemetrická data pomocí služby Azure Monitor Application Insights, Datadog a s vlastním agentem OTLP s názvem customDashboard.

Tento příklad funguje se souborem parametrů použitým k načtení klíče rozhraní API Datadog ze služby Azure Key Vault.

Než nasadíte tuto šablonu, nahraďte <PLACEHOLDERS> svými hodnotami.

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

Další informace najdete v tématu Microsoft.App/managedEnvironments.

Odolnost dat

V případě přerušení přenosu zpráv do koncového bodu používá agent OpenTelemetry následující postup pro podporu odolnosti dat:

  • Ukládání do vyrovnávací paměti a opakování: Agent uchovává data v paměti a zkouší opětovně (s exponenciálním stahováním) až do pěti minut.
  • Zahazování dat: Pokud se bufferovaná fronta zaplní nebo koncový bod je po opakovaných pokusech stále mimo provoz, agent zahodí nejstarší dávky, aby se zabránilo nedostatku paměti.

Proměnné prostředí

Agent OpenTelemetry automaticky vloží sadu proměnných prostředí do vaší aplikace za běhu.

První tři proměnné prostředí se řídí standardní konfigurací OpenTelemetry a používají se ve standardních sadách OTLP pro vývoj softwaru. Pokud explicitně nastavíte proměnnou prostředí ve specifikaci aplikace kontejneru, vaše hodnota přepíše automaticky vloženou hodnotu.

Další informace o konfiguraci vývozce OTLP najdete v tématu Konfigurace vývozce OTLP.

Název Popis
OTEL_EXPORTER_OTLP_ENDPOINT Adresa URL základního koncového bodu pro libovolný typ signálu s volitelně zadaným číslem portu. Toto nastavení je užitečné, když odesíláte více než jeden signál do stejného koncového bodu a chcete, aby koncový bod řídila jedna proměnná prostředí. Příklad: http://otel.service.k8se-apps:4317/
OTEL_EXPORTER_OTLP_PROTOCOL Určuje přenosový protokol OTLP používaný pro všechna telemetrická data. Spravovaný agent podporuje pouze grpc. Hodnota: grpc.
OTEL_RESOURCE_ATTRIBUTES Čárkami oddělený seznam párů klíč-hodnota, které definují atributy prostředků připojené ke všem telemetrickým datům . Spravovaný agent naplní tuto proměnnou atributy aplikace kontejneru, jako je název aplikace a prostředí. Některé implementace OpenTelemetry SDK vyžadují, abyste explicitně povolili detekci prostředků založenou na prostředí, aby bylo možné používat tyto atributy. Pokud tuto proměnnou nastavíte ve specifikaci aplikace kontejneru, vaše hodnota přepíše automaticky vloženou hodnotu.

Další tři proměnné prostředí jsou specifické pro Azure Container Apps a vždy jsou injektovány. Tyto proměnné obsahují adresy URL koncových bodů agenta pro každý konkrétní datový typ (protokoly, metriky, trasování).

Tyto proměnné jsou nezbytné pouze v případě, že používáte spravovaného agenta OpenTelemetry i jiného agenta OpenTelemetry. Pomocí těchto proměnných můžete řídit, jak směrovat data mezi různými agenty OpenTelemetry.

Název Popis Příklad
CONTAINERAPP_OTEL_TRACING_GRPC_ENDPOINT Adresa URL koncového bodu pouze pro data sledování http://otel.service.k8se-apps:43178/v1/traces/
CONTAINERAPP_OTEL_LOGGING_GRPC_ENDPOINT URL koncového bodu pouze pro logy. http://otel.service.k8se-apps:43178/v1/logs/
CONTAINERAPP_OTEL_METRIC_GRPC_ENDPOINT Adresa URL koncového bodu pouze pro metrická data. http://otel.service.k8se-apps:43178/v1/metrics/

Náklady na agenta OpenTelemetry

Spravovaný agent OpenTelemetry běží bez dalších nákladů na výpočetní prostředky. Microsoft zřídí a spravuje infrastrukturu agentů v rámci vašeho prostředí Container Apps.

Zodpovídáte ale za poplatky použité cílovými službami, ve kterých odesíláte telemetrická data. Podívejte se na cílovou službu ohledně její fakturační struktury a podmínek. Pokud například odesíláte data do služby Azure Monitor Application Insights i Datadog, zodpovídáte za poplatky použité oběma službami.

Přidělení prostředků agenta

Spravovaný agent OpenTelemetry je zřízený s následujícími pevnými prostředky:

  • CPU: 0,5 virtuální procesorová jádra
  • Paměť: 1,5 GB PAMĚTI RAM
  • Repliky: Jedna replika (není konfigurovatelná)

Tyto prostředky spravuje Microsoft a nezobrazují se v metrikách fakturace ani spotřeby prostředků.

Známá omezení

  • Systémová data, jako jsou systémové protokoly nebo standardní metriky Container Apps, nejsou dostupná k odeslání agentovi OpenTelemetry.
  • Koncový bod Application Insights nepřijímá metriky.
  • Nastavení konfigurace je aktivní na úrovni prostředí. Do různých cílů můžete posílat různé datové typy, ale nemůžete je rozdělit podle aplikace. Například ve stejné aplikaci můžete odesílat metriky do služby Datadog a trasování do App Insights.
  • Spravovaný agent podporuje pouze přenosový protokol gRPC pro telemetrická data.
  • Spravovaný agent OpenTelemetry běží jako jedna replika a nedá se škálovat ani konfigurovat pro zajištění vysoké dostupnosti.
  • Metriky stavu a zdraví agenta nejsou momentálně dostupné v portálu Azure ani prostřednictvím rozhraní API pro monitorování.
  • Tajné kódy (například klíče rozhraní API) je potřeba zadat přímo v šablonách – Integrace služby Azure Key Vault pro konfiguraci agenta se v současné době nepodporuje.

Nejčastější dotazy

  • Musím v kódu odkazovat na sadu OpenTelemetry SDK?

    Ano. Sada SDK vytváří telemetrická data a spravovaný agent zodpovídá pouze za směrování dat.

  • list Proč příkaz vrací hodnotu null?

    Při spuštění az containerapp env telemetry otlp list je null odpověď, když je hodnota citlivým tokenem, který potřebuje ochranu.

  • Účtují se mi poplatky za výpočetní prostředky agenta OpenTelemetry?

    Ne. Microsoft zřídí a spravuje infrastrukturu agentů bez dalších nákladů na výpočetní prostředky. Účtují se vám jenom cílové služby, které přijímají vaše telemetrická data.

  • Můžu škálovat agenta OpenTelemetry nebo spustit více replik?

    Ne. Spravovaný agent aktuálně běží jako jedna replika s pevným přidělením prostředků (0,5 CPU, 1,5 GB RAM). Konfigurace s vysokou dostupností se v současné době nepodporují.

  • Jak můžu monitorovat stav a stav agenta OpenTelemetry?

    Metriky stavu a kondice agenta nejsou aktuálně dostupné. Tato funkce se plánuje pro budoucí verzi.

Vlastní konfigurace DNS

Spravovaný kolektor OpenTelemetry respektuje vlastní konfiguraci DNS ve vašem prostředí Container Apps. Pokud jste nakonfigurovali vlastní nastavení DNS, kolektor tato nastavení automaticky použije k překladu názvů při připojování k externím bodům. Tím se zajistí správné směrování dat OpenTelemetry přes síťovou infrastrukturu.

Další kroky