Przejdź do treści stopki
POMOC .NET

Opentelemetry C# (jak to działa dla programistów)

OpenTelemetry to zbiór narzędzi, API i SDK, które współpracują ze sobą, aby zbierać, przetwarzać i eksportować dane telemetryczne, takie jak ślady, metryki i logi z twoich aplikacji. Ten samouczek ma na celu pomoc początkującym w zrozumieniu, jak zintegrować OpenTelemetry w aplikacjach C# z wykorzystaniem metody rozszerzającej, koncentrując się na wbudowanym zbieraniu metryk dla skutecznego monitorowania aplikacji .NET. Nauczymy się również o bibliotece IronPDF do generowania PDF w C#.

Wprowadzenie do OpenTelemetry

Opentelemetry C# (Jak to działa dla deweloperów): Rysunek 1 - OpenTelemetry

OpenTelemetry zapewnia jednolity sposób zbierania wszystkich rodzajów danych z twoich aplikacji. Dla deweloperów .NET, integracja OpenTelemetry oznacza, że można dokładniej monitorować swoje aplikacje, rozumieć ich działanie w czasie rzeczywistym i szybko identyfikować problemy. Biblioteka instrumentacji OpenTelemetry automatycznie umożliwia śledzenie i zbieranie metryk dla aplikacji .NET.

Dzięki metrykom zebranym przez framework OpenTelemetry, deweloperzy zyskują cenne informacje o środowisku wykonawczym .NET. Implementacja OpenTelemetry dla .NET wspiera środowisko wykonawcze .NET, w tym .NET Core i .NET Framework. Przestrzega protokołu OpenTelemetry dla standaryzowanego zbierania danych telemetrycznych.

Konfiguracja środowiska

Aby rozpocząć, musisz mieć zainstalowane SDK .NET na swoim komputerze. Jeśli używasz Visual Studio, to prawdopodobnie SDK .NET zostało zainstalowane wraz z nim. Możesz sprawdzić swoją obecną wersję SDK .NET, otwierając linię poleceń i uruchamiając:

dotnet --version

Następnie, utwórz nowy projekt sieciowy .NET, uruchamiając:

dotnet new web -o MyTelemetryApp
cd MyTelemetryApp
dotnet new web -o MyTelemetryApp
cd MyTelemetryApp
SHELL

To polecenie tworzy nowy projekt ASP.NET Core w katalogu o nazwie MyTelemetryApp.

Integracja OpenTelemetry

Dodawanie wymaganych pakietów

Najpierw dodaj niezbędne pakiety OpenTelemetry do swojego projektu. Otwórz swój terminal i przejdź do katalogu projektu. Następnie zainstaluj następujące pakiety za pomocą CLI Menedżera Pakietów NuGet:

dotnet add package OpenTelemetry -Version <version>
dotnet add package OpenTelemetry.Extensions.Hosting -Version <version>
dotnet add package OpenTelemetry.Instrumentation.AspNetCore -Version <version>
dotnet add package OpenTelemetry.Exporter.Console -Version <version>
dotnet add package OpenTelemetry -Version <version>
dotnet add package OpenTelemetry.Extensions.Hosting -Version <version>
dotnet add package OpenTelemetry.Instrumentation.AspNetCore -Version <version>
dotnet add package OpenTelemetry.Exporter.Console -Version <version>
SHELL

Zamień na najnowszą wersję każdego pakietu.

Konfiguracja OpenTelemetry w aplikacji

Po dodaniu niezbędnych pakietów, musisz skonfigurować OpenTelemetry w swojej aplikacji. To obejmuje skonfigurowanie SDK OpenTelemetry i określenie, które dane telemetryczne zbierać. OpenTelemetry oferuje biblioteki instrumentacji do bezproblemowej integracji z aplikacjami .NET.

Otwórz plik Startup.cs w swoim projekcie i zmodyfikuj metodę ConfigureServices, aby uwzględniała OpenTelemetry, jak pokazano w poniższym fragmencie kodu:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddOpenTelemetryTracing(builder =>
    {
        builder.AddAspNetCoreInstrumentation()
               .AddHttpClientInstrumentation()
               .AddConsoleExporter();
    });
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddOpenTelemetryTracing(builder =>
    {
        builder.AddAspNetCoreInstrumentation()
               .AddHttpClientInstrumentation()
               .AddConsoleExporter();
    });
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	services.AddControllers()
	services.AddOpenTelemetryTracing(Sub(builder)
		builder.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddConsoleExporter()
	End Sub)
End Sub
$vbLabelText   $csharpLabel

Ten fragment kodu pokazuje, jak skonfigurować OpenTelemetry do zbierania danych telemetrycznych z aplikacji ASP.NET Core i wywołań klienta HTTP, a następnie eksportować te dane do konsoli. Metoda AddAspNetCoreInstrumentation automatycznie umożliwia instrumentację dla przychodzących żądań HTTP do aplikacji ASP.NET Core.

Zbieranie metryk

Aby zbierać metryki, musisz również skonfigurować API Metryk OpenTelemetry, skupiając się na metrykach zamiast na śledzeniu.

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddOpenTelemetryMetrics(builder =>
    {
        builder.AddAspNetCoreInstrumentation()
               .AddHttpClientInstrumentation()
               .AddConsoleExporter(options => options.Targets = ConsoleExporterOutputTargets.Console);
    });
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddOpenTelemetryMetrics(builder =>
    {
        builder.AddAspNetCoreInstrumentation()
               .AddHttpClientInstrumentation()
               .AddConsoleExporter(options => options.Targets = ConsoleExporterOutputTargets.Console);
    });
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	services.AddControllers()
	services.AddOpenTelemetryMetrics(Sub(builder)
		builder.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddConsoleExporter(Sub(options) options.Targets = ConsoleExporterOutputTargets.Console)
	End Sub)
End Sub
$vbLabelText   $csharpLabel

Ta konfiguracja umożliwia zbieranie wbudowanych metryk z aplikacji ASP.NET Core i instrumentacji klienta HTTP, eksportując je do konsoli dla łatwego przeglądania.

Tworzenie własnych metryk

Chociaż OpenTelemetry automatycznie zbiera wiele użytecznych metryk, możesz chcieć zbierać własne metryki specyficzne dla twojej aplikacji. Wykorzystanie metody rozszerzającej dostarczonej przez bibliotekę instrumentacyjną nie tylko automatycznie zbiera telemetrykę, ale również daje deweloperom bardziej szczegółową kontrolę nad emitowanymi metrykami. Można to osiągnąć poprzez ręczną instrumentację swojego kodu do tworzenia i rejestrowania własnych metryk.

var meter = new Meter("MyCustomMetrics", "1.0");
var counter = meter.CreateCounter<int>("custom_request_count", description: "Counts custom requests");
app.Use((context, next) =>
{
    counter.Add(1, new KeyValuePair<string, object>("path", context.Request.Path));
    return next();
});
var meter = new Meter("MyCustomMetrics", "1.0");
var counter = meter.CreateCounter<int>("custom_request_count", description: "Counts custom requests");
app.Use((context, next) =>
{
    counter.Add(1, new KeyValuePair<string, object>("path", context.Request.Path));
    return next();
});
Dim meter As New Meter("MyCustomMetrics", "1.0")
Dim counter = meter.CreateCounter(Of Integer)("custom_request_count", description:= "Counts custom requests")
app.Use(Function(context, [next])
	counter.Add(1, New KeyValuePair(Of String, Object)("path", context.Request.Path))
	Return [next]()
End Function)
$vbLabelText   $csharpLabel

Ten fragment kodu pokazuje, jak stworzyć własną metrykę, która zlicza żądania do twojej aplikacji, oznaczając każdą metrykę ścieżką żądania. Dzięki wykorzystaniu metod rozszerzających dostarczonych przez OpenTelemetry, deweloperzy mogą sprawować bardziej szczegółową kontrolę nad procesem zbierania danych telemetrycznych.

Testowanie integracji

Uruchom swoją aplikację, używając linii poleceń lub Visual Studio. Wykonaj kilka żądań do aplikacji, albo nawigując do jej URL w przeglądarce internetowej, albo używając narzędzia takiego jak curl. Powinieneś zobaczyć dane telemetryczne, w tym ślady i metryki, drukowane do twojego wyjścia konsoli.

curl http://localhost:5000
curl http://localhost:5000
SHELL

Wprowadzenie do IronPDF

Opentelemetry C# (Jak to działa dla deweloperów): Rysunek 2 - IronPDF

IronPDF to potężna biblioteka dla deweloperów C#, umożliwiająca generowanie, manipulowanie i renderowanie dokumentów PDF bezpośrednio w aplikacjach .NET. Ta funkcjonalność jest szczególnie przydatna do generowania raportów, faktur czy jakichkolwiek wyjść opartych na dokumentach z aplikacji webowych za pomocą HTML, usług czy aplikacji desktopowych. Łącząc IronPDF z OpenTelemetry, deweloperzy mogą monitorować wydajność i niezawodność procesów generowania PDF w swoich aplikacjach, zapewniając płynne doświadczenie użytkownika.

IronPDF wyróżnia się w konwersji HTML do PDF, zapewniając precyzyjne zachowanie oryginalnych układów i stylów. Idealnie nadaje się do tworzenia plików PDF z treści internetowych, takich jak raporty, faktury i dokumentacja. Dzięki obsłudze plików HTML, adresów URL i surowych ciągów znaków HTML, IronPDF z łatwością tworzy wysokiej jakości dokumenty PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Konfiguracja IronPDF

Najpierw musisz dodać IronPDF do swojego projektu .NET. Możesz to zrobić, używając Menedżera Pakietów NuGet. Otwórz swój terminal i przejdź do katalogu projektu. Następnie uruchom poniższe polecenie, aby zainstalować IronPDF:

dotnet add package IronPDF
dotnet add package IronPDF
SHELL

Generowanie PDF z IronPDF i monitorowanie z OpenTelemetry

Poniżej znajduje się przykład, jak wygenerować prosty dokument PDF i monitorować działanie za pomocą OpenTelemetry. Poniższy przykład zakłada, że już skonfigurowałeś OpenTelemetry w swojej aplikacji zgodnie z wcześniejszymi wskazówkami.

using IronPdf;
using OpenTelemetry.Trace;

public class PdfService
{
    private readonly Tracer _tracer;

    public PdfService(Tracer tracer)
    {
        _tracer = tracer;
    }

    public void GeneratePdf()
    {
        // Create a new activity for this operation
        using var activity = _tracer.StartActivity("Generate PDF");

        // Simulate adding some attributes related to the operation
        activity?.SetTag("pdf.size", "A4");
        activity?.SetTag("pdf.content", "Hello World");

        try
        {
            // Initialize the PDF generator
            var renderer = new ChromePdfRenderer();

            // Generate a PDF from HTML
            var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");

            // Save the PDF to a file
            var outputPath = "output.pdf";
            pdf.SaveAs(outputPath);

            // Log success
            activity?.SetTag("pdf.status", "Success");
            activity?.SetTag("pdf.outputPath", outputPath);
        }
        catch (Exception ex)
        {
            // Log any exceptions that occur during PDF generation
            activity?.SetTag("pdf.status", "Error");
            activity?.SetTag("pdf.error", ex.Message);
            throw;
        }
    }
}
using IronPdf;
using OpenTelemetry.Trace;

public class PdfService
{
    private readonly Tracer _tracer;

    public PdfService(Tracer tracer)
    {
        _tracer = tracer;
    }

    public void GeneratePdf()
    {
        // Create a new activity for this operation
        using var activity = _tracer.StartActivity("Generate PDF");

        // Simulate adding some attributes related to the operation
        activity?.SetTag("pdf.size", "A4");
        activity?.SetTag("pdf.content", "Hello World");

        try
        {
            // Initialize the PDF generator
            var renderer = new ChromePdfRenderer();

            // Generate a PDF from HTML
            var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");

            // Save the PDF to a file
            var outputPath = "output.pdf";
            pdf.SaveAs(outputPath);

            // Log success
            activity?.SetTag("pdf.status", "Success");
            activity?.SetTag("pdf.outputPath", outputPath);
        }
        catch (Exception ex)
        {
            // Log any exceptions that occur during PDF generation
            activity?.SetTag("pdf.status", "Error");
            activity?.SetTag("pdf.error", ex.Message);
            throw;
        }
    }
}
Imports IronPdf
Imports OpenTelemetry.Trace

Public Class PdfService
	Private ReadOnly _tracer As Tracer

	Public Sub New(ByVal tracer As Tracer)
		_tracer = tracer
	End Sub

	Public Sub GeneratePdf()
		' Create a new activity for this operation
		Dim activity = _tracer.StartActivity("Generate PDF")

		' Simulate adding some attributes related to the operation
		If activity IsNot Nothing Then
			activity.SetTag("pdf.size", "A4")
		End If
		If activity IsNot Nothing Then
			activity.SetTag("pdf.content", "Hello World")
		End If

		Try
			' Initialize the PDF generator
			Dim renderer = New ChromePdfRenderer()

			' Generate a PDF from HTML
			Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")

			' Save the PDF to a file
			Dim outputPath = "output.pdf"
			pdf.SaveAs(outputPath)

			' Log success
			If activity IsNot Nothing Then
				activity.SetTag("pdf.status", "Success")
			End If
			If activity IsNot Nothing Then
				activity.SetTag("pdf.outputPath", outputPath)
			End If
		Catch ex As Exception
			' Log any exceptions that occur during PDF generation
			If activity IsNot Nothing Then
				activity.SetTag("pdf.status", "Error")
			End If
			If activity IsNot Nothing Then
				activity.SetTag("pdf.error", ex.Message)
			End If
			Throw
		End Try
	End Sub
End Class
$vbLabelText   $csharpLabel

W tym przykładzie tworzymy nową klasę serwisową PdfService, która zawiera metodę GeneratePdf do generowania dokumentu PDF. Używamy klasy ChromePdfRenderer z IronPDF do renderowania HTML jako dokumentu PDF. Dzięki OpenTelemetry, rozpoczynamy nową aktywność nazwaną "Generate PDF", aby monitorować tę operację. Dodajemy niestandardowe tagi do aktywności, aby dostarczyć dodatkowy kontekst na temat procesu generowania PDF, takie jak wielkość PDF, typ zawartości i ścieżka wyjściowa. Złapamy również wszelkie wyjątki, aby odpowiednio zarejestrować błędy w ramach tej samej aktywności.

Wnioski

Opentelemetry C# (Jak to działa dla deweloperów): Rysunek 3 - Licencjonowanie

Integracja OpenTelemetry w aplikacjach .NET pozwala na zbieranie cennych danych telemetrycznych, oferując wgląd w wydajność i zachowanie twoich aplikacji. Podążając za krokami opisanymi w tym samouczku, skonfigurowałeś podstawowe śledzenie i zbieranie metryk dla aplikacji webowej .NET. Eksperymentuj dalej, eksplorując bardziej zaawansowane funkcje OpenTelemetry, takie jak eksport danych telemetrycznych do zewnętrznych narzędzi monitorujących lub zbieranie logów obok śladów i metryk.

IronPDF oferuje bezpłatną wersję próbną IronPDF do produkcji w celu przetestowania pełnych możliwości. Licencje zaczynają się od zaledwie 399 USD.

Często Zadawane Pytania

Jaki jest cel OpenTelemetry w programowaniu w języku C#?

OpenTelemetry zapewnia ujednolicone podejście do gromadzenia, przetwarzania i eksportowania danych telemetrycznych, takich jak ślady, metryki i logi, umożliwiając programistom monitorowanie i zrozumienie wydajności aplikacji w czasie rzeczywistym.

Jak mogę rozpocząć integrację OpenTelemetry z moją aplikacją C#?

Zacznij od zainstalowania niezbędnych pakietów OpenTelemetry za pośrednictwem NuGet, a następnie skonfiguruj swoją aplikację, modyfikując metodę „ConfigureServices” w pliku „Startup.cs”, aby uwzględnić śledzenie i metryki OpenTelemetry.

Jakie kroki należy wykonać, aby skonfigurować środowisko dla OpenTelemetry w języku C#?

Upewnij się, że na Twoim komputerze zainstalowano zestaw SDK .NET. Możesz sprawdzić instalację, uruchamiając polecenie dotnet --version w wierszu poleceń.

Jak wygenerować plik PDF w języku C# przy użyciu treści HTML?

Można użyć klasy ChromePdfRenderer biblioteki IronPDF do renderowania kodu HTML jako dokumentu PDF, a następnie użyć metody SaveAs do zapisania wygenerowanego pliku PDF.

Jak mogę monitorować proces generowania plików PDF w aplikacji napisanej w języku C#?

Użyj narzędzia Tracer firmy OpenTelemetry, aby utworzyć aktywność generowania pliku PDF, dodając niestandardowe tagi w celu rejestrowania istotnych informacji o procesie na potrzeby monitorowania.

Czym są niestandardowe metryki i jak można je wykorzystać w OpenTelemetry przy użyciu języka C#?

Wskaźniki niestandardowe to punkty danych specyficzne dla aplikacji, które można gromadzić, ręcznie wdrażając w kodzie klasy Meter i Counter biblioteki OpenTelemetry.

Jak mogę zapewnić niezawodne generowanie plików PDF w języku C#?

Korzystaj z biblioteki IronPDF, aby niezawodnie generować, edytować i renderować dokumenty PDF. IronPDF oferuje solidne funkcje zapewniające wysoką jakość plików PDF w Twoich aplikacjach.

Czy są dostępne opcje licencyjne dla bibliotek, które pomagają w generowaniu plików PDF w języku C#?

IronPDF oferuje bezpłatną wersję próbną do testów produkcyjnych, a ceny licencji zaczynają się od 399 USD, co pozwala programistom na zapoznanie się z pełnymi możliwościami produktu.

Jak mogę przetestować integrację OpenTelemetry w aplikacji napisanej w języku C#?

Uruchom aplikację i wysyłaj żądania za pomocą przeglądarki internetowej lub narzędzi takich jak curl, a następnie obserwuj dane telemetryczne, takie jak ślady i metryki wyświetlane w konsoli.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie