Milan Jovanović
Milan Jovanović
  • Видео 549
  • Просмотров 9 073 731
How To Implement Distributed Tracing for Microservices With Jaeger
Join a community of 1000+ .NET developers: www.patreon.com/milanjovanovic
Master the Clean Architecture: bit.ly/3PupkOJ
The ultimate Modular Monolith blueprint: bit.ly/3SXlzSt
So you build a Microservices system, but how will you monitor what's happening inside?
This is where Observability comes in. Understanding how requests flow through your system is crucial for debugging and performance optimization. OpenTelemetry is an open-source observability framework that makes this possible. Combine this with a distributed tracing platform like Jaeger, and you will have an excellent observability system. In this video, I'll show you how to implement this step-by-step.
Check out my courses:
www.milanj...
Просмотров: 4 958

Видео

The Best Way To Implement Soft Deletes With EF Core (and why you shouldn't)
Просмотров 9 тыс.13 часов назад
Join a community of 1000 .NET developers: www.patreon.com/milanjovanovic Master the Clean Architecture: bit.ly/3PupkOJ The ultimate Modular Monolith blueprint: bit.ly/3SXlzSt To delete or not to delete, that is the question (pun intended). The traditional way to remove information in a database is through a "hard delete." A hard delete permanently erases a record from the database table. While ...
This Is What MassTransit Does to Your Message Broker | RabbitMQ
Просмотров 7 тыс.20 часов назад
Join a community of 1000 .NET developers: www.patreon.com/milanjovanovic Master the Clean Architecture: bit.ly/3PupkOJ The ultimate Modular Monolith blueprint: bit.ly/3SXlzSt How does MassTransit integrate with your message broker? In this video, I'll explain how MassTransit connects with RabbitMQ. We'll discuss exchanges, bindings, and queues. I'll also show you how to implement the producer-c...
Completely Get Rid of Exceptions Using This Technique
Просмотров 17 тыс.День назад
Get the source code for this video for FREE → the-dotnet-weekly.ck.page/rop Join a community of 1000 .NET developers: www.patreon.com/milanjovanovic Accelerate your Clean Architecture skills: bit.ly/3PupkOJ Master the Modular Monolith Architecture: bit.ly/3SXlzSt C# is an object-oriented language with many functional features built in. Functional programming is a fantastic paradigm that I belie...
Adding JWT Authentication in ASP.NET Core With Supabase Auth
Просмотров 6 тыс.14 дней назад
Adding JWT Authentication in ASP.NET Core With Supabase Auth
EF Core Migrations Deep Dive, Applying Migration, SQL Scripts
Просмотров 11 тыс.14 дней назад
EF Core Migrations Deep Dive, Applying Migration, SQL Scripts
Master Claims Transformation for Flexible JWT Auth in ASP.NET Core
Просмотров 10 тыс.21 день назад
Master Claims Transformation for Flexible JWT Auth in ASP.NET Core
Master the Fluent Builder Design Pattern in C#
Просмотров 23 тыс.21 день назад
Master the Fluent Builder Design Pattern in C#
What Is the Fastest Way To Do a Bulk Insert? Let’s Find Out
Просмотров 10 тыс.28 дней назад
What Is the Fastest Way To Do a Bulk Insert? Let’s Find Out
The Best Way to Implement Long Running Tasks in .NET - Hangfire, Blazor, SignalR
Просмотров 11 тыс.Месяц назад
The Best Way to Implement Long Running Tasks in .NET - Hangfire, Blazor, SignalR
How to design great Aggregate Roots in Domain-Driven Design
Просмотров 10 тыс.Месяц назад
How to design great Aggregate Roots in Domain-Driven Design
A practical introduction to OpenTelemetry for .NET developers (+ Aspire Dashboard)
Просмотров 10 тыс.Месяц назад
A practical introduction to OpenTelemetry for .NET developers ( Aspire Dashboard)
Data isolation for Modular Monoliths - DB Schemas, EF Core
Просмотров 7 тыс.Месяц назад
Data isolation for Modular Monoliths - DB Schemas, EF Core
Implementing the Transactional Outbox pattern with Hangfire
Просмотров 10 тыс.Месяц назад
Implementing the Transactional Outbox pattern with Hangfire
Creating a State Machine Saga With MassTransit (Orchestrated Saga)
Просмотров 9 тыс.Месяц назад
Creating a State Machine Saga With MassTransit (Orchestrated Saga)
Authentication made easy with ASP.NET Core Identity in .NET 8
Просмотров 31 тыс.Месяц назад
Authentication made easy with ASP.NET Core Identity in .NET 8
Simple File API Using Azure Blob Storage (running locally)
Просмотров 7 тыс.Месяц назад
Simple File API Using Azure Blob Storage (running locally)
Implementing Modular Architecture With Sync Communication
Просмотров 7 тыс.2 месяца назад
Implementing Modular Architecture With Sync Communication
The Beginner's Guide to Clean Architecture
Просмотров 19 тыс.2 месяца назад
The Beginner's Guide to Clean Architecture
Modular Monolith - How To Create Your Modules
Просмотров 11 тыс.2 месяца назад
Modular Monolith - How To Create Your Modules
Automatically Register Minimal APIs in ASP.NET Core | REPR Pattern
Просмотров 12 тыс.2 месяца назад
Automatically Register Minimal APIs in ASP.NET Core | REPR Pattern
I made $100,000+ freelancing on Upwork. This is how
Просмотров 21 тыс.2 месяца назад
I made $100,000 freelancing on Upwork. This is how
I tried coding with Amazon CodeWhisperer... This is what happened
Просмотров 37 тыс.2 месяца назад
I tried coding with Amazon CodeWhisperer... This is what happened
Bulletproof Your Software Architecture With ArchUnitNET
Просмотров 8 тыс.2 месяца назад
Bulletproof Your Software Architecture With ArchUnitNET
The Best .NET REST API Client You Didn't Know About
Просмотров 20 тыс.2 месяца назад
The Best .NET REST API Client You Didn't Know About
Lightweight In-Memory Message Bus Using .NET Channels
Просмотров 10 тыс.2 месяца назад
Lightweight In-Memory Message Bus Using .NET Channels
Amazon Cognito Token Authentication in ASP.NET Core With JWT
Просмотров 42 тыс.3 месяца назад
Amazon Cognito Token Authentication in ASP.NET Core With JWT
Clean Architecture: Understand the Presentation Layer's Purpose
Просмотров 7 тыс.3 месяца назад
Clean Architecture: Understand the Presentation Layer's Purpose
The Best Way to Run Integration Tests in Your CI/CD Pipeline
Просмотров 10 тыс.3 месяца назад
The Best Way to Run Integration Tests in Your CI/CD Pipeline
The Right Way To Use Scoped Services From Singletons in ASP.NET Core
Просмотров 9 тыс.3 месяца назад
The Right Way To Use Scoped Services From Singletons in ASP.NET Core

Комментарии

  • @rcarubbi
    @rcarubbi 7 часов назад

    why not create the ValueObjects as Records?

  • @timur2887
    @timur2887 9 часов назад

    So .Net Aspire can't kill docker-compose and open telemetry?))

  • @CredsLife
    @CredsLife 10 часов назад

    Awesome!! Love to see the channel! ❤

  • @abdushakoor0099
    @abdushakoor0099 13 часов назад

    two interesting things i learned from your videos. 1. Vertical Slice architecture 2. Railway-oriented programming

  • @panayotivanov8607
    @panayotivanov8607 13 часов назад

    Very nice! Microsoft strikes again

  • @aliensoul7600
    @aliensoul7600 14 часов назад

    Full video please

  • @ahmedhafiz2419
    @ahmedhafiz2419 15 часов назад

    So no other manual configs reauired with this?

  • @AslamNazeerShaikh
    @AslamNazeerShaikh 16 часов назад

    Edit: Nice video, learned a lot new topics ❤ By the way as of now I'm using "apigee" in production for api Tracing 😮

  • @hamlet.h.hakobyan
    @hamlet.h.hakobyan 17 часов назад

    What is the benefit of integration event that contains only the Id of the aggregate since it notifies other parts of distributed system. And what is implication for integration event that it should contain only primitive values? For me it is enough that integration event is serializable to some data for that can be transferred to the other parts of the system.

  • @vitaliishmidt3704
    @vitaliishmidt3704 17 часов назад

    So there is no longer Polly needed?

    • @MilanJovanovicTech
      @MilanJovanovicTech 17 часов назад

      Surprise, surprise - this uses Polly under the hood :) Even though it's a MSFT library

    • @srinivaspitani1326
      @srinivaspitani1326 15 часов назад

      😂

    • @vitaliishmidt3704
      @vitaliishmidt3704 15 часов назад

      @@MilanJovanovicTech yeah, I get this, but I mean, should I use Polly explicitly or that approach with built-in functionality?

    • @nikitaromanovsky3767
      @nikitaromanovsky3767 11 часов назад

      ​@@vitaliishmidt3704 yeah, Polly is actually usefull because you can you use it for a lot of different goals, for example for your file system handling

    • @Paul-uo9sv
      @Paul-uo9sv 8 часов назад

      ​@@vitaliishmidt3704 good question

  • @agentsmith2189
    @agentsmith2189 18 часов назад

    ty for the subtitles <3

  • @bekirdelikucuk4060
    @bekirdelikucuk4060 20 часов назад

    Hi Milan, I need help with something. There is a web api project written using .net 8 cqrs mediatr pattern. We want to show notifications to users using Masstransit and rabbitmq. Don't get me wrong, I don't want push notifications. For example, a user receives an approval request, we will send it to the queue via rabbitmq, the react side will also listen and the icon will light up in the notification section like toastr, indicating that you have a notification. The problem is, how do we get it on a per-person basis? If we put it in a single queue, it will be visible to everyone. Whatever role he/she is assigned to, the men in that role should also appear in the notification. The queue should form accordingly. What solution would you suggest in this scenario?

  • @user-vr1mw7cc5w
    @user-vr1mw7cc5w 22 часа назад

    Hello Milan! What can you say about the comparison between ELK and Jaeger in terms of distributed tracing? I know that there is Elastic APM, and it's possible to see database queries there (I believe that it's important if we talk about tracing). Additionally, in ELK, we can somehow achieve distributed logging.

  • @AbdusSalamAzad
    @AbdusSalamAzad 22 часа назад

    That is a great and simple explanation. Thanks @Milan

  • @evgeniilewicki5874
    @evgeniilewicki5874 День назад

    How nice it is to watch when a person has good diction and understanding of the issue. He speaks competently. Thank you very much for your work.

  • @sanampakuwal
    @sanampakuwal День назад

    Cool video, btw why did you use MSSQL for this?

    • @MilanJovanovicTech
      @MilanJovanovicTech День назад

      I switch from MSSQL and PostgreSQL occasionally. No reason other than using something different.

  • @FrequencyModulator
    @FrequencyModulator День назад

    For example I don't want to allow users to register, is there a way to hide/remove this endpoint?

  • @Fafix666
    @Fafix666 День назад

    The issue I see with this is that with granular bounded contexts, most of the entities will be shared between features anyway.

    • @MilanJovanovicTech
      @MilanJovanovicTech День назад

      True, you could organize by aggregates in that case

    • @Fafix666
      @Fafix666 День назад

      @@MilanJovanovicTech That's true, I usually do it in a technical folder tho' - Entities/Aggregate1, Aggregate2 etc

  • @piotrc966
    @piotrc966 День назад

    How does the Jaeger know that the message, after passing through RabbitMq, belongs to the same process?

    • @MilanJovanovicTech
      @MilanJovanovicTech День назад

      Based on the data provided by OpenTelemetry. All these libraries integrate with OpenTelemetry. It uses unique IDs that are propagated between processes to associate spans into a distributed trace.

    • @piotrc966
      @piotrc966 20 часов назад

      @@MilanJovanovicTech I was surprised that there is no single ID propagating through the whole process. Since there are several different IDs then Jaeger must remember them and search the IDs database to combine them eg: (service.instance.id-->messaging.masstransit.message_id-->service.instance.id). Am I thinking right? :)

    • @MilanJovanovicTech
      @MilanJovanovicTech 20 часов назад

      @@piotrc966 the correct term is Trace Id. You can get that value from Activity.Current.TraceIdentifier (or something like that) RabbitMQ doesn't do that. It's MassTransit that includes the Trace ID in the operation. And also when consuming the message.

    • @piotrc966
      @piotrc966 20 часов назад

      @@MilanJovanovicTech But just in Jaeger UI you don't see a single TraceId, or anything similar that would be constant throughout the process - hence the problem :). There are many different ID's. Hence my guess that Jaeger on the database of IDs it searches for correlation.

    • @MilanJovanovicTech
      @MilanJovanovicTech 20 часов назад

      @@piotrc966 Check the URL: prnt.sc/JhoMFRm43hWu

  • @andreasdrake
    @andreasdrake День назад

    Tack!

    • @MilanJovanovicTech
      @MilanJovanovicTech День назад

      Tack själv! (hopefully that's a correct translation 😅)

  • @vladimirfilipovic5845
    @vladimirfilipovic5845 День назад

    Milan , thank you for great video. I'm curious to know, are you currently doing any freelancing or is content creation your only source of income? Also would you say that freelancing takes more or less time than regular 9-5 ?

    • @MilanJovanovicTech
      @MilanJovanovicTech День назад

      Slowly stopped freelancing when I went full time into the content business. While freelancing, I could make my monthly wage as a senior engineer in Serbia in half the work hours. The tough part is finding work. Lots of competition these days.

  • @rafazieba9982
    @rafazieba9982 День назад

    When you do this you are no longer guaranteed that you'll get a consistent result. If something has changed that data between your two calls you'll get weird results.

    • @MilanJovanovicTech
      @MilanJovanovicTech День назад

      What's the chance for that happening? And you can solve it with a transaction or FOR UPDATE / WITH UPDLOCK

    • @rafazieba9982
      @rafazieba9982 22 часа назад

      @@MilanJovanovicTech if used incorrectly transaction isolation levels and locks like this can lead to deadlocks or simply not do want you want. It is a much more complex subject. Worth of 20 of such videos.

  • @rajkumarks4443
    @rajkumarks4443 День назад

    What is the difference between Azure app insights and jaeger

    • @MilanJovanovicTech
      @MilanJovanovicTech День назад

      Cloud offering vs self-hosted tool. Jaeger requires manual deployment and setup.

  • @risenn9677
    @risenn9677 День назад

    would you use tracing in monolith or is it an overkill?

    • @MilanJovanovicTech
      @MilanJovanovicTech День назад

      Considering how easy it is to setup, it can be worth it. The hosting costs shouldn't be too expensive either. One drawback could be reduced performance, as tracing does have a negative impact (although you can measure if it's drastic or not). All in all, yes - if I want more visibility into the system. Another thing to consider: is logging enough? Maybe, that's all I need.

  • @omidpurdarbani
    @omidpurdarbani День назад

    very helpful, thanks Milan🔥🔥

  • @aj.arunkumar
    @aj.arunkumar День назад

    Hi MIlan... Im a great fan of your videos... i have a question.. do we really need mediatR in this case ? couldnt we instantiate the handler directly in the endpoint because the endpoint does only one thing anyway...

    • @MilanJovanovicTech
      @MilanJovanovicTech День назад

      We don't - but it makes things easier when adding cross-cutting concerns. I actually recorded a simplified VSA video, which will release in about a week or two.

  • @gouravmajee9913
    @gouravmajee9913 День назад

    thanks a lot

  • @Fernan2Dominican
    @Fernan2Dominican День назад

    Awesome!

  • @ZoneInOn
    @ZoneInOn День назад

    Fantastic video Milan

  • @alexxx8338
    @alexxx8338 День назад

    Found problems imlementing this on my aggregate with nested soft delete entities collections in it. Quer filters are not going to solve my problems in this case

  • @mdzakariamasud8326
    @mdzakariamasud8326 День назад

    Could you please provide more information about data persistence in Jaeger?

    • @MilanJovanovicTech
      @MilanJovanovicTech День назад

      This uses an in-memory storage by default. But you can plug in Cassandra or ElasticSearch. Check the docs for more info: www.jaegertracing.io/docs/1.58/deployment/#span-storage-backends

  • @satyayuga0
    @satyayuga0 День назад

    Why is there a Bavarian gopher in the thumbnail?

  • @cleitoncarlospereira2006
    @cleitoncarlospereira2006 День назад

    Excellent content! What theme do you use in VS so that it has these font colors?

  • @antonmartyniuk
    @antonmartyniuk День назад

    Jaeger is a very great tool and easy to start with. However in production it has a significant downside - it's UI doesn't have any authentication. So you need to to play around with reverse proxies and external auth tools to hide jaeger UI behind something, like keycloak + oauth proxy + your main reverse proxy. It's a pain to setup this. While I find that from release of 2024.1 Seq does also support tracing, which in my opinion is more convenient to view together with logs in one place. This is what I personally use. Seq provides Auth and ApiKeys out of the box, which is super easy to setup. And OpenTelemetry exporter easily sends tracing data to Seq using gRPC endpoint

    • @MilanJovanovicTech
      @MilanJovanovicTech День назад

      So far, I didn't have success with integrating Seq tracing with OpenTelemetry and .NET. Maybe we'll have a chat about that 😁

  • @MilanJovanovicTech
    @MilanJovanovicTech День назад

    The best architecture before moving to Microservices? Start with Modular Monoliths ➡ bit.ly/3SXlzSt