OpenTelemetry .NET (jak to działa dla programistów)
Wprowadzenie
Tworzenie dynamicznych, opartych na danych, bogatych dokumentów PDF jest typowym wymaganiem w wielu sektorach współczesnego tworzenia oprogramowania. Firmy w dużym stopniu polegają na możliwości szybkiego generowania wysokiej jakości plików PDF, niezależnie od tego, czy chodzi o tworzenie rachunków, raportów czy dokumentacji. Jednak śledzenie i zrozumienie efektywności procesów tworzenia plików PDF staje się niezbędne dla utrzymania sprawności aplikacji i zapewnienia satysfakcji użytkowników, ponieważ stają się one coraz bardziej skomplikowane i rozbudowane.
Celem tego artykułu jest omówienie, w jaki sposób programiści mogą usprawnić operacje związane z generowaniem plików PDF oraz uzyskać ważne informacje na temat wydajności aplikacji, wykorzystując funkcje IronPDF i OpenTelemetry.NET. Przyjrzymy się cechom i zaletom obu technologii oraz pokażemy, jak mogą one harmonijnie współpracować w celu optymalizacji tworzenia i monitorowania plików PDF w aplikacjach .NET.
Czym jest OpenTelemetry?
OpenTelemetry to niezależna od dostawcy platforma do monitorowania, stworzona specjalnie dla aplikacji natywnych dla chmury. Automatyczna instrumentacja OpenTelemetry zapewnia jeden interfejs API do zbierania informacji telemetrycznych, w tym logów, śledzenia i metryk. Korzystając z tych obszernych danych, programiści mogą skutecznie debugować problemy, wskazywać wąskie gardła wydajności i uzyskać pełne zrozumienie zachowania programu. OpenTelemetry obsługuje zarówno automatyczną, jak i ręczną instrumentację, umożliwiając kompleksowe i elastyczne gromadzenie danych telemetrycznych.
Kluczowe komponenty OpenTelemetry
- API: Aby instrumentować aplikacje i generować dane telemetryczne, OpenTelemetry określa standardowy zestaw interfejsów API. Upraszcza to procedurę instrumentacji i gwarantuje spójność w różnych językach programowania.
- Zestawy SDK: Do instrumentacji aplikacji OpenTelemetry oferuje zestawy SDK dostosowane do określonych języków. Programiści mogą z łatwością włączyć funkcjonalność OpenTelemetry do swoich projektów .NET za pomocą zestawu SDK .NET.
- Eksportatory: Te elementy odpowiadają za przesyłanie zebranych danych telemetrycznych do systemów zaplecza, aby można je było przechowywać i analizować. Wiele eksporterów powszechnie używanych systemów backendowych, takich jak Zipkin (śledzenie), Prometheus (metryki) i Jaeger (śledzenie), jest obsługiwanych przez OpenTelemetry.
- Automatyczna instrumentacja: ta metoda upraszcza proces dla aplikacji .NET Core. Biblioteki OpenTelemetry mogą automatycznie przechwytywać dane dotyczące typowych operacji w aplikacji internetowej lub usłudze. Eliminuje to konieczność ręcznych modyfikacji kodu, usprawniając proces integracji.
- Ręczna instrumentacja: Aby zapewnić szczegółową kontrolę nad gromadzeniem danych, OpenTelemetry udostępnia solidny interfejs API do ręcznej instrumentacji. Takie podejście pozwala na przechwytywanie konkretnych metryk i śladów związanych z unikalną logiką aplikacji. Jest to szczególnie przydatne w przypadku aplikacji opartych na platformie .NET Framework lub w sytuacjach, w których automatyczna instrumentacja nie zaspokaja konkretnych potrzeb.
Korzyści z używania OpenTelemetry w .NET
Włączenie OpenTelemetry do aplikacji .NET oferuje kilka korzyści:
- Neutralność względem dostawców: OpenTelemetry zapewnia elastyczność i zabezpiecza aplikację na przyszłość dzięki łatwej integracji z różnymi systemami zaplecza. Nie ma potrzeby zmiany kodu instrumentacyjnego w celu zmiany systemów zaplecza.
- Ujednolicone podejście: Dzięki jednolitemu interfejsowi API łatwiej jest wdrażać różne obszary aplikacji. To samo API może być wykorzystywane przez programistów do gromadzenia logów, śladów i metryk, co skutkuje kodem łatwiejszym do odczytania i utrzymania.
- Dogłębna analiza wydajności: OpenTelemetry oferuje bogactwo danych (metryki, ślady i logi) do kompleksowej analizy wydajności. Dzięki tej kompleksowej perspektywie można zidentyfikować obszary wymagające optymalizacji oraz określić źródło problemów.
- Lepsze rozwiązywanie problemów: Programiści mogą łatwiej wykrywać i naprawiać problemy, śledząc ścieżkę żądań w aplikacji przy użyciu bogatych danych śledzenia przechwytywanych przez OpenTelemetry.
- Lepsza skalowalność: Złożoność Twojej aplikacji nie wpłynie negatywnie na zdolność OpenTelemetry do skalowania. Nowe funkcje lub usługi można łatwo wdrożyć bez konieczności wprowadzania dużych zmian w kodzie.
Utwórz i skonfiguruj OpenTelemetry
Konfiguracja OpenTelemetry w aplikacji ASP.NET
OpenTelemetry wymaga konfiguracji w aplikacji; W przypadku aplikacji .NET Core zazwyczaj odbywa się to w metodzie ConfigureServices pliku Startup.cs. Oto przykład konfiguracji eksportera Jaeger:
using OpenTelemetry.Trace;
using OpenTelemetry.Exporter.Jaeger;
using OpenTelemetry.Resources;
public void ConfigureServices(IServiceCollection services)
{
// Configure OpenTelemetry
services.AddOpenTelemetry().WithTracing(builder =>
{
// Configure Jaeger exporter. The 'serviceName' can be read from environment variables
builder
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService("YourServiceName"))
.AddAspNetCoreInstrumentation()
.AddJaegerExporter(opt =>
{
opt.AgentHost = "localhost"; // Jaeger agent host
opt.AgentPort = 14250; // Jaeger agent port
});
});
// Other service configurations...
}
using OpenTelemetry.Trace;
using OpenTelemetry.Exporter.Jaeger;
using OpenTelemetry.Resources;
public void ConfigureServices(IServiceCollection services)
{
// Configure OpenTelemetry
services.AddOpenTelemetry().WithTracing(builder =>
{
// Configure Jaeger exporter. The 'serviceName' can be read from environment variables
builder
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService("YourServiceName"))
.AddAspNetCoreInstrumentation()
.AddJaegerExporter(opt =>
{
opt.AgentHost = "localhost"; // Jaeger agent host
opt.AgentPort = 14250; // Jaeger agent port
});
});
// Other service configurations...
}
Imports OpenTelemetry.Trace
Imports OpenTelemetry.Exporter.Jaeger
Imports OpenTelemetry.Resources
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Configure OpenTelemetry
services.AddOpenTelemetry().WithTracing(Sub(builder)
' Configure Jaeger exporter. The 'serviceName' can be read from environment variables
builder.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("YourServiceName")).AddAspNetCoreInstrumentation().AddJaegerExporter(Sub(opt)
opt.AgentHost = "localhost" ' Jaeger agent host
opt.AgentPort = 14250 ' Jaeger agent port
End Sub)
End Sub)
' Other service configurations...
End Sub
Zastąp "YourServiceName" rzeczywistą nazwą swojej usługi. Dostosuj host i port agenta Jaeger zgodnie z opcjami konfiguracyjnymi Jaeger.
Dodaj oprogramowanie pośredniczące OpenTelemetry
Aby uzyskać automatyczną instrumentację przychodzących żądań HTTP, należy dołączyć oprogramowanie pośredniczące OpenTelemetry do aplikacji ASP.NET Core. W metodzie Configure pliku Startup.cs dodaj oprogramowanie pośredniczące:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Add Prometheus metrics middleware if using Prometheus
app.UseHttpMetrics();
// Other middleware configurations...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Add Prometheus metrics middleware if using Prometheus
app.UseHttpMetrics();
// Other middleware configurations...
}
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
' Add Prometheus metrics middleware if using Prometheus
app.UseHttpMetrics()
' Other middleware configurations...
End Sub
Rozpocznij śledzenie
Po skonfigurowaniu wszystkiego OpenTelemetry rozpocznie śledzenie przychodzących żądań HTTP i automatyczne wysyłanie informacji telemetrycznych do skonfigurowanego backendu Jaeger.
Weryfikacja i monitorowanie
Możesz sprawdzić ślady w swoim backendzie Jaeger, aby upewnić się, że OpenTelemetry działa poprawnie. Otwórz interfejs użytkownika Jaeger (zwykle dostępny pod adresem http://localhost:16686 dla Jaeger UI) i poszukaj śladów związanych z Twoją usługą.
Wybierz system backendowy (opcjonalnie)
OpenTelemetry nie jest niezbędne do podstawowej instrumentacji, ale integruje się z innymi systemami operacyjnymi zaplecza w celu przechowywania i przetwarzania danych telemetrycznych. Popularne opcje obejmują oficjalnie obsługiwane systemy operacyjne:
- Jaeger (śledzenie)
- Prometheus (metryki)
- Zipkin (śledzenie)
Pierwsze kroki
Czym jest IronPDF?
Popularny pakiet .NET IronPDF umożliwia tworzenie, edycję i renderowanie dokumentów PDF w programach .NET. Funkcje do pracy z plikami PDF są liczne i obejmują konwersję stron HTML do formatu PDF, wyodrębnianie tekstu i obrazów z plików PDF, dodawanie tekstu, obrazów i kształtów do istniejących dokumentów PDF oraz tworzenie plików PDF na podstawie treści HTML, zdjęć lub surowych danych.
Dwie kluczowe zalety IronPDF to łatwość obsługi i prostota. Dzięki intuicyjnemu API i obszernej dokumentacji programiści mogą bez trudu rozpocząć tworzenie plików PDF w ramach swoich projektów .NET. Wydajność i szybkość działania IronPDF to dodatkowe cechy, które pomagają programistom w szybkim i sprawnym tworzeniu wysokiej jakości dokumentów PDF.
Niektóre zalety IronPDF:
- Tworzenie plików PDF na podstawie HTML, obrazów i surowych danych
- Pobieranie tekstu i obrazów z plików PDF
- Włączanie znaków wodnych, nagłówków i stopek do plików PDF
- Pliki PDF są chronione szyfrowaniem i hasłem
- Możliwość elektronicznego podpisywania i wypełniania formularzy
Zainstaluj pakiet NuGet
Dostępnych jest wiele pakietów NuGet dla różnych komponentów OpenTelemetry. W zależności od potrzeb można zainstalować wymagane pakiety. Aby wysłać dane telemetryczne do backendu obserwowalności (takiego jak Jaeger, Zipkin lub Prometheus), potrzebujesz co najmniej pakietu OpenTelemetry, pakietów instrumentacyjnych dla swojego frameworka aplikacji (takiego jak ASP.NET Core) oraz pakietu eksportującego. Upewnij się również, że pakiet IronPDF jest zainstalowany w Twoim projekcie. Aby zainstalować, użyj konsoli NuGet Package Manager Console:
Install-Package OpenTelemetry
Install-Package OpenTelemetry.Instrumentation.AspNetCore
Install-Package OpenTelemetry.Exporter.Jaeger
Install-Package IronPdf
Korzystanie z OpenTelemetry z IronPDF
Otwórz plik Startup.cs aplikacji .NET Core, aby uzyskać dostęp do metody ConfigureServices. Aby skonfigurować IronPDF, należy dołączyć poniższy kod.
using IronPdf;
public void ConfigureServices(IServiceCollection services)
{
// Configure IronPDF
services.AddSingleton<HtmlToPdf>();
// Other service configurations...
}
using IronPdf;
public void ConfigureServices(IServiceCollection services)
{
// Configure IronPDF
services.AddSingleton<HtmlToPdf>();
// Other service configurations...
}
Imports IronPdf
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Configure IronPDF
services.AddSingleton(Of HtmlToPdf)()
' Other service configurations...
End Sub
Ten kod gwarantuje, że instancja HtmlToPdf zostanie utworzona i używana przez aplikację wyłącznie poprzez skonfigurowanie usługi HtmlToPdf IronPDF jako singletonu.
Możesz śledzić i obserwować procesy generowania plików PDF w swoich aplikacjach .NET poprzez integrację OpenTelemetry.NET z IronPDF. Przyjrzyjmy się przykładowemu kodowi bardziej szczegółowo, omawiając każdy krok po kolei:
using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using Microsoft.Extensions.Logging;
using IronPdf;
namespace DemoWebApplication.Controllers
{
[ApiController]
[Route("[controller]")]
public class DemoController : ControllerBase
{
private readonly HtmlToPdf _htmlToPdf;
private readonly ILogger<DemoController> _logger;
private readonly Tracer _tracer;
public DemoController(ILogger<DemoController> logger, HtmlToPdf htmlToPdf, TracerProvider tracerProvider)
{
_tracer = tracerProvider.GetTracer("Demo");
_htmlToPdf = htmlToPdf;
_logger = logger;
}
[HttpGet]
public FileContentResult Generate()
{
// Define the PDF file name
string fileName = "Sample.pdf";
// Generate PDF from HTML content
_logger.LogInformation("Generating PDF...");
var pdfBytes = GeneratePdf("Hello, IronPDF!");
// Return the PDF as a file result
return new FileContentResult(pdfBytes, "application/pdf")
{
FileDownloadName = fileName
};
}
private byte[] GeneratePdf(string htmlContent)
{
// Start a tracing activity for PDF generation
using (var activity = _tracer.StartActiveSpan("PDF Generation"))
{
var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
// Log PDF generation
_logger.LogInformation("PDF generated successfully.");
return pdfDocument.BinaryData;
}
}
}
}
using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using Microsoft.Extensions.Logging;
using IronPdf;
namespace DemoWebApplication.Controllers
{
[ApiController]
[Route("[controller]")]
public class DemoController : ControllerBase
{
private readonly HtmlToPdf _htmlToPdf;
private readonly ILogger<DemoController> _logger;
private readonly Tracer _tracer;
public DemoController(ILogger<DemoController> logger, HtmlToPdf htmlToPdf, TracerProvider tracerProvider)
{
_tracer = tracerProvider.GetTracer("Demo");
_htmlToPdf = htmlToPdf;
_logger = logger;
}
[HttpGet]
public FileContentResult Generate()
{
// Define the PDF file name
string fileName = "Sample.pdf";
// Generate PDF from HTML content
_logger.LogInformation("Generating PDF...");
var pdfBytes = GeneratePdf("Hello, IronPDF!");
// Return the PDF as a file result
return new FileContentResult(pdfBytes, "application/pdf")
{
FileDownloadName = fileName
};
}
private byte[] GeneratePdf(string htmlContent)
{
// Start a tracing activity for PDF generation
using (var activity = _tracer.StartActiveSpan("PDF Generation"))
{
var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
// Log PDF generation
_logger.LogInformation("PDF generated successfully.");
return pdfDocument.BinaryData;
}
}
}
}
Imports Microsoft.AspNetCore.Mvc
Imports OpenTelemetry.Trace
Imports System.Diagnostics
Imports Microsoft.Extensions.Logging
Imports IronPdf
Namespace DemoWebApplication.Controllers
<ApiController>
<Route("[controller]")>
Public Class DemoController
Inherits ControllerBase
Private ReadOnly _htmlToPdf As HtmlToPdf
Private ReadOnly _logger As ILogger(Of DemoController)
Private ReadOnly _tracer As Tracer
Public Sub New(ByVal logger As ILogger(Of DemoController), ByVal htmlToPdf As HtmlToPdf, ByVal tracerProvider As TracerProvider)
_tracer = tracerProvider.GetTracer("Demo")
_htmlToPdf = htmlToPdf
_logger = logger
End Sub
<HttpGet>
Public Function Generate() As FileContentResult
' Define the PDF file name
Dim fileName As String = "Sample.pdf"
' Generate PDF from HTML content
_logger.LogInformation("Generating PDF...")
Dim pdfBytes = GeneratePdf("Hello, IronPDF!")
' Return the PDF as a file result
Return New FileContentResult(pdfBytes, "application/pdf") With {.FileDownloadName = fileName}
End Function
Private Function GeneratePdf(ByVal htmlContent As String) As Byte()
' Start a tracing activity for PDF generation
Using activity = _tracer.StartActiveSpan("PDF Generation")
Dim pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent)
' Log PDF generation
_logger.LogInformation("PDF generated successfully.")
Return pdfDocument.BinaryData
End Using
End Function
End Class
End Namespace
W tym przykładzie:
- Wstawiamy
HtmlToPdf,ILoggeriTracerProviderdoDemoController. - Metoda
Generaterozpoczyna pobieranie pliku, zwracając dynamicznie utworzony plik PDF o treści "Hello, IronPDF!". - Metoda
GeneratePdfwykorzystujeHtmlToPdf.RenderHtmlAsPdfdo renderowania pliku PDF i generuje dane binarne tego pliku. - Kod wykorzystuje OpenTelemetry do śledzenia procesu generowania plików PDF i rejestruje dane śledzenia.
Wygenerowany plik PDF na podstawie powyższego kodu źródłowego:

Poniżej znajduje się zrzut ekranu z wygenerowanym śladem z interfejsu użytkownika Jaeger:

Wnioski
OpenTelemetry to przełomowe rozwiązanie w zakresie optymalizacji wydajności aplikacji .NET i monitorowania ich stanu. Zapewnia programistom dogłębne zrozumienie wewnętrznego działania ich aplikacji, oferując niezależną od dostawcy i znormalizowaną metodę gromadzenia, analizowania i eksportowania danych telemetrycznych (metryki, ślady i logi).
Dzięki integracji OpenTelemetry.NET z IronPDF programiści mogą usprawnić procesy tworzenia plików PDF i uzyskać wgląd w wydajność swoich aplikacji. Wykorzystując implementację OpenTelemetry.NET do ręcznego instrumentowania procesów generowania plików PDF, programiści mogą śledzić ścieżki wykonania, monitorować wskaźniki wydajności i wskazywać obszary wymagające optymalizacji. Ponadto scentralizowane gromadzenie i analiza wskaźników monitorowania są możliwe dzięki eksportowaniu danych telemetrycznych do platform obserwowalności, co daje programistom możliwość utrzymania sprawności ich aplikacji i zapewnienia bezbłędnego doświadczenia użytkownika.
Integracja implementacji OpenTelemetry.NET i IronPDF może usprawnić proces tworzenia plików PDF przez programistów oraz zagwarantować skalowalność, wydajność i niezawodność aplikacji .NET. Integracja tych technologii pomaga programistom sprostać wymaganiom współczesnego tworzenia oprogramowania i osiągać doskonałe wyniki, niezależnie od tego, czy chodzi o tworzenie faktur, raportów czy dokumentacji.
W przypadku zakupu w pakiecie IronPDF jest dostępny w przystępnej cenie i obejmuje dożywotnią licencję. Pakiet oferuje doskonałą wartość za jedyne $799, co stanowi jednorazową opłatę za wiele systemów. Oferuje posiadaczom licencji całodobowe wsparcie techniczne online. Więcej szczegółów na temat zlecenia można znaleźć na stronie internetowej Iron Software. Zapoznaj się z produktami Iron Software, aby dowiedzieć się więcej o oferowanych przez firmę rozwiązaniach.
Często Zadawane Pytania
Czym jest OpenTelemetry i w jaki sposób usprawnia aplikacje .NET?
OpenTelemetry to niezależna od dostawcy platforma do monitorowania aplikacji, zaprojektowana z myślą o aplikacjach natywnych dla chmury. Ulepsza ona aplikacje .NET, zapewniając standardowe interfejsy API i zestawy SDK do przechwytywania logów, śladów i metryk, które pomagają w diagnozowaniu problemów, identyfikowaniu wąskich gardeł wydajności oraz uzyskiwaniu kompleksowego wglądu w zachowanie aplikacji.
W jaki sposób można zintegrować OpenTelemetry z ASP.NET Core w celu automatycznej instrumentacji?
OpenTelemetry można zintegrować z .NET Core poprzez skonfigurowanie usług i oprogramowania pośredniczącego w pliku `Startup.cs`, aby umożliwić automatyczną instrumentację. Obejmuje to skonfigurowanie śledzenia i eksporterów, takich jak Jaeger, w celu przesyłania danych telemetrycznych i monitorowania wydajności aplikacji.
Jaką rolę odgrywa IronPDF w generowaniu plików PDF dla aplikacji .NET?
IronPDF to biblioteka .NET, która ułatwia tworzenie i edycję plików PDF w aplikacjach .NET. Obsługuje konwersję HTML do PDF, wyodrębnianie tekstu z plików PDF oraz dodawanie funkcji, takich jak znaki wodne i szyfrowanie, co czyni ją wszechstronnym narzędziem do obsługi dokumentów PDF.
W jaki sposób programiści mogą śledzić i analizować procesy generowania plików PDF za pomocą OpenTelemetry?
Programiści mogą śledzić i analizować procesy generowania plików PDF poprzez integrację OpenTelemetry.NET z IronPDF. Integracja ta umożliwia gromadzenie i analizę danych telemetrycznych, zapewniając wgląd w przepływy pracy związane z generowaniem plików PDF i pomagając w optymalizacji wydajności aplikacji.
Jakie są zalety korzystania z OpenTelemetry wraz z IronPDF w aplikacjach .NET?
Wykorzystanie OpenTelemetry wraz z IronPDF w aplikacjach .NET zapewnia szereg korzyści, w tym lepszą skalowalność aplikacji, ulepszoną analizę wydajności oraz zoptymalizowane procesy generowania plików PDF. Takie połączenie pozwala programistom skutecznie monitorować i poprawiać kondycję swoich aplikacji.
W jaki sposób programiści mogą wygenerować plik PDF w aplikacji ASP.NET Core przy użyciu IronPDF?
W aplikacji .NET Core programiści mogą wygenerować plik PDF, wstrzykując klasę `HtmlToPdf` do kontrolera, renderując zawartość HTML jako PDF, a następnie zwracając wygenerowany plik PDF jako wynik do pobrania.
Jakie eksportery są obsługiwane przez OpenTelemetry dla systemów backendowych?
OpenTelemetry obsługuje różne eksportery dla systemów backendowych, w tym Jaeger do śledzenia, Prometheus do metryk i Zipkin do śledzenia. Eksportery te umożliwiają przechowywanie i analizę danych telemetrycznych w różnych systemach.




