";let n=document.getElementById("TableOfContents");n&&(n.innerHTML=e)}rerender(){this.renderFilterMenu(),this.renderPageContent(),this.populateRightNav(),this.runHooks("afterRerender")}renderPageContent(){let e={};Object.keys(this.ifFunctionsByRef).forEach(t=>{let s=this.ifFunctionsByRef[t],o=s.value,n=(0,h.reresolveFunctionNode)(s,{variables:this.selectedValsByTraitId});this.ifFunctionsByRef[t]=n,o!==n.value&&(e[t]=n.value)});let t=document.getElementsByClassName("cdoc__toggleable");for(let n=0;n{this.fitCustomizationMenuToScreen()})}addDropdownEventListeners(){let e=document.getElementsByClassName("cdoc-dropdown");for(let t=0;t{let t=e.target;for(;!t.classList.contains("cdoc-dropdown")&&t.parentElement;)t=t.parentElement;let n=t.classList.toggle("cdoc-dropdown__expanded");t.setAttribute("aria-expanded",n.toString())});document.addEventListener("keydown",e=>{if(e.key==="Enter"){let t=e.target;t.classList.contains("cdoc-filter__option")&&t.click()}}),document.addEventListener("click",t=>{for(let n=0;nthis.handleFilterSelectionChange(e));this.addDropdownEventListeners()}locateFilterSelectorEl(){let e=document.getElementById("cdoc-selector");return!!e&&(this.filterSelectorEl=e,!0)}applyFilterSelectionOverrides(){let s=Object.keys(this.selectedValsByTraitId),e=!1,t=this.browserStorage.getTraitVals();Object.keys(t).forEach(n=>{s.includes(n)&&this.selectedValsByTraitId[n]!==t[n]&&(this.selectedValsByTraitId[n]=t[n],e=!0)});let n=(0,j.getTraitValsFromUrl)({url:new URL(window.location.href),traitIds:s});return Object.keys(n).forEach(t=>{this.selectedValsByTraitId[t]!==n[t]&&(this.selectedValsByTraitId[t]=n[t],e=!0)}),e}updateEditButton(){let t=document.getElementsByClassName("toc-edit-btn")[0];if(!t)return;let e=t.getElementsByTagName("a")[0];e&&(e.href=e.href.replace(/\.md\/$/,".mdoc.md/"))}revealPage(){this.runHooks("beforeReveal"),this.filterSelectorEl&&(this.filterSelectorEl.style.position="sticky",this.filterSelectorEl.style.backgroundColor="white",this.filterSelectorEl.style.paddingTop="10px",this.filterSelectorEl.style.visibility="visible",this.filterSelectorEl.style.zIndex="1000");let e=document.getElementById("cdoc-content");e&&(e.style.visibility="visible"),this.runHooks("afterReveal")}renderFilterMenu(){if(!this.filterSelectorEl||!this.filtersManifest)throw new Error("Cannot render filter selector without filtersManifest and filterSelectorEl");let e=(0,l.resolveFilters)({filtersManifest:this.filtersManifest,valsByTraitId:this.selectedValsByTraitId});Object.keys(e).forEach(t=>{let n=e[t];this.selectedValsByTraitId[t]=n.currentValue});let t=(0,y.buildCustomizationMenuUi)(e);this.filterSelectorEl.innerHTML=t,this.fitCustomizationMenuToScreen(),this.addFilterSelectorEventListeners()}fitCustomizationMenuToScreen(){let e=document.getElementById(g);if(!e)return;let s=e.classList.contains(n),t=document.getElementById(v);if(!t)throw new Error("Dropdown menu not found");let o=document.getElementById(b);if(!o)throw new Error("Menu wrapper not found");let i=e.scrollWidth>o.clientWidth;!s&&i?(e.classList.add(n),t.classList.remove(n)):s&&!i&&(e.classList.remove(n),t.classList.add(n))}get cdocsState(){return{selectedValsByTraitId:this.selectedValsByTraitId,ifFunctionsByRef:this.ifFunctionsByRef,filtersManifest:this.filtersManifest,browserStorage:this.browserStorage,filterSelectorEl:this.filterSelectorEl}}};e.ClientFiltersManager=r,t=r,s={value:void 0}}),y=e(e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=j();window.clientFiltersManager=t.ClientFiltersManager.instance}),y()})()Premiers pas avec OpenTelemetry chez Datadog
Consultez "Comprendre OpenTelemetry" dans le centre d'apprentissage
Apprenez les bases d'OpenTelemetry, y compris ses capacités, ses avantages, ses composants clés et la façon dont OTel et Datadog fonctionnent ensemble.
OpenTelemetry est un framework open source d’observabilité qui fournit aux équipes IT des protocoles et des outils standardisés pour collecter et router les données d’observabilité issues des applications logicielles. OpenTelemetry propose un format cohérent pour L'instrumentation est le processus consistant à ajouter du code à votre application pour capturer et transmettre à Datadog des données d'observabilité comme des traces, des métriques et des logs., la génération, la collecte et l’export des données d’observabilité applicatives (à savoir les métriques, les logs et les traces) vers des plateformes de monitoring pour analyse et visualisation.
Ce guide explique comment configurer un exemple d’application OpenTelemetry pour envoyer des données d’observabilité à Datadog à l’aide du SDK OpenTelemetry, du collector OpenTelemetry et de Datadog Exporter. Il montre également comment explorer ces données dans l’interface de Datadog.
Configurez votre clé d’API Datadog :
a. Trouvez ou créez votre clé d’API Datadog.
b. Exportez votre clé d’API Datadog vers une variable d’environnement :
exportDD_API_KEY=<Your API Key>
Obtenez l’exemple d’application Calendar.
a. Clonez le dépôt opentelemetry-examples sur votre appareil :
(Facultatif) Utilisez Linux pour envoyer des métriques d’infrastructure.
L’application Calendar utilise les outils OpenTelemetry pour générer et collecter des métriques, des journaux et des traces. Au cours des étapes suivantes, vous découvrirez comme,t obtenir ces données d’observabilité dans Datadog.
Instrumenter l’application
L’exemple d’application Calendar est déjà partiellement instrumenté :
Accédez au fichier principal CalendarService.java situé à l’adresse suivante : ./src/main/java/com/otel/service/CalendarService.java.
Le code suivant instrumente getDate() à l’aide des annotations et de l’API OpenTelemetry :
L’exportateur Datadog envoie les données collectées par le récepteur OTLP au backend Datadog.
Accédez au fichier otelcol-config.yaml.
Les lignes suivantes configurent l’exportateur Datadog pour qu’il envoie les données d’observabilité à Datadog :
otelcol-config.yaml
exporters:datadog:traces:compute_stats_by_span_kind:truetrace_buffer:500hostname:"otelcol-docker"api:key:${DD_API_KEY}site:datadoghq.comconnectors:datadog/connector:traces:compute_stats_by_span_kind:trueservice:pipelines:metrics:receivers:[otlp, datadog/connector]# <- update this lineexporters:[datadog]traces:exporters:[datadog, datadog/connector]logs:exporters:[datadog]
Définissez exporters.datadog.api.site comme étant votre site Datadog. Sinon, la valeur par défaut est US1.
Cette configuration permet à l’exportateur Datadog d’envoyer des métriques d’exécution, des traces et des logs à Datadog. Toutefois, l’envoi des métriques d’infrastructure nécessite une configuration supplémentaire.
Collector OpenTelemetry
Dans cet exemple, configurez votre collector OpenTelemetry pour qu’il envoie des métriques d’infrastructure.
Pour envoyer des métriques d'infrastructure depuis le collector OpenTelemetry vers Datadog, vous devez utiliser Linux. Il s'agit d'une limitation du récepteur Docker Stats.
Pour collecter des métriques de conteneur, configurez le récepteur Docker Stats dans votre exportateur Datadog :
Ajoutez un bloc docker_stats à la section receivers de otel-config.yaml :
otelcol-config.yaml
receivers:otlp:protocols:grpc:endpoint:0.0.0.0:4317http:endpoint:0.0.0.0:4318# ajoutez le bloc suivantdocker_stats:endpoint:unix:///var/run/docker.sock# default; if this is not the Docker socket path, update to the correct pathmetrics:container.network.io.usage.rx_packets:enabled:truecontainer.network.io.usage.tx_packets:enabled:truecontainer.cpu.usage.system:enabled:truecontainer.memory.rss:enabled:truecontainer.blockio.io_serviced_recursive:enabled:truecontainer.uptime:enabled:truecontainer.memory.hierarchical_memory_limit:enabled:true
Modifiez service.pipelines.metrics.receivers pour inclure docker_stats :
otelcol-config.yaml
service:pipelines:metrics:receivers:[otlp, datadog/connector, docker_stats]# <- modifiez cette ligne
Cette configuration permet à l’application Calendar d’envoyer des données sur les conteneurs à Datadog pour que vous puissiez les explorer dans Datadog.
Envoyer des données d’observabilité avec OTLP
L’application Calendar utilise l’exportateur de logs OpenTelemetry dans sa configuration Logback pour envoyer des logs avec le composant de traitement OpenTelemetry (OTLP).
Accédez au fichier de configuration XML Logback de l’application Calendar, situé dans /src/main/resources/logback.xml.
Les lignes suivantes définissent l’appender OpenTelemetry :
De plus, des variables d’environnement configurent l’environnement OpenTelemetry pour exporter les logs, les métriques et les traces :
Accédez au fichier Docker Compose de l’application Calendar situé dans ./deploys/docker/docker-compose-otelcol.yml.
La configuration OTEL_EXPORTER_OTLP_ENDPOINT=http://otelcol:4317 permet d’envoyer les métriques, les traces et les logs via OTLP.
Corrélation des données d’observabilité
Le tagging de service unifié relie les données d’observabilité dans Datadog, ce qui vous permet de naviguer entre les métriques, les traces et les logs à l’aide d’étiquettes cohérentes.
L’application Calendar est déjà configurée avec le tagging de service unifié :
Accédez au fichier Docker Compose de l’application Calendar à l’emplacement ./deploys/docker/docker-compose-otelcol.yml.
Les lignes suivantes activent la corrélation entre les traces applicatives et les autres données d’observabilité :
Pour commencer à générer et transmettre des données d’observabilité à Datadog, vous devez exécuter l’application Calendar avec le SDK OpenTelemetry :
Exécutez l’application à partir du dossier calendar/ :
docker compose -f deploys/docker/docker-compose-otelcol.yml up
Cette commande crée un conteneur Docker avec le collector OpenTelemetry et le service Calendar.
Pour vérifier que l’application Calendar fonctionne correctement, exécutez la commande suivante depuis une autre fenêtre de terminal :
curl localhost:9090/calendar
Vérifiez que vous recevez une réponse du type :
{"date":"2022-12-30"}
Exécutez la commande curl plusieurs fois pour vous assurer qu’au moins une trace est exportée vers le backend Datadog.
L'application Calendar utilise le processeur d'échantillonnage probabiliste, ce qui fait que seulement 30 % des traces transmises par l'application atteignent le backend cible.
Chaque appel à l’application Calendar entraîne la transmission de métriques, de traces et de logs vers le collector OpenTelemetry, puis vers l’exportateur Datadog, et enfin vers le backend Datadog.
Explorer des données d’observabilité dans Datadog
Utilisez l’interface Datadog pour explorer les données d’observabilité de l’application Calendar.
Remarque : l’apparition de vos données de trace peut prendre quelques minutes.
Métriques de runtime et d’infrastructure
Affichez les métriques de runtime et d’infrastructure pour visualiser, surveiller et mesurer les performances de vos applications, hosts, conteneurs et processus.
Accédez à APM > Software Catalog.
Survolez le service calendar-otel et sélectionnez Full Page.
Faites défiler l’écran jusqu’au panneau inférieur et sélectionnez :
Infrastructure Metrics pour consulter les métriques de vos conteneurs Docker, comme l’utilisation du processeur et de la mémoire.
JVM Metrics pour consulter les métriques de runtime, comme l’utilisation du tas et le nombre de threads.
Logs
Consultez les logs pour surveiller et diagnostiquer les opérations de l’application et du système.
Accédez à Logs.
Si d’autres logs figurent dans la liste, ajoutez @service.name:calendar-otel dans le champ Search for pour n’afficher que les logs de l’application Calendar.
Sélectionnez un log dans la liste pour afficher plus de détails.
Traces
Affichez les traces et les spans pour observer l’état et les performances des requêtes traitées par votre application.
Accédez à APM > Traces.
Dans le menu de filtrage, trouvez la section Service et sélectionnez la facette calendar-otel pour afficher toutes les traces calendar-otel :
Pour commencer, cliquez sur une trace pour ouvrir le panneau latéral de trace et afficher plus de détails sur la trace et ses spans. Par exemple, le Flame Graph indique le temps passé dans chaque composant du chemin d’exécution de Calendar :
Vous pouvez sélectionner Infrastructure, Metrics ou Logs dans le panneau inférieur afin de corréler la trace avec d’autres données d’observabilité.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: