Ce guide explique comment configurer OpenTelemetry (OTel) dans Azure Monitor Application Insights à l’aide de la distribution Azure Monitor OpenTelemetry. Une configuration appropriée garantit une collecte cohérente des données de télémétrie entre .NET, Java, Node.jset les applications Python, ce qui permet une surveillance et des diagnostics plus fiables.
Chaîne de connexion
Dans Application Insights, un chaîne de connexion définit l’emplacement cible pour l’envoi de données de télémétrie.
Utilisez l’une des trois méthodes suivantes pour configurer la chaîne de connexion :
Ajoutez UseAzureMonitor() à votre fichier program.cs.
var builder = WebApplication.CreateBuilder(args);
// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
options.ConnectionString = "<YOUR-CONNECTION-STRING>";
});
var app = builder.Build();
app.Run();
Définissez une variable d’environnement.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Ajoutez la section suivante au fichier config appsettings.json.
{
"AzureMonitor": {
"ConnectionString": "<YOUR-CONNECTION-STRING>"
}
}
Remarque
Si vous définissez la chaîne de connexion à plusieurs endroits, l’ordre de priorité suivant s’applique :
- Code
- Variable d’environnement
- Fichier de configuration
Utilisez l’une des deux méthodes suivantes pour configurer le chaîne de connexion :
Ajoutez le Azure Monitor Exporter à chaque signal OpenTelemetry au démarrage de l’application.
// Create a new OpenTelemetry tracer provider.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(options =>
{
options.ConnectionString = "<YOUR-CONNECTION-STRING>";
})
.Build();
// Create a new OpenTelemetry meter provider.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
.AddAzureMonitorMetricExporter(options =>
{
options.ConnectionString = "<YOUR-CONNECTION-STRING>";
})
.Build();
// Create a new logger factory.
// It is important to keep the LoggerFactory instance active throughout the process lifetime.
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
logging.AddAzureMonitorLogExporter(options =>
{
options.ConnectionString = "<YOUR-CONNECTION-STRING>";
});
});
});
Définissez une variable d’environnement.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Remarque
Si vous définissez la chaîne de connexion à plusieurs endroits, l’ordre de priorité suivant s’applique :
- Code
- Variable d’environnement
Utilisez l’une des trois méthodes suivantes pour configurer la chaîne de connexion :
Ajoutez la section suivante à votre fichier de configurationapplicationinsights.json .
{
"connectionString": "..."
}
Vous pouvez également définir l’chaîne de connexion en spécifiant un fichier à partir duquel le charger. Le fichier ne doit contenir que les chaîne de connexion et rien d’autre. Si vous spécifiez un chemin relatif, il est résolu par rapport au répertoire où se trouve applicationinsights-agent-3.7.8.jar.
{
"connectionString": "${file:connection-string-file.txt}"
}
Définissez une variable d’environnement.
APPLICATIONINSIGHTS_CONNECTION_STRING
Ajouter applicationinsights.connection.string en tant que propriété système.
java -javaagent:/path/to/applicationinsights-agent-3.7.8.jar \
-Dapplicationinsights.connection.string="<YOUR-CONNECTION-STRING>" \
-jar myapp.jar
Remarque
Si vous définissez la chaîne de connexion à plusieurs endroits, nous respectons la priorité suivante :
- Propriété système
- Variable d’environnement
- Fichier de configuration
Si vous déployez plusieurs applications dans la même machine virtuelle Java (JVM) et que vous souhaitez qu’elles envoient des données de télémétrie à différentes chaînes de connexion, consultez Remplacements de chaîne de connexion (aperçu).
Utilisez l’une des deux méthodes suivantes pour configurer l’chaîne de connexion :
Définissez une variable d’environnement.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Définissez une propriété.
applicationinsights.connection.string=<YOUR-CONNECTION-STRING>
Conseil
- exemples TypeScript pour Azure Monitor OpenTelemetry (source de parité faisant autorité) : exemples TypeScript
Utilisez l’une des deux méthodes suivantes pour configurer l’chaîne de connexion :
Définissez une variable d’environnement.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Utilisez l’objet de configuration.
export class BasicConnectionSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized");
}
}
Utilisez l’une des deux méthodes suivantes pour configurer l’chaîne de connexion :
Définissez une variable d’environnement.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Utiliser la fonction configure_azure_monitor.
# Import the `configure_azure_monitor()` function from the `azure.monitor.opentelemetry` package.
from azure.monitor.opentelemetry import configure_azure_monitor
# Configure OpenTelemetry to use Azure Monitor with the specified connection string.
# Replace `<YOUR-CONNECTION-STRING>` with the connection string of your Azure Monitor Application Insights resource.
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
)
Définir le nom du rôle cloud et l’instance de rôle cloud
Pour les langues prises en charge, Azure Monitor OpenTelemetry Distro détecte automatiquement le contexte de la ressource et fournit des valeurs par défaut pour les propriétés de Cloud Role Name et Cloud Role Instance de votre composant. Toutefois, vous pouvez remplacer les valeurs par défaut par un élément logique pour votre équipe. La valeur du nom du rôle cloud s’affiche sur la cartographie d’applications en tant que nom sous un nœud.
Définissez le nom du rôle cloud et l’instance de rôle cloud via les attributs de ressource . Le nom de rôle cloud utilise les attributs service.namespace et service.name, mais se replie sur service.name si service.namespace n'est pas défini. L’instance de rôle cloud utilise la valeur d’attribut service.instance.id. Pour plus d’informations sur les attributs standard pour les ressources, consultez Conventions sémantiques OpenTelemetry.
// Setting role name and role instance
// Create a dictionary of resource attributes.
var resourceAttributes = new Dictionary<string, object> {
{ "service.name", "my-service" },
{ "service.namespace", "my-namespace" },
{ "service.instance.id", "my-instance" }};
// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);
// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry()
.UseAzureMonitor()
// Configure the ResourceBuilder to add the custom resource attributes to all signals.
// Custom resource attributes should be added AFTER AzureMonitor to override the default ResourceDetectors.
.ConfigureResource(resourceBuilder => resourceBuilder.AddAttributes(resourceAttributes));
// Build the ASP.NET Core web application.
var app = builder.Build();
// Start the ASP.NET Core web application.
app.Run();
Définissez le nom du rôle cloud et l’instance de rôle cloud via les attributs de ressource . Le nom de rôle cloud utilise les attributs service.namespace et service.name, mais se replie sur service.name si service.namespace n'est pas défini. L’instance de rôle cloud utilise la valeur d’attribut service.instance.id. Pour plus d’informations sur les attributs standard pour les ressources, consultez Conventions sémantiques OpenTelemetry.
// Setting role name and role instance
// Create a dictionary of resource attributes.
var resourceAttributes = new Dictionary<string, object> {
{ "service.name", "my-service" },
{ "service.namespace", "my-namespace" },
{ "service.instance.id", "my-instance" }};
// Create a resource builder.
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
// Create a new OpenTelemetry tracer provider and set the resource builder.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
// Set ResourceBuilder on the TracerProvider.
.SetResourceBuilder(resourceBuilder)
.AddAzureMonitorTraceExporter()
.Build();
// Create a new OpenTelemetry meter provider and set the resource builder.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
// Set ResourceBuilder on the MeterProvider.
.SetResourceBuilder(resourceBuilder)
.AddAzureMonitorMetricExporter()
.Build();
// Create a new logger factory and add the OpenTelemetry logger provider with the resource builder.
// It is important to keep the LoggerFactory instance active throughout the process lifetime.
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
// Set ResourceBuilder on the Logging config.
logging.SetResourceBuilder(resourceBuilder);
logging.AddAzureMonitorLogExporter();
});
});
Remarque
Si vous ne définissez pas le nom du rôle cloud et l’instance de rôle cloud, le nom du rôle cloud est défini par défaut sur le nom de votre ressource Application Insights et l’instance de rôle cloud est définie par défaut sur le nom de l’ordinateur.
Utilisez l’une des trois méthodes suivantes pour configurer le nom du rôle cloud et l’instance de rôle cloud :
Ajoutez la section suivante à votre fichier de configurationapplicationinsights.json .
{
"role": {
// Set the cloud role name
"name": "my cloud role name",
// Set the cloud role instance
"instance": "my cloud role instance"
}
}
Définir des variables d’environnement
APPLICATIONINSIGHTS_ROLE_NAME
APPLICATIONINSIGHTS_ROLE_INSTANCE
Ajoutez applicationinsights.role.name et applicationinsights.role.instance en tant que propriétés système.
java -javaagent:/path/to/applicationinsights-agent-3.7.8.jar \
-Dapplicationinsights.role.name="my-cloud-role-name" \
-Dapplicationinsights.role.instance="my-cloud-role-instance" \
-jar myapp.jar
Remarque
Si vous définissez le nom du rôle cloud et l’instance de rôle cloud à plusieurs endroits, l’ordre de priorité suivant s’applique :
- Propriété système
- Variable d’environnement
- Fichier de configuration
Si vous déployez plusieurs applications dans la même JVM et souhaitez qu'elles envoient de la télémétrie à des noms de rôles cloud différents, consultez surcharges de nom de rôle cloud (version préliminaire).
Pour définir le nom du rôle cloud :
- Utilisez le
spring.application.name pour les applications d'image native Spring Boot.
- Utilisez le
quarkus.application.name pour les applications d’image native Quarkus.
Remarque
La communauté de Quarkus soutient et gère les extensions de Dockerus. Pour obtenir de l’aide, utilisez les canaux de support de la communauté Quarkus. Microsoft ne fournit pas de support technique pour cette intégration.
Définissez le nom du rôle cloud et l’instance de rôle cloud via les attributs de ressource . Le nom de rôle cloud utilise les attributs service.namespace et service.name, mais se replie sur service.name si service.namespace n'est pas défini. L’instance de rôle cloud utilise la valeur d’attribut service.instance.id. Pour plus d’informations sur les attributs standard pour les ressources, consultez Conventions sémantiques OpenTelemetry.
export class CloudRoleSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const { resourceFromAttributes } = await import("@opentelemetry/resources");
const { ATTR_SERVICE_NAME } = await import("@opentelemetry/semantic-conventions");
const { ATTR_SERVICE_NAMESPACE, ATTR_SERVICE_INSTANCE_ID } =
await import("@opentelemetry/semantic-conventions/incubating");
const customResource = resourceFromAttributes({
[ATTR_SERVICE_NAME]: process.env.OTEL_SERVICE_NAME || "my-service",
[ATTR_SERVICE_NAMESPACE]: process.env.OTEL_SERVICE_NAMESPACE || "my-namespace",
[ATTR_SERVICE_INSTANCE_ID]: process.env.OTEL_SERVICE_INSTANCE_ID || "my-instance",
});
const options = {
resource: customResource,
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (custom resource)");
}
}
Définissez le nom du rôle cloud et l’instance de rôle cloud via les attributs Ressource. Le nom du rôle cloud utilise les attributs service.namespace et service.name, mais il retourne à la valeur service.name si service.namespace n’est pas défini. L’instance de rôle cloud utilise la valeur d’attribut service.instance.id. Pour plus d’informations sur les attributs standard pour les ressources, consultez Conventions sémantiques OpenTelemetry.
Définissez les attributs des ressources à l’aide des variables d’environnement OTEL_RESOURCE_ATTRIBUTES et/ou OTEL_SERVICE_NAME.
OTEL_RESOURCE_ATTRIBUTES prend des séries de paires clé-valeur séparées par des virgules. Par exemple, pour définir le nom du rôle cloud sur my-namespace.my-helloworld-service et définir l’instance de rôle cloud sur my-instance, vous pouvez définir OTEL_RESOURCE_ATTRIBUTES et OTEL_SERVICE_NAME comme suit :
export OTEL_RESOURCE_ATTRIBUTES="service.namespace=my-namespace,service.instance.id=my-instance"
export OTEL_SERVICE_NAME="my-helloworld-service"
Si vous ne définissez pas l’attribut de la ressource service.namespace, vous pouvez alors définir le nom du rôle cloud avec uniquement la variable d’environnement OTEL_SERVICE_NAME ou l’attribut de la ressource service.name. Par exemple, pour définir le nom du rôle cloud sur my-helloworld-service et définir l’instance de rôle cloud sur my-instance, vous pouvez définir OTEL_RESOURCE_ATTRIBUTES et OTEL_SERVICE_NAME comme suit :
export OTEL_RESOURCE_ATTRIBUTES="service.instance.id=my-instance"
export OTEL_SERVICE_NAME="my-helloworld-service"
Définir des attributs de ressource
L'instrumentation automatique et les distributions d'Azure Monitor activent la détection des ressources lors de l'exécution dans les environnements Azure pris en charge. Pour plus d’informations, consultez Collecte de données et détecteurs de ressources automatiques pour Azure Monitor OpenTelemetry.
Pour les configurations manuelles, définissez des attributs de ressource directement à l’aide des options OpenTelemetry standard :
# Applies to .NET (ASP.NET/ASP.NET Core), Java, Node.js, and Python
export OTEL_SERVICE_NAME="my-service"
export OTEL_RESOURCE_ATTRIBUTES="cloud.provider=azure,cloud.region=westus,cloud.resource_id=/subscriptions/<SUB>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<APP>"
Sur Windows PowerShell :
$Env:OTEL_SERVICE_NAME="my-service"
$Env:OTEL_RESOURCE_ATTRIBUTES="cloud.provider=azure,cloud.region=westus,cloud.resource_id=/subscriptions/<SUB>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<APP>"
Activer l’échantillonnage
L’échantillonnage réduit le volume et le coût d’ingestion de télémétrie. La distribution OpenTelemetry d’Azure Monitor prend en charge deux stratégies d’échantillonnage pour les traces et (éventuellement) vous permet d’aligner les journaux d’application sur vos décisions d’échantillonnage de trace. L’échantillonneur attache le ratio d’échantillonnage ou le taux sélectionné aux étendues exportées afin que Application Insights puisse ajuster le nombre d’expériences avec précision. Pour obtenir une vue d’ensemble conceptuelle, consultez En savoir plus sur l’échantillonnage.
Important
- Les décisions d’échantillonnage s’appliquent aux traces (étendues).
-
Les journaux d’activité appartenant à des traces non échantillonnées sont supprimés par défaut, mais il est possible de désactiver l’échantillonnage basé sur les traces pour les journaux d’activité.
-
Les métriques ne sont jamais échantillonées.
Utilisez des variables d’environnement OpenTelemetry standard pour sélectionner l’échantillonneur et fournir son argument. Pour plus d’informations sur les types d’échantillonneur OpenTelemetry, consultez OTEL_TRACES_SAMPLER.
Remarque
À compter de Java agent version 3.4.0, l’échantillonnage limité au taux est disponible et est désormais la valeur par défaut.
L’échantillonnage ne s’applique qu’aux journaux dans une requête. Les journaux qui ne sont pas à l’intérieur d’une requête (par exemple, les journaux de démarrage) sont toujours collectés par défaut. Pour procéder à un échantillonnage de ces journaux d’activité, utilisez les remplacements d’échantillonnage
Échantillonnage à pourcentage fixe
-
APPLICATIONINSIGHTS_SAMPLING_PERCENTAGE Pourcentage d’échantillonnage â€"
- La valeur est un pourcentage (par exemple,
33.333 = ~33,333%).
Échantillonnage à débit limité
-
APPLICATIONINSIGHTS_SAMPLING_REQUESTS_PER_SECOND Demandes maximales par seconde
Pour obtenir des exemples et des options de configuration, consultez Configurer les remplacements d’échantillonnage.
Les exemples suivants montrent comment configurer l’échantillonnage à l’aide de variables d’environnement.
Remarque
Les exemples suivants ne sont pas valides pour Java. Pour connaître les variables d’environnement appropriées, consultez l’onglet Java précédent.
Échantillonnage à pourcentage fixe (~10%)
export OTEL_TRACES_SAMPLER="microsoft.fixed_percentage"
export OTEL_TRACES_SAMPLER_ARG=0.1
Échantillonnage limité par le débit (environ 1,5 traces/s)
export OTEL_TRACES_SAMPLER="microsoft.rate_limited"
export OTEL_TRACES_SAMPLER_ARG=1.5
Remarque
Lorsque les options au niveau du code et les variables d’environnement sont configurées, les variables d’environnement sont prioritaires. Le comportement de l’échantillonneur par défaut peut différer selon la langue.
Échantillonnage de pourcentage fixe
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
o.SamplingRatio = 0.1F; // ~10%
});
var app = builder.Build();
app.Run();
Échantillonnage à fréquence limitée
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
o.TracesPerSecond = 1.5; // ~1.5 traces/sec
});
var app = builder.Build();
app.Run();
Remarque
Si vous ne définissez pas d'échantillonneur dans du code ou via des variables d'environnement, Azure Monitor utilise ApplicationInsightsSampler par défaut.
Échantillonnage de pourcentage fixe
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(o => o.SamplingRatio = 0.1F)
.Build();
Échantillonnage à fréquence limitée
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(o => o.TracesPerSecond = 1.5F)
.Build();
Remarque
Si vous ne définissez pas d'échantillonneur dans du code ou via des variables d'environnement, Azure Monitor utilise ApplicationInsightsSampler par défaut.
Pour Java, vous ne pouvez pas configurer l'échantillonnage dans le code.
Pour les applications natives Spring Boot, les configurations d'échantillonnage du SDK Java OpenTelemetry sont applicables.
Pour les applications natives de Quarkus, configurez l’échantillonnage à l’aide du guide OpenTelemetry de Basicus, puis utilisez l’exportateur OpenTelemetry Pour envoyer des données de télémétrie à Application Insights.
Remarque
La communauté de Quarkus soutient et gère les extensions de Dockerus. Pour obtenir de l’aide, utilisez les canaux de support de la communauté Quarkus. Microsoft ne fournit pas de support technique pour cette intégration.
À partir de la version 1.16.0, l’échantillonnage limité est la valeur par défaut.
Échantillonnage de pourcentage fixe
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const monitor = useAzureMonitor({
samplingRatio: 0.1, // ~10%
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
});
Échantillonnage à fréquence limitée
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const monitor = useAzureMonitor({
tracesPerSecond: 1.5, // ~1.5 traces/sec
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
});
Remarque
Si vous ne définissez pas d'échantillonneur dans du code ou via des variables d'environnement, Azure Monitor utilise RateLimitedSampler par défaut.
À partir de la version 1.8.6, l’échantillonnage limité est la valeur par défaut.
Échantillonnage de pourcentage fixe
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
sampling_ratio=0.1, # 0.1 = 10% of traces sampled
)
Échantillonnage à fréquence limitée
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
traces_per_second=1.5, # ~1.5 traces/sec
)
Remarque
Si vous ne définissez pas de variables d’environnement ou ne fournissez ni sampling_ratio ni traces_per_second, configure_azure_monitor() utilise RateLimitedSampler par défaut.
Conseil
Lorsque vous utilisez l’échantillonnage à pourcentage fixe et que vous ne savez pas quelle valeur définir pour le taux d’échantillonnage, commencez à 5% (0.05). Ajustez le taux en fonction de la précision des opérations affichées dans les volets des défaillances et des performances. Tout échantillonnage réduit la précision, c'est pourquoi il est conseillé de surveiller les métriques OpenTelemetry, qui ne sont pas affectées par l'échantillonnage.
La configuration de l'échantillonnage dans un fichier de configuration n'est pas prise en charge pour ASP.NET Core. Pour configurer l’échantillonnage, utilisez plutôt des variables de code ou d’environnement.
La configuration de l'échantillonnage dans un fichier de configuration n'est pas prise en charge pour .NET. Pour configurer l’échantillonnage, utilisez plutôt des variables de code ou d’environnement.
Remarque
À compter de Java agent version 3.4.0, l’échantillonnage limité au taux est disponible et est désormais la valeur par défaut.
L’échantillonnage ne s’applique qu’aux journaux dans une requête. Les journaux qui ne sont pas à l’intérieur d’une requête (par exemple, les journaux de démarrage) sont toujours collectés par défaut. Pour procéder à un échantillonnage de ces journaux d’activité, utilisez les remplacements d’échantillonnage
Si vous ne configurez pas l’échantillonnage, l’échantillonnage par défaut est désormais un échantillonnage à débit limité configuré pour capturer au maximum (environ) cinq requêtes par seconde, ainsi que toutes les dépendances et les journaux associés à ces requêtes.
Cette configuration remplace la valeur par défaut précédente qui capturait toutes les demandes. Si vous souhaitez toujours capturer toutes les demandes, utilisez l’échantillonnage à pourcentage fixe et définissez le pourcentage d’échantillonnage sur 100.
Échantillonnage de pourcentage fixe
Cet exemple montre comment définir l’échantillonnage pour capturer environ un tiers de toutes les demandes :
{
"sampling": {
"percentage": 33.333
}
}
Définissez le pourcentage d’échantillonnage à l’aide de la variable d’environnement. Il est prioritaire sur le pourcentage d’échantillonnage spécifié dans la configuration JSON.
Conseil
Pour le pourcentage d’échantillonnage, choisissez un pourcentage proche de 100/N, où N est un nombre entier. L’échantillonnage ne prend actuellement en charge aucune autre valeur.
Échantillonnage à fréquence limitée
Remarque
L’échantillonnage à fréquence limitée est approximatif, car en interne, il doit adapter un pourcentage d’échantillonnage « fixe » au fil du temps pour émettre des nombres d’éléments précis sur chaque enregistrement de télémétrie. En interne, l’échantillonnage à fréquence limitée est réglé pour s’adapter rapidement (0,1 seconde) aux nouvelles charges d’application. Vous ne devriez donc pas le voir dépasser la fréquence configurée de beaucoup ou pendant très longtemps.
Cet exemple montre comment définir l’échantillonnage pour capturer au maximum (environ) une demande par seconde :
{
"sampling": {
"requestsPerSecond": 1.0
}
}
La requestsPerSecond valeur peut être une décimale. Vous pouvez donc la configurer pour capturer moins d’une requête par seconde si vous le souhaitez. Par exemple, une valeur de 0.5 signifie une capture d’au moins une requête toutes les 2 secondes.
Définissez la limite de débit à l’aide de la variable d’environnement. Il est prioritaire sur la limite de débit spécifiée dans la configuration JSON.
Java native ne prend pas en charge la configuration de l'échantillonnage dans un fichier de configuration. Pour configurer l’échantillonnage, utilisez du code ou des variables d’environnement.
À partir de la version 1.16.0, l’échantillonnage limité est la valeur par défaut.
Définissez la configuration d’échantillonnage dans le fichier applicationinsights.json . Ce fichier se trouve sous le dossier racine du @azure/monitor-opentelemetry dossier d’installation du package, tel que node_modules/@azure/monitor-opentelemetry. Toutes les AzureMonitorOpenTelemetryClient instances utilisent ces valeurs de configuration.
Échantillonnage de pourcentage fixe
{
"samplingRatio": 0.1, // ~10%
}
Échantillonnage à fréquence limitée
{
"samplingRatio": 1.5, // ~1.5 traces/sec
}
Python ne prend pas en charge la configuration de l'échantillonnage dans un fichier de configuration. Pour configurer l’échantillonnage, utilisez du code ou des variables d’environnement.
Lorsque vous activez cette fonctionnalité, le système supprime les enregistrements de journal qui appartiennent à des traces non échantillonnées afin que vos journaux restent alignés sur l’échantillonnage de traces.
- Un enregistrement de journal fait partie d’une trace lorsqu’il a une valeur valide
SpanId.
- Si la trace associée est indiquée comme
TraceFlags, la fonctionnalité supprime l’enregistrement du journal.
- Les enregistrements de journal sans contexte de trace ne sont pas affectés.
- La fonctionnalité est activée par défaut.
Utilisez les paramètres ci-dessous pour configurer l’échantillonnage des journaux d’activité basé sur les traces :
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
o.EnableTraceBasedLogsSampler = true;
});
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(o => o.EnableTraceBasedLogsSampler = true)
.Build();
Pour les applications Java, l’échantillonnage basé sur la trace est activé par défaut.
Pour les applications natives Spring Boot et Quarkus natives, l’échantillonnage basé sur les traces est activé par défaut.
Remarque
La communauté de Quarkus soutient et gère les extensions de Dockerus. Pour obtenir de l’aide, utilisez les canaux de support de la communauté Quarkus. Microsoft ne fournit pas de support technique pour cette intégration.
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const monitor = useAzureMonitor({
enableTraceBasedSamplingForLogs: true,
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
});
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
enable_trace_based_sampling_for_logs=True,
)
Mesures actives
Mesures actives : fournissent un tableau de bord d’analyse en temps réel pour obtenir un aperçu de l’activité et de la performance de l’application.
Important
Consultez les conditions d’utilisation Supplemental pour les préversions Microsoft Azure pour connaître les conditions légales qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou qui ne sont pas encore publiées dans la disponibilité générale.
Cette fonctionnalité est activée par défaut.
Les utilisateurs peuvent désactiver les mesures actives lors de la configuration de la distribution.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
// Disable the Live Metrics feature.
options.EnableLiveMetrics = false;
});
Cette fonctionnalité n'est pas disponible dans le Azure Monitor .NET Exporter.
Les métriques actives ne sont pas disponibles pour les applications natives GraalVM.
Important
Consultez les conditions d’utilisation Supplemental pour les préversions Microsoft Azure pour connaître les conditions légales qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou qui ne sont pas encore publiées dans la disponibilité générale.
Les utilisateurs peuvent activer/désactiver les mesures actives lors de la configuration de la distribution à l’aide de la propriété enableLiveMetrics.
export class LiveMetricsSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
enableLiveMetrics: true, // set to false to disable
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (live metrics enabled)");
}
}
Important
Consultez les conditions d’utilisation Supplemental pour les préversions Microsoft Azure pour connaître les conditions légales qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou qui ne sont pas encore publiées dans la disponibilité générale.
Vous pouvez activer les métriques en direct en utilisant la distribution OpenTelemetry d'Azure Monitor pour Python comme suit :
...
configure_azure_monitor(
enable_live_metrics=True
)
...
Pour créer une connexion plus sécurisée à Azure, activez l’authentification Microsoft Entra. Cette méthode d’authentification empêche l’ingestion de données de télémétrie non autorisées dans votre abonnement.
Pour plus d’informations, consultez la page d’authentification dédiée Microsoft Entra liée pour chaque langue prise en charge.
L'authentification Microsoft Entra ID n'est pas disponible pour les applications GraalVM Native.
Stockage hors connexion et nouvelles tentatives automatiques
Les offres basées sur OpenTelemetry d'Azure Monitor mettent en cache la télémétrie lorsqu’une application se déconnecte d’Application Insights et réessaient de la renvoyer pendant un maximum de 48 heures. Pour obtenir des recommandations de gestion des données, consultez Exporter et supprimer des données privées. Les applications à charge élevée suppriment occasionnellement les données de télémétrie pour deux raisons : dépassement du temps autorisé ou dépassement de la taille maximale du fichier. Si nécessaire, le produit hiérarchise les événements récents sur les anciens.
Le package Distro inclus AzureMonitorExporter qui utilise l’un des emplacements suivants par défaut pour le stockage hors connexion (répertorié dans l’ordre de priorité) :
Windows
- %LOCALAPPDATA%\Microsoft\AzureMonitor
- %TEMP%\Microsoft\AzureMonitor
Autre que Windows
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
- /tmp/Microsoft/AzureMonitor
Pour remplacer le répertoire par défaut, vous devez définir AzureMonitorOptions.StorageDirectory.
// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);
// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options =>
{
// Set the Azure Monitor storage directory to "C:\\SomeDirectory".
// This is the directory where the OpenTelemetry SDK will store any telemetry data that can't be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
});
// Build the ASP.NET Core web application.
var app = builder.Build();
// Start the ASP.NET Core web application.
app.Run();
Pour désactiver cette fonctionnalité, définissez AzureMonitorOptions.DisableOfflineStorage = true.
Par défaut, AzureMonitorExporter utilise l’un des emplacements suivants pour le stockage hors connexion, répertorié dans l’ordre de priorité :
Windows
- %LOCALAPPDATA%\Microsoft\AzureMonitor
- %TEMP%\Microsoft\AzureMonitor
Autre que Windows
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
- /tmp/Microsoft/AzureMonitor
Pour remplacer le répertoire par défaut, vous devez définir AzureMonitorExporterOptions.StorageDirectory.
// Create a new OpenTelemetry tracer provider and set the storage directory.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(options =>
{
// Set the Azure Monitor storage directory to "C:\\SomeDirectory".
// This is the directory where the OpenTelemetry SDK will store any trace data that can't be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
})
.Build();
// Create a new OpenTelemetry meter provider and set the storage directory.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
.AddAzureMonitorMetricExporter(options =>
{
// Set the Azure Monitor storage directory to "C:\\SomeDirectory".
// This is the directory where the OpenTelemetry SDK will store any metric data that can't be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
})
.Build();
// Create a new logger factory and add the OpenTelemetry logger provider with the storage directory.
// It is important to keep the LoggerFactory instance active throughout the process lifetime.
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
logging.AddAzureMonitorLogExporter(options =>
{
// Set the Azure Monitor storage directory to "C:\\SomeDirectory".
// This is the directory where the OpenTelemetry SDK will store any log data that can't be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
});
});
});
Pour désactiver cette fonctionnalité, définissez AzureMonitorExporterOptions.DisableOfflineStorage = true.
Lorsque l'agent ne peut pas envoyer de données de télémétrie à Azure Monitor, il stocke les fichiers de télémétrie sur le disque. Les fichiers sont enregistrés dans un telemetry dossier sous le répertoire spécifié par la java.io.tmpdir propriété système. Chaque nom de fichier commence par un horodatage et se termine par l’extension .trn . Ce mécanisme de stockage hors connexion permet de garantir que la télémétrie est conservée pendant les pannes de réseau temporaires ou les défaillances d’ingestion.
L’agent stocke jusqu’à 50 Mo de données de télémétrie par défaut et autorise la configuration de la limite de stockage. L’agent tente régulièrement d’envoyer des données de télémétrie stockées. Les fichiers de télémétrie antérieurs à 48 heures sont supprimés et les événements les plus anciens sont ignorés lorsque la limite de stockage est atteinte.
Pour obtenir la liste complète des configurations disponibles, consultez Options de configuration.
Lorsque l'agent ne peut pas envoyer de données de télémétrie à Azure Monitor, il stocke les fichiers de télémétrie sur le disque. Les fichiers sont enregistrés dans un telemetry dossier sous le répertoire spécifié par la java.io.tmpdir propriété système. Chaque nom de fichier commence par un horodatage et se termine par l’extension .trn . Ce mécanisme de stockage hors connexion permet de garantir que la télémétrie est conservée pendant les pannes de réseau temporaires ou les défaillances d’ingestion.
L’agent stocke jusqu’à 50 Mo de données de télémétrie par défaut. Les tentatives d’envoi de données de télémétrie stockées sont effectuées régulièrement. Les fichiers de télémétrie antérieurs à 48 heures sont supprimés et les événements les plus anciens sont ignorés lorsque la limite de stockage est atteinte.
Par défaut, AzureMonitorExporter utilise l’un des emplacements suivants pour le stockage hors connexion.
- Windows
- %TEMP%\Microsoft-AzureMonitor-
<unique-identifier>\opentelemetry-nodejs-<your-instrumentation-key>
- systèmes non-Windows
- %TMPDIR%/Microsoft/Microsoft-AzureMonitor-
<unique-identifier>/opentelemetry-nodejs-<your-instrumentation-key>
- /var/tmp/Microsoft/Microsoft-AzureMonitor-
<unique-identifier>/opentelemetry-nodejs-<your-instrumentation-key>
Il <unique-identifier> s’agit d’un hachage créé à partir d’attributs d’environnement utilisateur tels que la clé d’instrumentation, le nom du processus, le nom d’utilisateur et le répertoire d’application. Cet identificateur résout un problème de système multi-utilisateur courant : lorsque le premier utilisateur crée le répertoire de stockage, ses autorisations de fichier (paramètres umask) peuvent empêcher d’autres utilisateurs d’accéder au même chemin d’accès. Un répertoire unique pour chaque contexte utilisateur garantit que chaque utilisateur obtient son propre emplacement de stockage avec des autorisations d’accès appropriées.
Pour remplacer le répertoire par défaut, vous devez définir storageDirectory.
Exemple :
export class OfflineStorageSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
storageDirectory: "C:\\\\SomeDirectory",
disableOfflineStorage: false, // set to true to disable
},
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (offline storage configured)");
}
}
Pour désactiver cette fonctionnalité, vous devez définir disableOfflineStorage = true.
Par défaut, Azure Monitor exportateurs utilisent le chemin d’accès suivant :
<tempfile.gettempdir()>/Microsoft-AzureMonitor-<unique-identifier>/opentelemetry-python-<your-instrumentation-key>
Il <unique-identifier> s’agit d’un hachage créé à partir d’attributs d’environnement utilisateur tels que la clé d’instrumentation, le nom du processus, le nom d’utilisateur et le répertoire d’application. Cet identificateur résout un problème de système multi-utilisateur courant : lorsque le premier utilisateur crée le répertoire de stockage, ses autorisations de fichier (paramètres umask) peuvent empêcher d’autres utilisateurs d’accéder au même chemin d’accès. Un répertoire unique pour chaque contexte utilisateur garantit que chaque utilisateur obtient son propre emplacement de stockage avec des autorisations d’accès appropriées.
Pour remplacer le répertoire par défaut, vous devez définir storage_directory sur le répertoire souhaité.
Exemple :
...
# Configure OpenTelemetry to use Azure Monitor with the specified connection string and storage directory.
# Replace `<YOUR-CONNECTION-STRING>` with the connection string to your Azure Monitor Application Insights resource.
# Replace `C:\\SomeDirectory` with the directory where you want to store the telemetry data before it is sent to Azure Monitor.
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
storage_directory="C:\\SomeDirectory",
)
...
Pour désactiver cette fonctionnalité, vous devez définir disable_offline_storage sur True. La valeur par défaut est False.
Exemple :
...
# Configure OpenTelemetry to use Azure Monitor with the specified connection string and disable offline storage.
# Replace `<YOUR-CONNECTION-STRING>` with the connection string to your Azure Monitor Application Insights resource.
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
disable_offline_storage=True,
)
...
Activer l’exportateur OTLP
Vous souhaiterez peut-être activer l’exportateur OTLP (OpenTelemetry Protocol) en même temps que le Azure Monitor Exporter pour envoyer vos données de télémétrie à deux emplacements.
Remarque
OTLP Exporter est illustré pour des raisons pratiques uniquement. Microsoft ne prend pas officiellement en charge l'exportateur OTLP ni les composants ou les expériences tierces en aval.
Installez le package OpenTelemetry.Exporter.OpenTelemetryProtocol dans votre projet.
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
Ajoutez l’extrait de code suivant : Cet exemple suppose que vous disposez d’un OpenTelemetry Collector avec un récepteur OTLP en cours d’exécution. Pour plus d’informations, consultez le example sur GitHub.
// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);
// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor();
// Add the OpenTelemetry OTLP exporter to the application.
// This exporter will send telemetry data to an OTLP receiver, such as Prometheus
builder.Services.AddOpenTelemetry().WithTracing(builder => builder.AddOtlpExporter());
builder.Services.AddOpenTelemetry().WithMetrics(builder => builder.AddOtlpExporter());
// Build the ASP.NET Core web application.
var app = builder.Build();
// Start the ASP.NET Core web application.
app.Run();
Installez le package OpenTelemetry.Exporter.OpenTelemetryProtocol dans votre projet.
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
Ajoutez l’extrait de code suivant : Cet exemple suppose que vous disposez d’un OpenTelemetry Collector avec un récepteur OTLP en cours d’exécution. Pour plus d’informations, consultez le example sur GitHub.
// Create a new OpenTelemetry tracer provider and add the Azure Monitor trace exporter and the OTLP trace exporter.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter()
.AddOtlpExporter()
.Build();
// Create a new OpenTelemetry meter provider and add the Azure Monitor metric exporter and the OTLP metric exporter.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
.AddAzureMonitorMetricExporter()
.AddOtlpExporter()
.Build();
Application Insights Java Agent ne prend pas en charge OTLP.
Pour plus d’informations sur les configurations prises en charge, consultez la Java documentation supplémentaire.
Vous ne pouvez pas activer l'exportateur OTLP (OpenTelemetry Protocol) en même temps que le Azure Monitor Exporter pour envoyer vos données de télémétrie à deux emplacements.
Installez Exportateur de traces du collecteur OpenTelemetry et d’autres packages OpenTelemetry dans votre projet.
npm install @opentelemetry/api
npm install @opentelemetry/exporter-trace-otlp-http
npm install @opentelemetry/sdk-trace-base
npm install @opentelemetry/sdk-trace-node
Ajoutez l’extrait de code suivant : Cet exemple suppose que vous disposez d’un OpenTelemetry Collector avec un récepteur OTLP en cours d’exécution. Pour plus d’informations, consultez le example sur GitHub.
export class OtlpExporterSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const { BatchSpanProcessor } = await import("@opentelemetry/sdk-trace-base");
const { OTLPTraceExporter } = await import("@opentelemetry/exporter-trace-otlp-http");
// Create an OTLP trace exporter (set 'url' if your collector isn't on the default endpoint).
const otlpExporter = new OTLPTraceExporter({
// url: "http://localhost:4318/v1/traces",
});
// Configure Azure Monitor and add the OTLP exporter as an additional span processor.
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
spanProcessors: [new BatchSpanProcessor(otlpExporter)],
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (OTLP exporter added)");
}
}
Installez le package opentelemetry-exporter-otlp.
Ajoutez l’extrait de code suivant : Cet exemple suppose que vous disposez d’un OpenTelemetry Collector avec un récepteur OTLP en cours d’exécution. Pour plus d’informations, consultez cette README.
# Import the `configure_azure_monitor()`, `trace`, `OTLPSpanExporter`, and `BatchSpanProcessor` classes from the appropriate packages.
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace.export import BatchSpanProcessor
# Configure OpenTelemetry to use Azure Monitor with the specified connection string.
# Replace `<YOUR-CONNECTION-STRING>` with the connection string to your Azure Monitor Application Insights resource.
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
)
# Get the tracer for the current module.
tracer = trace.get_tracer(__name__)
# Create an OTLP span exporter that sends spans to the specified endpoint.
# Replace `http://localhost:4317` with the endpoint of your OTLP collector.
otlp_exporter = OTLPSpanExporter(endpoint="http://localhost:4317")
# Create a batch span processor that uses the OTLP span exporter.
span_processor = BatchSpanProcessor(otlp_exporter)
# Add the batch span processor to the tracer provider.
trace.get_tracer_provider().add_span_processor(span_processor)
# Start a new span with the name "test".
with tracer.start_as_current_span("test"):
print("Hello world!")
Configurations OpenTelemetry
Vous pouvez accéder aux configurations OpenTelemetry suivantes via des variables d’environnement lors de l’utilisation des distributions OpenTelemetry Azure Monitor.
| Variable d’environnement |
Descriptif |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Définissez cette variable sur la chaîne de connexion de votre ressource Application Insights. |
APPLICATIONINSIGHTS_STATSBEAT_DISABLED |
Définissez cette variable à true pour désactiver la collecte de métriques internes. |
OTEL_RESOURCE_ATTRIBUTES |
Paires clé-valeur à utiliser comme attributs de ressource. Pour plus d’informations sur les attributs de ressource, consultez la Spécification du Kit de développement logiciel (SDK) de ressources. |
OTEL_SERVICE_NAME |
Définit la valeur de l’attribut de ressource service.name. Si service.name est également fourni dans OTEL_RESOURCE_ATTRIBUTES, OTEL_SERVICE_NAME prend la priorité. |
| Variable d’environnement |
Descriptif |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Définissez cette variable sur la chaîne de connexion de votre ressource Application Insights. |
APPLICATIONINSIGHTS_STATSBEAT_DISABLED |
Définissez cette variable à true pour désactiver la collecte de métriques internes. |
OTEL_RESOURCE_ATTRIBUTES |
Paires clé-valeur à utiliser comme attributs de ressource. Pour plus d’informations sur les attributs de ressource, consultez la Spécification du Kit de développement logiciel (SDK) de ressources. |
|
OTEL_SERVICE_NAME | Définit la valeur de l’attribut service.name de ressource. Si service.name est également fourni dans OTEL_RESOURCE_ATTRIBUTES, OTEL_SERVICE_NAME prend la priorité. |
| Variable d’environnement |
Descriptif |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Définissez cette variable sur la chaîne de connexion de votre ressource Application Insights. |
Pour les applications natives Spring Boot, les configurations OpenTelemetry Java SDK sont disponibles.
Pour les applications natives Quarkus, consultez la documentation sur Quarkus OpenTelemetry.
Remarque
La communauté de Quarkus soutient et gère les extensions de Dockerus. Pour obtenir de l’aide, utilisez les canaux de support de la communauté Quarkus. Microsoft ne fournit pas de support technique pour cette intégration.
Éditer les chaînes de requête dans les URL
Pour masquer les chaînes de requête d’URL, désactivez la collecte de chaînes de requête. Ce paramètre est recommandé si vous appelez Azure stockage à l’aide d’un jeton SAP.
Lorsque vous utilisez le Azure. Monitor.OpenTelemetry.AspNetCore package de distribution, il inclut les bibliothèques ASP.NET Core et HttpClient Instrumentation.
Le package de distribution désactive par défaut la modification des chaînes de requête.
Pour modifier ce comportement, définissez une variable d’environnement sur true ou false.
Instrumentation ASP.NET Core : OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION la modification de chaîne de requête est désactivée par défaut. Pour l’activer, affectez la valeur false à cette variable d’environnement.
Instrumentation HttpClient : OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION Le masquage des chaînes de requête est désactivé par défaut. Pour l’activer, affectez la valeur false à cette variable d’environnement.
Lorsque vous utilisez le Azure. Monitor.OpenTelemetry.Exporter, vous devez inclure manuellement les bibliothèques ASP.NET Core ou HttpClient Instrumentation dans votre configuration OpenTelemetry.
La modification de chaînes de requête est activée par défaut dans ces bibliothèques d’instrumentation.
Pour modifier ce comportement, définissez une variable d’environnement sur true ou false.
ASP.NET Core Instrumentation : OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION Redaction de chaîne de requête est activée par défaut. Pour le désactiver, affectez la valeur true à cette variable d’environnement.
Instrumentation HttpClient : OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION Le masquage des chaînes de requête est activé par défaut. Pour le désactiver, affectez la valeur true à cette variable d’environnement.
Ajoutez ce qui suit au fichier config applicationinsights.json :
{
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "url.query",
"pattern": "^.*$",
"replace": "REDACTED",
"action": "mask"
}
]
},
{
"type": "attribute",
"actions": [
{
"key": "url.full",
"pattern": "[?].*$",
"replace": "?REDACTED",
"action": "mask"
}
]
}
]
}
}
La communauté OpenTelemetry travaille activement à la prise en charge de la rédaction.
Lorsque vous utilisez le package de distribution Azure Monitor OpenTelemetry, vous pouvez modifier des chaînes de requête en créant et en appliquant un processeur d’étendue à la configuration de distribution.
export class RedactQueryStringsSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const { SEMATTRS_HTTP_ROUTE, SEMATTRS_HTTP_TARGET, SEMATTRS_HTTP_URL } =
await import("@opentelemetry/semantic-conventions");
class RedactQueryStringProcessor {
forceFlush() { return Promise.resolve(); }
onStart() {}
shutdown() { return Promise.resolve(); }
onEnd(span: any) {
const route = String(span.attributes[SEMATTRS_HTTP_ROUTE] ?? "");
const url = String(span.attributes[SEMATTRS_HTTP_URL] ?? "");
const target = String(span.attributes[SEMATTRS_HTTP_TARGET] ?? "");
const strip = (s: string) => {
const i = s.indexOf("?");
return i === -1 ? s : s.substring(0, i);
};
if (route) span.attributes[SEMATTRS_HTTP_ROUTE] = strip(route);
if (url) span.attributes[SEMATTRS_HTTP_URL] = strip(url);
if (target) span.attributes[SEMATTRS_HTTP_TARGET] = strip(target);
}
}
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
spanProcessors: [new RedactQueryStringProcessor()],
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (query strings redacted)");
}
}
La communauté OpenTelemetry travaille activement à la prise en charge de la rédaction.
Intervalle d’exportation des métriques
Vous pouvez configurer l’intervalle d’exportation de métrique à l’aide de la variable d’environnement OTEL_METRIC_EXPORT_INTERVAL .
OTEL_METRIC_EXPORT_INTERVAL=60000
La valeur par défaut est 60000 millisecondes (60 secondes). Ce paramètre contrôle la fréquence à laquelle le Kit de développement logiciel (SDK) OpenTelemetry exporte les métriques.
Conseil
Azure Monitor Metrics et Azure Monitor Workspace ingèrent des métriques personnalisées à un intervalle fixe de 60 secondes. Les métriques envoyées plus fréquemment sont mises en mémoire tampon et traitées une fois toutes les 60 secondes. Log Analytics enregistre les métriques à l’intervalle qu’elles sont envoyées, ce qui peut augmenter les coûts à des intervalles plus courts et retarder la visibilité à plus longs.
Pour référence, consultez les spécifications OpenTelemetry suivantes :
Résolution des problèmes, commentaires et support
Conseil
Les sections suivantes sont disponibles dans tous les articles de distribution OpenTelemetry.
Résolution des problèmes
Commentaires sur OpenTelemetry
Pour fournir des commentaires :
Support
Sélectionnez un onglet correspondant à la langue de votre choix pour découvrir les options de support.
- Pour les problèmes de support Azure, ouvrez un ticket de support Azure.
- Pour les problèmes OpenTelemetry, contactez directement la communauté OpenTelemetry.
- Pour obtenir la liste des problèmes ouverts liés aux applications natives Spring Boot, consultez la page GitHub Problèmes.
- Pour obtenir la liste des problèmes ouverts liés aux applications natives Quarkus, consultez la page des problèmes GitHub.
Remarque
La communauté de Quarkus soutient et gère les extensions de Dockerus. Pour obtenir de l’aide, utilisez les canaux de support de la communauté Quarkus. Microsoft ne fournit pas de support technique pour cette intégration.
Étapes suivantes