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:
- Używanie usługi Azure Key Vault do przekazywania bezpiecznej wartości parametru podczas wdrażania
- Samouczek: integrowanie usługi Azure Key Vault we wdrożeniu szablonu usługi ARM
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
, dataDog
lub 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.