Introduction
Diginsight telemetry is a set .Net packages that that provides automatic observability for dotnet applications.
In particular, the full application flow is made available to local text based streams such as traditional file logs, the Console Log or the Azure Streaming Log and also to remote analysis tools such as Azure Monitor and Prometheus/Grafana.
Diginsight allows observability of the full application lifecycle, including static methods, injection sequences and the application startup and shutdown sequences where configuration problems and much complexity are often hidden.
Diginsight telemetry is produced by standard ILogger<> and System.Diagnostic activity classes so it integrates (without replacing) other logging systems telemetry. Also, diginsight telemetry is fully integrated with Opentelemetry and the W3C Trace Context Specification so traceids are preserved across process invocations of a distributed system.
Diginsight telemetry targets all dotnet framework versions starting from netstandard2.0.
Samples are available on telemetry.samples repository to demonstrate use of telemetry on .net 4.8 up to [blazor webassembly,].net6 and .net8+ assemblies.
> Diginsight telemetry can capture automatically database queries, outgoing requests as well as missing configuration data.
This makes it is an invaluable companion for troubleshooting problems related to missing or invalid data.
> Diginsight Telemetry is fully dynamic: minimal data can be enabled by default, on live environments.
Full execution flow observability can be enabled on demand for specific components
or specific requests
.
Diginsight Telemetry fully dynamic and automatic nature can be a strong base for automatic problems analysis and resolution.
Additional Information
Diginsight telemetry is readable, consistent and efficient:
- readable: telemetry is easily readable on
local troubleshooting tools
,live server consoles
andremote analysis tools
such as the Azure monitor. The generated application flow is consistent with application code so that problems understanding is much simplified.- consistent: the application flow is rendered consistently on
local troubleshooting tools
, where maximun flow detail is available, and to theremote analysis tools
such as the Azure monitor, where metrics and data from past executions can be easily compared.- efficient: application flow is generated with fully optimized techniques (such as dynamic compilation). Also, the full application flow observability can be enabled dynamically and only on the specific executions that are under analysis. this ensures that diginsight can be leveraged with no pratical impact on application performance.
The image below shows the text based stream associated to to a Web API call.
The following image shows the same call on the Azure Monitor Transaction Detail where the call structure is shown as a hierarchy of activities (also called spans) and trace details: Please, note that the transaction involves two services invocations.
The first image reports the detailed log stream for first web application call (PlantsController.GetPlantsAsync
).
The latter image shows the full transaction detail on Azure Monitor.
Both invocations are correlated by the same traceId so, for every transaction, the: the full flow is visible across all services invocations.
Full observability on live environments can be supported with dynamic logging.
Live environments logging level is normally limited to Warning or Information to avoid any cost and performance impact from the telemetry produced by applications.
With dynamic logging Log level can be raied to debug or trace for a single call, for example, by means of the Log-Level http headers.
The image below shows a call to a live environment where the log level is set to Debug or Trace for 2 categories:
The image below shows the live environment App Service console where our call is traced with full datail, while other calls are being processed with limited Log level.
Performance information gathered by diginsight can be analyzed in the form of metrics.
The following image shows the Azure Monitor Metrics dashboard where method invocations and latencies can be analized in value and frequency:
Intelligent sampling, dynamic compilation, automatic truncation and other strategies are used to maximize application efficiency and minimize telemetry cost
For these reasons Local analysis and analysis on the remote tools can be supported without compromises on performance and without compromises on cost of telemetry in test and production environments.
HowTo: Use diginsight telemetry with no impact on Application performance an telemetry cost
Explores how diginsight telemetry can be used without impact on application performance and telemetry cost.
Learn more
The following articles provide easy steps to integrate diginsight into our code, how to configure telemetry for the local text based strams and how to configure telemetry for the remote analysis tools.
Also, details are provided to use its relevant features such as Dynamic configuration and Dynamic Logging.
Example code used in the articles is also available in the telemetry.samples repository.
- Getting Started: explores basic steps we can follow to integrate diginsight telemetry
- Example analysis: explores how diginsight can be used to analyze applications and troubleshoot issues.
- Observability Concepts: Explores basic concepts for application observability and Opentelemetry.
- HowTo: configure diginsight telemetry to the local text based streams
Explores how we configure diginsight telemetry to the local analysis tools.- HowTo: use dynamic logging to manage loglevel dynamically, at runtime
Explores how we can troubleshoot applications by means of dynamic logging.- HowTo: use dynamic configuration to manage dynamic options, at runtime
Explores how we can troubleshoot applications by means of dynamic configuration.
4- HowTo: configure diginsight telemetry to the remote tools
Explores how we configure diginsight telemetry to the remote analysis tools.- HowTo: Use diginsight telemetry with no impact on Application performance an telemetry cost
Explores diginsight telemetry can be used without impact on application performance and telemetry cost.
Advanced topics:
- HowTo: customize entities rendering on diginsight log streams: Explores how diginsight entities rendereing can be fully customized.
- HowTo: customize metrics sent to the remote tools: Explores how custom metrics sent to the remote tools can be integrated and fully customized with tags.
- HowTo: customize diginsight log streams row content: Explores how diginsight row content can be fully customized.
- HowTo: troubleshoot the startup sequence: Explores how full observability can be enabled on static methods and the startup sequence.
- HowTo: use class aware configurations to support comonent level or class level configurations: Explores how class aware configurations can be used to implement feature flags or configurations that can be enabled with class level granularity.
Team and contributors:
- About: Diginsight is a team of friends (engineers, scientists…) with passion for technology, experimenting ideas and excellence.
Summary
Diginsight telemetry is a comprehensive suite of .NET packages designed to provide automatic observability for .NET applications. It enables developers to gain deep insights into the full application lifecycle, from startup to shutdown, including static methods and injection sequences.
By leveraging standard ILogger<>
and System.Diagnostics
activity classes, Diginsight telemetry integrates seamlessly with existing logging systems and supports OpenTelemetry and the W3C Trace Context Specification.
Key features of Diginsight telemetry include: - Automatic Observability: Capture detailed telemetry data without manual instrumentation. - Full Lifecycle Coverage: Monitor application behavior from startup to shutdown. - Seamless Integration: Works with existing logging systems and supports OpenTelemetry. - Dynamic Configuration: Enable full observability on-demand for specific components or requests. - Performance Optimization: Uses intelligent sampling, dynamic compilation, and other strategies to minimize performance impact and telemetry cost.
With Diginsight telemetry, you can troubleshoot issues more effectively, understand application behavior, and ensure optimal performance in both test and production environments.
Samples
You can start using diginsight telemetry by running the samples on the telemetry.samples repository.
Article HOWTO - Use Diginsight Samples: explores how we can use diginsight samples to test and understand integration of Diginsight telemetry in our own projects.
Build and Test
You can easily test Diginsight integration with OpenTelemetry by means of the EasySampleBlazorv2 project: - Clone diginsight repository - Open and build solution Diginsight.sln. - build the solution
Contribute
Contribute to the repository with your pull requests.
License
See the LICENSE file for license rights and limitations (MIT).