Publié le 29/05/2023
Par Alexandre CASTRO
Aujourd'hui nous allons aborder OpenTelemetry. Vous allez me dire que ça existe depuis longtemps et effectivement vous aurez raison.
La différence est qu'ici nous allons connecter OpenTelemetry à Azure Monitor car Azure a sorti une preview le 18/05.
Pour ceux qui ne connaissent pas, OpenTelemetry est une collection d'outils, d'API et de SDK. Utilisez-le pour instrumenter, générer, collecter et exporter des données de télémétrie (métriques, journaux et traces) pour vous aider à analyser les performances et le comportement de votre logiciel.
Vous pouvez en apprendre plus sur OpenTelemetry ici : https://opentelemetry.io/
Nous allons donc expérimenter OpenTelemetry sur Azure.
Pour cela nous allons créer un projet ASP .NET Core WebApi :
🚨🚨🚨🚨 Il vous faudra une souscription Azure active pour finir le tutoriel comme vous vous en doutez 🚨🚨🚨🚨
Et le setup par défaut :
Maintenant que notre solution est créé, nous allons rajouter notre package soit via la CLI :
- dotnet add package --prerelease Azure.Monitor.OpenTelemetry.AspNetCore
Soit via le gestionnaire de packages Visual Studio :
Et n'oubliez pas de cocher la case concernant les versions preview sinon vous ne verrez pas le package.
Une fois que le package est installé, il vous suffira de rajouter dans votre fichier "Program.cs" la ligne suivante :
builder.Services.AddOpenTelemetry().UseAzureMonitor();
C'est ici que nous voyons la force de cette préversion car avec une ligne de code, nos logs, metrics et traces sont exportées automatiquement !
Nous allons maintenant créer un application Insights de manière à pouvoir déverser nos logs, traces et metrics.
Pour commencer recherchez le service comme ci-dessous et lancez la création :
Je vous conseille de créer une ressource Application Insights "Classic" car sinon cela va vous obliger à créer une ressource Log Analytics Workspace.
Une fois le service créé, récupérez votre chaine de connexion ici :
Copiez la et nous allons la rajouter à notre application ASP .Net Core.
Il existe 3 façon de le faire :
- Soit directement dans votre fichier "Program.cs" en rajoutant des options :
builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
options.ConnectionString = "InstrumentationKey=votre_chaine_de_connexion";
});
- Soit en définissant une variable d'envionnement :
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
- Soit dans votre fichier de configuration appsettings.json comme suit : (le nom des clés est très important car c'est comme ça que le package va récupérer votre chaine de connexion) :
{
"AzureMonitor": {
"ConnectionString": "<Your Connection String>"
}
}
Une fois que c'est fait, vous pouvez lancer votre application et faire des requêtes.
Si tout se passe bien, vous devriez voir apparaitre des données dans votre ressource Application Insights : (Cela peut prendre jusqu'à 5minutes pour arriver)
Nous avons mis en place avec une seul ligne de code, une solution qui exporte automatiquement des logs, métrics et traces.
Il est bien sur possible d'exporter des données personnalisées tout comme c'est deja le cas pour Application Insights.
Si vous souhaitez plus de détails sur OpenTelemetry sur Azure Monitor , je vous conseille les articles de Microsoft qui contiennent un peu plus de détails :
https://learn.microsoft.com/fr-fr/azure/azure-monitor/app/opentelemetry-enable?tabs=aspnetcore
Mon but était de vous montrer l'existence de cette préversion et de vous montrer comment elle peut vous faciliter la vie 😉
Le SDK .NET est encore moins fourni que le SDK Java 😥 mais j'espère que le retard sera vite rattrapé.
Have fun coding 😎