跳至頁尾內容
.NET 幫助

OpenTelemetry C#(開發者使用指南)

OpenTelemetry 是一套工具、API 和 SDK,可共同收集、處理和匯出來自應用程式的軌跡、度量和日誌等遙測資料。 本教學旨在幫助初學者瞭解如何使用擴充方法在 C# 應用程式中整合 OpenTelemetry,並將重點放在內建的度量資料收集,以有效監控 .NET 應用程式。 我們還將瞭解 用於 C# 產生 PDF 的 IronPDF 函式庫

OpenTelemetry 簡介

Opentelemetry C# (How It Works For Developers):圖 1 - OpenTelemetry

OpenTelemetry 提供統一的方式從您的應用程式收集各種資料。 對 .NET 開發人員而言,整合 OpenTelemetry 代表您可以更密切地監控您的應用程式,瞭解它們的即時效能,並快速找出問題。 OpenTelemetry 的儀器函式庫可自動啟用 .NET 應用程式的追蹤與度量資料收集功能。

透過 OpenTelemetry Framework 所收集的度量指標,開發人員可獲得對 .NET 執行環境的寶貴洞察力。 OpenTelemetry .NET 實作支援 .NET runtime,包括 .NET Core 和 .NET Framework。 它遵守 OpenTelemetry 協定,以進行標準化的遙測資料收集。

設定您的環境。

首先,您需要在您的電腦上安裝 .NET SDK。如果您使用 Visual Studio,它很可能已隨附 .NET SDK。 您可以開啟命令列並執行,檢查您目前的 .NET SDK 版本:

dotnet --version

接下來,執行以下步驟建立新的 .NET Web 專案:

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

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

整合 OpenTelemetry

新增所需的套件

首先,在您的專案中加入必要的 OpenTelemetry 套件。 開啟您的終端機,並導航至您的專案目錄。 然後,使用 NuGet Package Manager 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>
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

以每個套件的最新版本取代

在您的應用程式中設定 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();
    });
}
$vbLabelText   $csharpLabel

本程式碼片段展示如何設定 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);
    });
}
$vbLabelText   $csharpLabel

此設定可從 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();
});
$vbLabelText   $csharpLabel

此程式碼片段示範如何建立自訂指標,以計算對您應用程式的請求,並以請求路徑標記每個指標。 透過利用 OpenTelemetry 提供的擴充方法,開發人員可對遙測資料收集程序進行更仔細的控制。

測試您的整合

使用命令列或 Visual Studio 執行您的應用程式。 向您的應用程式提出一些請求,方法是在網頁瀏覽器中導航至其 URL,或是使用 curl 之類的工具。 您應該可以看到遙測資料,包括軌跡和指標,列印到您的主控台輸出。

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

IronPDF 簡介

Opentelemetry C# (How It Works For Developers):圖 2 - IronPdf

IronPDF 是專為 C# 開發人員設計的功能強大的函式庫,可直接在 .NET 應用程式中產生、處理和渲染 PDF 文件。 此功能對於從使用 HTML 的 Web 應用程式、服務或桌面應用程式產生報告、發票或任何 以文件為基礎的輸出尤其有用。結合 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");
    }
}
$vbLabelText   $csharpLabel

設定 IronPDF。

首先,您需要將 IronPDF 加入您的 .NET 專案。 您可以使用 NuGet Package Manager 進行這項工作。 開啟您的終端機,並導航至您的專案目錄。 然後,執行下列指令安裝 IronPdf:

dotnet add package IronPDF
dotnet add package IronPDF
SHELL

使用 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;
        }
    }
}
$vbLabelText   $csharpLabel

在這個範例中,我們建立一個新的服務類 PdfService,其中包含一個方法 GeneratePdf,用來產生 PDF 文件。 我們使用 IronPDF 的 ChromePdfRenderer 類將 HTML 呈現為 PDF 文件。 透過 OpenTelemetry,我們啟動一個名為"Generate PDF"的新活動來監控這項作業。 我們在活動中加入自訂標籤,以提供 PDF 產生過程的其他相關資訊,例如 PDF 的大小、內容類型和輸出路徑。 我們也會捕捉任何異常,以便在同一活動中適當地記錄錯誤。

結論

Opentelemetry C# (How It Works For Developers):圖 3 - 授權

將 OpenTelemetry 整合到您的 .NET 應用程式中,可讓您收集寶貴的遙測資料,並深入瞭解應用程式的效能與行為。 按照本教學中概述的步驟,您已為 .NET Web 應用程式設定了基本的追蹤和度量資料收集。 透過探索更先進的 OpenTelemetry 功能來進一步實驗,例如匯出遙測資料至外部監控工具,或收集軌跡和指標旁的日誌。

IronPDF 提供 免費試用版的 IronPDF,供生產測試其完整功能。 授權費用低至 399 美元起。

常見問題解答

在 C# 開發中,OpenTelemetry 的用途是什麼?

OpenTelemetry 提供了一種統一的方法來收集、處理和匯出遙測數據,例如追蹤、指標和日誌,使開發人員能夠即時監控和了解應用程式效能。

我該如何開始將 OpenTelemetry 整合到我的 C# 應用程式中?

首先透過 NuGet 安裝必要的 OpenTelemetry 包,然後透過修改「Startup.cs」中的「ConfigureServices」方法來配置應用程序,以包含 OpenTelemetry 追蹤和指標。

在 C# 中設定 OpenTelemetry 環境需要哪些步驟?

請確保您的電腦上已安裝 .NET SDK。您可以透過在命令列中執行dotnet --version來驗證安裝情況。

如何使用HTML內容在C#中產生PDF?

您可以使用 IronPDF 庫的ChromePdfRenderer類別將 HTML 渲染為 PDF 文檔,然後使用SaveAs方法儲存產生的 PDF。

如何在 C# 應用程式中監控 PDF 生成過程?

使用 OpenTelemetry 的Tracer建立 PDF 生成活動,新增自訂標籤以記錄有關該過程的相關信息,以便進行監控。

什麼是自訂指標?如何在 OpenTelemetry 中使用 C# 實作自訂指標?

自訂指標是應用程式特定的資料點,您可以透過使用 OpenTelemetry 的MeterCounter類別手動偵測程式碼來收集這些資料點。

如何在C#中確保產生可靠的PDF檔案?

使用 IronPDF 庫可以可靠地產生、操作和渲染 PDF 文件。 IronPDF 提供強大的功能,確保您的應用程式輸出高品質的 PDF 檔案。

是否有適用於 C# 中產生 PDF 的庫的授權選項?

IronPDF 提供免費試用版用於生產測試,許可證起價為 399 美元,使開發人員能夠探索其全部功能。

如何在 C# 應用程式中測試我的 OpenTelemetry 整合?

運行您的應用程序,並使用 Web 瀏覽器或 curl 等工具發出請求,然後觀察輸出到控制台的遙測數據,例如追蹤和指標。

Jacob Mellor,Team Iron 首席技術官
首席技術長

Jacob Mellor 是 Iron Software 的首席技術官,也是一位富有遠見的工程師,率先開發了 C# PDF 技術。作為 Iron Software 核心程式碼庫的最初開發者,他自公司成立之初便參與塑造了其產品架構,並與執行長 Cameron Rimington 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。