.NET 幫助

Opentelemetry C#(開發人員如何使用)

Chipego
奇佩戈·卡林达
2024年3月6日
分享:

開放遙測是一套工具、API 和 SDK,可协同工作以收集、处理并导出來自您的應用程序的遙測數據,如追蹤、指標和日誌。 本教程旨在幫助初學者理解如何在 C# 應用程式中使用擴展方法整合 OpenTelemetry,重點在於內建的度量收集,以有效地監控 .NET 應用程式。 我們還將了解有關IronPDF 庫用於在 C# 中生成 PDF.

OpenTelemetry 介紹

Opentelemetry C#(如何為開發者運作):圖1 - OpenTelemetry

開放遙測提供一種統一的方法從您的應用程式中收集各種數據。 對於 .NET 開發人員,整合 OpenTelemetry 意味著您可以更密切地監控您的應用程序,實時了解其性能,並快速識別問題。 OpenTelemetry 的工具庫自動為 .NET 應用程序啟用追蹤和指標收集。

透過 OpenTelemetry 框架收集的指標,開發人員可以獲得 .NET 執行環境的寶貴見解。 OpenTelemetry .NET 實現支持 .NET 執行時,包括 .NET Core 和 .NET Framework。 它遵循 OpenTelemetry 協議以進行標準化的遙測數據收集。

設定您的環境

首先,您需要在您的機器上安裝 .NET SDK。如果您使用的是 Visual Studio,它可能已附帶 .NET SDK。 您可以通過打開命令行並運行以下命令來檢查當前的 .NET SDK 版本:

dotnet --version

接下來,通過運行以下命令創建一個新的 .NET Web 專案:

dotnet new web -o MyTelemetryApp
cd MyTelemetryApp

此命令會在一個名為 MyTelemetryApp 的目錄中建立一個新的 ASP.NET Core 專案。

整合 OpenTelemetry

添加必需的套件

首先,將必要的 OpenTelemetry 套件添加到您的專案中。 打開終端並導航到你的專案目錄。 然後,使用 NuGet 套件管理器 CLI 安裝以下套件:

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>

替换 搭配每個套件的最新版本。

在您的應用程式中配置 OpenTelemetry

在添加必要的套件後,您需要在應用程式中配置 OpenTelemetry。 這涉及設置 OpenTelemetry SDK 並指定要收集哪些遙測數據。 OpenTelemetry 提供用於與 .NET 應用程式無縫整合的儀器庫。

打開專案中的 Startup.cs 檔案,修改 ConfigureServices 方法以包含 OpenTelemetry,如下程式碼片段所示:

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();
    });
}

以下程式碼片段顯示如何配置 OpenTelemetry 從 ASP.NET Core 應用程序和 HTTP 客戶端調用中收集遙測數據,然後將這些數據導出到控制台。 AddAspNetCoreInstrumentation 方法自動啟用對 ASP.NET Core 應用程式傳入 HTTP 請求的儀器化。

收集指標

若要收集指標,您還需要配置 OpenTelemetry Metrics API,重點放在指標而非追蹤上。

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);
    });
}

此設置可從 ASP.NET Core 和 HTTP 客戶端儀器收集內建的度量,並將其匯出至控制台以便輕鬆查看。

創建自定義指標

雖然 OpenTelemetry 自動收集許多有用的指標,但您可能想要收集特定於您的應用程式的自定義指標。 利用由檢測庫提供的擴充方法,不僅能自動收集遙測數據,還能讓開發者對發出的指標有更細緻的控制。 這可以透過手動調整程式碼來創建和記錄自定義指標來實現。

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();
});

此代碼片段演示如何創建一個自定義指標,用於計算對應用程式的請求,並使用請求路徑標記每個指標。 透過利用OpenTelemetry提供的擴展方法,開發人員可以對遙測數據收集過程進行更精細的控制。

測試您的整合

使用命令行或 Visual Studio 運行您的應用程序。 請透過網頁瀏覽器瀏覽應用程式的 URL 或使用像 curl 這樣的工具向您的應用程式發送一些請求。 您應該會在主控台輸出中看到遙測數據,包括追蹤和指標。

curl http://localhost:5000

IronPDF 介紹

Opentelemetry C#(開發人員如何使用):圖2 - IronPDF

IronPDF 是一個強大的庫,專為 C# 開發者設計,使得可以在 .NET 應用程式中直接生成、操作和呈現 PDF 文件。 此功能特別適用於生成報告、發票或任何使用 HTML 從網路應用程式生成基於文件的輸出,服務或桌面應用程式。結合 IronPDF 與 OpenTelemetry,開發者可以監控應用程式內 PDF 生成流程的性能與可靠性,確保用戶體驗順暢。

IronPDF 擅長於HTML轉PDF轉換,確保準確保留原始佈局和樣式。 它非常適合從基於網絡的內容(如報告、發票和文檔)創建PDF。 IronPDF 支援 HTML 檔案、URL 和原始 HTML 字串,輕鬆製作高品質的 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");
    }
}

設定 IronPDF

首先,您需要將 IronPDF 添加到您的 .NET 專案中。 您可以使用 NuGet 套件管理器來完成這個操作。 打開終端並導航到你的專案目錄。 然後,運行以下命令以安裝 IronPDF:

dotnet add package IronPDF

使用 IronPDF 生成 PDF 並通過 OpenTelemetry 進行監控

以下是如何使用 OpenTelemetry 生成簡單 PDF 文件並監控操作的範例。 以下示例假設您已根據前述內容在應用程式中配置了 OpenTelemetry。

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;
        }
    }
}

在此範例中,我們創建了一個新的服務類 PdfService,其中包含一個方法 GeneratePdf 用於生成 PDF 文件。 我們使用 IronPDF 的 ChromePdfRenderer 類將 HTML 呈現為 PDF 文件。 使用 OpenTelemetry,我們開始一個名為「Generate PDF」的新活動來監控此操作。 我們為活動添加自定義標籤,以提供關於 PDF 生成過程的額外上下文,例如 PDF 的大小、內容類型和輸出路徑。 我們也會捕捉任何例外,將錯誤適當地記錄在相同的活動中。

結論

OpenTelemetry C#(對開發人員的工作方式):圖 3 - 授權

將 OpenTelemetry 整合到您的 .NET 應用程式中,可以收集有價值的遙測數據,提供對應用程式性能和行為的深入瞭解。 透過遵循本教程中列出的步驟,您已經為 .NET 網路應用程式設置了基本的追蹤和指標收集。 進一步實驗,探索更高級的OpenTelemetry功能,例如將遙測數據匯出到外部監控工具或收集日誌與跟踪和指標一起使用。

IronPDF 提供一個IronPDF 免費試用用於生產以測試其全部功能。 授權的起價僅為 $399。

Chipego
奇佩戈·卡林达
軟體工程師
Chipego 擁有天生的傾聽技能,這幫助他理解客戶問題,並提供智能解決方案。他在獲得信息技術理學學士學位後,于 2023 年加入 Iron Software 團隊。IronPDF 和 IronOCR 是 Chipego 專注的兩個產品,但隨著他每天找到新的方法來支持客戶,他對所有產品的了解也在不斷增長。他喜歡在 Iron Software 的協作生活,公司內的團隊成員從各自不同的經歷中共同努力,創造出有效的創新解決方案。當 Chipego 離開辦公桌時,他常常享受讀好書或踢足球的樂趣。
< 上一頁
C# Span(開發者如何使用)
下一個 >
C# WebRTC(開發人員如何運作)