Udostępnij za pośrednictwem


Zbieranie i odczytywanie danych OpenTelemetry w usłudze Azure Container Apps (wersja zapoznawcza)

Korzystając z agenta danych OpenTelemetry w środowisku usługi Azure Container Apps, możesz wysłać dane z obserwacji w formacie OpenTelemetry, wykonując następujące czynności:

  • Potokowanie danych z agenta do żądanego punktu końcowego. Opcje docelowe obejmują usługę Azure Monitor Application Insights, usługę Datadog i dowolny punkt końcowy zgodny z protokołem OpenTelemetry Protocol (OTLP).

  • Łatwe zmienianie docelowych punktów końcowych bez konieczności ponownego konfigurowania sposobu emitowania danych i bez konieczności ręcznego uruchamiania agenta OpenTelemetry.

W tym artykule pokazano, jak skonfigurować i skonfigurować agenta OpenTelemetry dla aplikacji kontenera.

Konfigurowanie agenta OpenTelemetry

Agenci OpenTelemetry działają w środowisku aplikacji kontenera. Ustawienia agenta można skonfigurować za pomocą szablonu usługi ARM lub wywołań Bicep do środowiska albo za pośrednictwem interfejsu wiersza polecenia lub za pośrednictwem narzędzia Terraform (za pośrednictwem dostawcy AzAPI).

Każdy typ punktu końcowego (Azure Monitor Application Insights, DataDog i OTLP) ma określone wymagania dotyczące konfiguracji.

Wymagania wstępne

Włączenie zarządzanego agenta OpenTelemetry do środowiska nie oznacza automatycznego zbierania danych przez agenta. Agenci wysyłają dane tylko na podstawie ustawień konfiguracji i prawidłowo instrumentując kod.

Konfigurowanie kodu źródłowego

Przygotuj aplikację do zbierania danych, instalując zestaw OpenTelemetry SDK i postępując zgodnie z wytycznymi OpenTelemetry, aby instrumentować metryki, dzienniki lub ślady.

Inicjowanie punktów końcowych

Przed wysłaniem danych do miejsca docelowego kolekcji należy najpierw utworzyć wystąpienie usługi docelowej. Jeśli na przykład chcesz wysłać dane do usługi Azure Monitor Application Insights, musisz utworzyć wystąpienie usługi Application Insights z wyprzedzeniem.

Zarządzany agent OpenTelemetry akceptuje następujące miejsca docelowe:

  • Azure Monitor Application Insights
  • Datadog
  • Dowolny punkt końcowy OTLP (na przykład: New Relic lub Honeycomb)

W poniższej tabeli przedstawiono typ danych, które można wysyłać do każdego miejsca docelowego:

Element docelowy Dzienniki Metryki Ślady
aplikacja systemu Azure Insights Tak Nie Tak
Datadog Nie. Tak Tak
Punkt końcowy skonfigurowany przez protokół OpenTelemetry (OTLP) Tak Tak Tak

Azure Monitor Application Insights

Jedynymi szczegółami konfiguracji wymaganymi z usługi Application Insights jest parametry połączenia. Po utworzeniu parametry połączenia możesz skonfigurować agenta za pomocą szablonu arm aplikacji kontenera przy użyciu poleceń interfejsu wiersza polecenia platformy Azure lub narzędzia Terraform.

Parametry połączenia zawiera klucz instrumentacji, który jest unikatowym identyfikatorem używanym do kojarzenia danych telemetrycznych z określonym zasobem usługi Application Insights. Klucze instrumentacji nie są tokenami zabezpieczającymi ani kluczami zabezpieczeń i nie są uznawane za wpisy tajne.

Jeśli chcesz chronić zasób usługi Application Insights przed nieprawidłowym użyciem, zobacz Microsoft Entra authentication for Application Insights (Uwierzytelnianie firmy Microsoft dla usługi Application Insights).

Przed wdrożeniem tego szablonu zastąp symbole zastępcze otoczone <> wartościami.

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

Datadog

Konfiguracja agenta usługi Datadog wymaga wartości dla site i key z wystąpienia usługi Datadog. Zbierz te wartości z wystąpienia usługi Datadog zgodnie z tą tabelą:

Właściwość agenta usługi Datadog Właściwość konfiguracji usługi Container Apps
DD_SITE site
DD_API_KEY key

Po utworzeniu tych szczegółów konfiguracji możesz skonfigurować agenta za pomocą szablonu arm aplikacji kontenera lub poleceń interfejsu wiersza polecenia platformy Azure.

Unikaj określania wartości wpisu tajnego, takiego jak klucz interfejsu API usługi Datadog, bezpośrednio w środowisku produkcyjnym. Zamiast tego użyj odwołania do wpisu tajnego przechowywanego w usłudze Azure Key Vault.

Musisz włączyć magazyn kluczy na potrzeby wdrażania szablonu. W tym celu utwórz magazyn kluczy z włączoną enabledForTemplateDeployment właściwością lub uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure, zastępując element <KEY_VAULT_NAME> wartością :

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

Aby uzyskać więcej informacji, zobacz:

Utwórz plik parametrów, aby pobrać klucz interfejsu API usługi Datadog z usługi Azure Key Vault.

Przed wdrożeniem następujących plików zastąp symbole zastępcze otoczone <> wartościami.

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

Teraz możesz odwołać się do parametru datadogapikey w szablonie usługi 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"]
      }
    }
  }
}

Aby wdrożyć zasób, uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure, zastępując symbole zastępcze otoczone <> wartościami.

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

Punkt końcowy OTLP

Punkt końcowy protokołu OpenTelemetry (OTLP) to miejsce docelowe danych telemetrycznych, które zużywa dane OpenTelemetry. W konfiguracji aplikacji można dodać wiele punktów końcowych OTLP. Poniższy przykład dodaje dwa punkty końcowe i wysyła następujące dane do tych punktów końcowych.

Nazwa punktu końcowego Dane wysyłane do punktu końcowego
oltp1 Metryki i/lub ślady
oltp2 Dzienniki i/lub ślady

Chociaż można skonfigurować dowolną liczbę punktów końcowych skonfigurowanych przez protokół OTLP, każdy punkt końcowy musi mieć odrębną nazwę.

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

Nazwa/nazwisko opis
resource-group Nazwa grupy zasobów. Grupę domyślną można skonfigurować przy użyciu polecenia az configure --defaults group=<NAME>.
name Nazwa środowiska usługi Container Apps.
otlp-name Wybrana nazwa identyfikująca punkt końcowy skonfigurowany przez protokół OTLP.
endpoint Adres URL miejsca docelowego, który odbiera zebrane dane.
insecure Wartość domyślna true. Określa, czy włączyć zabezpieczenia transportu klienta dla połączenia gRPC eksportera. Jeśli wartość false, headers parametr jest wymagany.
headers Wartości rozdzielone spacjami w formacie "key=value" zawierają wymagane informacje dotyczące zabezpieczeń punktów końcowych OTLP. Przykład: "api-key=key other-config-value=value".

Konfigurowanie miejsc docelowych danych

Aby skonfigurować agenta destinations , użyj tablicy, aby zdefiniować, którzy agenci wysyłają dane przez aplikację. Prawidłowe klucze to appInsights, dataDoglub nazwa niestandardowego punktu końcowego OTLP. Możesz kontrolować zachowanie agenta na podstawie typu danych i opcji związanych z punktem końcowym.

Według typu danych

Opcja Przykład
Wybierz typ danych. Dzienniki, metryki i/lub ślady można skonfigurować indywidualnie.
Włącz lub wyłącz dowolny typ danych. Możesz wybrać opcję wysyłania tylko śladów i żadnych innych danych.
Wyślij jeden typ danych do wielu punktów końcowych. Dzienniki można wysyłać zarówno do usługi DataDog, jak i do punktu końcowego skonfigurowanego przez protokół OTLP.
Wysyłaj różne typy danych do różnych lokalizacji. Możesz wysyłać ślady do punktu końcowego i metryk OTLP do usługi DataDog.
Wyłącz wysyłanie wszystkich typów danych. Możesz nie wysyłać żadnych danych za pośrednictwem agenta OpenTelemetry.

Według punktu końcowego

  • Jednocześnie można skonfigurować tylko jeden punkt końcowy usługi Application Insights i datadog.
  • Chociaż można zdefiniować więcej niż jeden punkt końcowy skonfigurowany przez otLP, każdy z nich musi mieć odrębną nazwę.

Poniższy przykładowy szablon usługi ARM pokazuje, jak używać punktu końcowego OTLP o nazwie customDashboard. Wysyła:

  • śledzenie do szczegółowych informacji o aplikacji i customDashboard
  • dzienniki do szczegółowych informacji o aplikacji i customDashboard
  • metryki do usługi DataDog i customDashboard
{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

Przykładowa konfiguracja openTelemetry

Poniższy przykładowy szablon usługi ARM przedstawia sposób konfigurowania aplikacji kontenera w celu zbierania danych telemetrycznych przy użyciu usługi Azure Monitor Application Insights, Datadog i niestandardowego agenta OTLP o nazwie customDashboard.

Ten przykład działa z plikiem parametrów używanym do pobierania klucza interfejsu API usługi Datadog z usługi Azure Key Vault.

Przed wdrożeniem tego szablonu zastąp symbole zastępcze otoczone <> wartościami.

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

Aby uzyskać więcej informacji, zobacz Microsoft.App/managedEnvironments.

Zmienne środowiskowe

Agent OpenTelemetry automatycznie wprowadza zestaw zmiennych środowiskowych do aplikacji w czasie wykonywania.

Pierwsze dwie zmienne środowiskowe są zgodne ze standardową konfiguracją eksportera OpenTelemetry i są używane w standardowych zestawach programistycznych OTLP. Jeśli jawnie ustawisz zmienną środowiskową w specyfikacji aplikacji kontenera, wartość zastępuje automatycznie wstrzykniętą wartość.

Dowiedz się więcej o konfiguracji eksportera OTLP zobacz Konfiguracja eksportera OTLP.

Nazwa/nazwisko opis
OTEL_EXPORTER_OTLP_ENDPOINT Podstawowy adres URL punktu końcowego dla dowolnego typu sygnału z opcjonalnym numerem portu. To ustawienie jest przydatne, gdy wysyłasz więcej niż jeden sygnał do tego samego punktu końcowego i chcesz, aby jedna zmienna środowiskowa kontrolować punkt końcowy. Przykład: http://otel.service.k8se-apps:4317/
OTEL_EXPORTER_OTLP_PROTOCOL Określa protokół transportu OTLP używany dla wszystkich danych telemetrycznych. Zarządzany agent obsługuje tylko program grpc. Wartość: grpc.

Pozostałe trzy zmienne środowiskowe są specyficzne dla usługi Azure Container Apps i są zawsze wstrzykiwane. Te zmienne przechowują adresy URL punktów końcowych agenta dla każdego określonego typu danych (dzienniki, metryki, ślady).

Te zmienne są konieczne tylko wtedy, gdy używasz zarówno zarządzanego agenta OpenTelemetry, jak i innego agenta OpenTelemetry. Użycie tych zmiennych pozwala kontrolować sposób kierowania danych między różnymi agentami OpenTelemetry.

Nazwa/nazwisko opis Przykład
CONTAINERAPP_OTEL_TRACING_GRPC_ENDPOINT Adres URL punktu końcowego tylko dla danych śledzenia. http://otel.service.k8se-apps:43178/v1/traces/
CONTAINERAPP_OTEL_LOGGING_GRPC_ENDPOINT Adres URL punktu końcowego tylko dla danych dziennika. http://otel.service.k8se-apps:43178/v1/logs/
CONTAINERAPP_OTEL_METRIC_GRPC_ENDPOINT Adres URL punktu końcowego tylko dla danych metryk. http://otel.service.k8se-apps:43178/v1/metrics/

Koszty agenta OpenTelemetry

Opłaty są naliczane za bazowe obliczenia agenta.

Zobacz usługę docelową, aby zapoznać się ze strukturą rozliczeń i warunkami. Jeśli na przykład wysyłasz dane do usług Azure Monitor Application Insights i Datadog, odpowiadasz za opłaty stosowane przez obie usługi.

Znane ograniczenia

  • Agenci OpenTelemetry są w wersji zapoznawczej.
  • Dane systemowe, takie jak dzienniki systemowe lub metryki standardowe usługi Container Apps, nie są dostępne do wysłania do agenta OpenTelemetry.
  • Punkt końcowy usługi Application Insights nie akceptuje metryk.
  • Punkt końcowy usługi Datadog nie akceptuje dzienników.

Następne kroki