Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[SNOWCAMP25] L'observabilité dès le développeme...

[SNOWCAMP25] L'observabilité dès le développement: Maîtrisez vos applications Java en production avec OpenTelemetry

Imaginez, c'est vendredi après-midi et vous êtes impatient de profiter de votre week-end.

Soudain, vous recevez un ticket urgent d’un ingénieur ops : il y a un problème bloquant, votre application répond avec des erreurs 500 ! Impossible d’identifier l’origine, il manque cruellement d’informations contextuelles. C’est à vous de jouer avant la war room…
Après quelques heures, vous parvenez enfin à l'identifier, le reproduire et enfin le déboguer sur votre ordinateur.

Si vous avez l'habitude de faire face à de tels problèmes, cela signifie sûrement que vous avez négligé le développement d'une des fonctionnalités les plus importantes de votre application : l'observabilité !

Au cours de cet atelier, nous mettrons en place ces outils et des bonnes pratiques pour rendre une application Java plus fiable et prête pour la production.

Nous nous appuierons sur plusieurs outils open-source tels que la suite Grafana (Loki, Tempo, Grafana et Prometheus) et bien sûr OpenTelemetry.

Nous aurons ainsi un aperçu de la manière dont les développeurs peuvent faire des Ops leurs meilleurs amis !

Alexandre Touret

January 27, 2025
Tweet

More Decks by Alexandre Touret

Other Decks in Programming

Transcript

  1. 2024-06-10T10:44:54.444+02:00 ERROR 387865 --- [easypay-service] [o-auto-1-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for

    servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()" because "java.util.List.get(int).active" is null] with root cause java.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()" because "java.util.List.get(int).active" is null at com.worldline.easypay.payment.control.PosValidator.isActive(PosVali dator.java:34) at com.worldline.easypay.payment.control.PaymentService.process(Paymen tService.java:46)
  2. Alexandre TOURET Architecte logiciel @touret.info blog.touret.info alexandre-touret David PEQUEGNOT Ingénieur

    Performance @foxlegend blog.worldline.tech foxlegend Qui sommes-nous? 5
  3. We design payments technology that powers the growth of millions

    of businesses around the world. 7000+ engineers in over 40 countries Managing 43+ billion transactions per year €250M spent in R&D every year Handling 150+ payment methods #1 European payment processor
  4. Identifier les soucis dans les logs et les améliorer Remonter

    des métriques Mettre en place les traces Corréler le tout! Le déroulement
  5. L’application poses t e s poses an c ec s

    & card aut ori es t e pa ent custo er
  6. Logs, traces & métriques Logs Traces Métriques Ou est-ce que

    ça arrive? Quelque chose se passe ’ - q ’ nous arrive?
  7. Une plateforme observable poses t e s poses an c

    ec s & card aut ori es t e pa ent tores traces custo er
  8. Metrics poses t e s poses an c ec s

    & card aut ori es t e pa ent custo er
  9. Grafana poses an c ec s & card aut ori

    es t e pa ent tores traces tores Lo s
  10. Comment instrumenter mon programme ? 2 manières de faire Librairies

    • Plus rapide au démarrage • Indispensable pour le mode natif Agent • Fonctionne « out of the box » • Permet de décorréler le livrable fonctionnel d’un a ent • Offre plus de souplesse
  11. • Le manque de logs impacte la compréhension de l’application

    • Trop de logs impacte la performance Logs Benchmark from Sebastian Daschner: Logging Performance Comparison https://www.javacodegeeks.com/2022/07/logging-performance-comparison.html
  12. • Très utile pour comprendre l’état d’un système ou d’un

    processus • Mais… o Le nombre de métriques peut impacter les performances (ex. La mémoire) o Attention aux histogrammes, buc ets … o Attention à la cardinalité des labels Métriques Vert.X: Micrometer Metrics Performance https://vertx.io/blog/micrometer-metrics-performance/
  13. • Par défaut, on peut générer une trace pour chaque

    transaction • Mais… cela peut impacter les performances de votre application et de votre stockage ➢Utilisez un collecteur Traces 1201,51 1477,82371 1468,98875 0 200 400 600 800 1000 1200 1400 1600 100% DISABLED 0% RPS (29 spans/trace) 1471,708845 1478,591626 1478,69221 0 200 400 600 800 1000 1200 1400 1600 100% DIS. 0% RPS (7 spans/trace)
  14. Traces Head Sampling & Performance 1477,82371 1468,98875 1422,40019 1320,57735 1252,411

    1201,51 0 200 400 600 800 1000 1200 1400 1600 RPS - 29 spans/trace 549,89 553,13 571,25 615,37 648,82 676,22 0 100 200 300 400 500 600 700 800 Avg. Response Time (ms) – 29 spans / trace
  15. Traces Head Sampling & Resources Usage 0,00% 10,00% 20,00% 30,00%

    40,00% 50,00% 60,00% 70,00% 80,00% 90,00% 100,00% CPU% - 29 spans/trace 576,06 624,53 718,47 818,42 918,7 992,88 0 200 400 600 800 1000 1200 RSS (MB) - 29 spans/trace
  16. Don’t be a stran er! Follow & get in touch

    @foxlegend linkedin.com/in /davidpequegnot blog.worldline.tech @WorldlineTech Follow our tech team: Follow us: @touret_alex linkedin.com/in /atouret 30 |