푸터 콘텐츠로 바로가기
.NET 도움말

Opentelemetry C# (개발자를 위한 작동 방식)

OpenTelemetry는 애플리케이션에서 트레이스, 메트릭 및 로그와 같은 텔레메트리 데이터를 수집, 처리 및 내보내기 위해 함께 작동하는 도구, API 및 SDK 모음입니다. 이 튜토리얼은 확장 메서드를 사용하여 C# 애플리케이션에 OpenTelemetry를 통합하는 방법을 초보자들이 이해할 수 있도록 돕는 것을 목표로 하며, .NET 애플리케이션을 효과적으로 모니터링하기 위한 내장 메트릭 수집에 중점을 둡니다. C#에서의 PDF 생성용 IronPDF 라이브러리에 대해서도 배울 것입니다.

OpenTelemetry 소개

오픈텔레메트리 C# (개발자를 위한 작동 방식): 그림 1 - 오픈텔레메트리

OpenTelemetry는 애플리케이션에서 모든 종류의 데이터를 수집하는 통일된 방법을 제공합니다. .NET 개발자에게 OpenTelemetry를 통합하는 것은 애플리케이션을 더 면밀히 모니터링하고 실시간으로 성능을 이해하며 문제를 신속하게 식별할 수 있음을 의미합니다. OpenTelemetry의 계측 라이브러리는 .NET 앱을 위한 트레이싱 및 메트릭 수집을 자동으로 활성화합니다.

OpenTelemetry 프레임워크로 수집한 메트릭을 통해 개발자는 .NET 런타임 환경에 대한 귀중한 통찰력을 얻게 됩니다. OpenTelemetry .NET 구현은 .NET Core 및 .NET Framework를 포함하는 .NET 런타임을 지원합니다. 표준화된 텔레메트리 데이터 수집을 위한 OpenTelemetry 프로토콜을 준수합니다.

환경 설정하기

시작하려면 컴퓨터에 .NET SDK가 설치되어 있어야 합니다. Visual Studio를 사용 중이라면 아마 .NET SDK가 함께 설치되었을 것입니다. 현재 .NET SDK 버전을 확인하려면 명령줄을 열고 다음을 실행하십시오:

dotnet --version

다음으로, 다음을 실행하여 새 .NET 웹 프로젝트를 생성하십시오:

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

이 명령은 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>
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();
    });
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	services.AddControllers()
	services.AddOpenTelemetryTracing(Sub(builder)
		builder.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddConsoleExporter()
	End Sub)
End Sub
$vbLabelText   $csharpLabel

이 코드 스니펫은 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);
    });
}
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

이 설정은 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();
});
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

이 코드 스니펫은 애플리케이션에 대한 요청을 세고, 요청 경로를 각 메트릭에 태그로 추가하는 사용자 지정 메트릭을 만드는 방법을 보여줍니다. OpenTelemetry에서 제공하는 확장 메서드를 활용하여 개발자는 텔레메트리 데이터 수집 과정을 보다 세밀하게 제어할 수 있습니다.

통합 테스트

명령어 라인이나 Visual Studio를 사용하여 애플리케이션을 실행합니다. 애플리케이션의 URL로 웹 브라우저에서 접속하거나 curl 같은 도구를 사용하여 요청을 합니다. 콘솔 출력에 추적 및 메트릭을 포함한 텔레메트리 데이터가 출력되는 것을 확인할 수 있어야 합니다.

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

IronPDF 소개

오픈텔레메트리 C# (개발자를 위한 작동 방식): 그림 2 - IronPDF

IronPDF는 C# 개발자를 위한 강력한 라이브러리로, .NET 애플리케이션 내에서 PDF 문서를 생성하고 조작하며 렌더링할 수 있게 합니다. 이 기능은 특히 보고서, 청구서 또는 HTML, 서비스, 데스크톱 앱을 사용한 문서 기반 출력을 생성하는 데 유용합니다. OpenTelemetry와 IronPDF를 결합하여 개발자는 애플리케이션 내에서 PDF 생성 프로세스의 성능과 신뢰성을 모니터링하여 원활한 사용자 경험을 보장할 수 있습니다.

IronPDF는 원래 레이아웃과 스타일을 정확히 보존하여 HTML을 PDF로 변환하는 데 탁월합니다. 보고서, 송장 및 설명서와 같은 웹 기반 콘텐츠에서 PDF를 생성하는 데 완벽합니다. HTML 파일, URL 및 원시 HTML 문자열에 대한 지원으로 IronPDF는 고품질의 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

IronPDF 설정하기

먼저 IronPDF를 .NET 프로젝트에 추가해야 합니다. NuGet 패키지 관리자를 사용하여 이 작업을 수행할 수 있습니다. 터미널을 열고 프로젝트 디렉터리로 이동합니다. 그런 다음, 다음 명령어를 실행하여 IronPDF를 설치합니다:

dotnet add package IronPDF
dotnet add package IronPDF
SHELL

IronPDF로 PDF 생성 및 OpenTelemetry로 모니터링하기

아래는 간단한 PDF 문서를 생성하고 OpenTelemetry를 사용하여 작업을 모니터링하는 방법에 대한 예제입니다. 다음 예제는 앞서 설명한 대로 애플리케이션에서 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;
        }
    }
}
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

이 예제에서는 PDF 문서를 생성할 수 있는 PdfService라는 새로운 서비스 클래스와 GeneratePdf라는 메서드를 포함합니다. IronPDF의 ChromePdfRenderer 클래스를 사용하여 HTML을 PDF 문서로 렌더링합니다. OpenTelemetry로 "PDF 생성"이라는 새로운 활동을 시작하여 이 작업을 모니터합니다. PDF 생성 과정에 대한 추가적인 정보를 제공하기 위해 활동에 사용자 지정 태그를 추가합니다. 여기에는 PDF의 크기, 콘텐츠 타입, 출력 경로 등이 포함됩니다. 또한 동일한 활동 내에서 적절하게 오류를 기록할 수 있도록 예외를 포착합니다.

결론

오픈텔레메트리 C# (개발자를 위한 작동 방식): 그림 3 - 라이선싱

.NET 애플리케이션에 OpenTelemetry를 통합하면 애플리케이션의 성능과 동작에 대한 통찰력을 제공하는 귀중한 텔레메트리 데이터를 수집할 수 있습니다. 이 튜토리얼에서 설명된 단계를 따르면 .NET 웹 애플리케이션에 대한 기본적인 추적 및 메트릭 수집이 설정됩니다. 더 고급 OpenTelemetry 기능을 탐색하려면, 텔레메트리 데이터를 외부 모니터링 도구로 내보내거나 로그를 추적 및 메트릭과 함께 수집하는 방법을 실험하세요.

IronPDF는 생산에 대한 IronPDF의 무료 체험을 제공하여 그 모든 기능을 시험해 볼 수 있습니다. 라이센스는 $399부터 시작합니다.

자주 묻는 질문

C# 개발에서 OpenTelemetry의 목적은 무엇입니까?

OpenTelemetry는 추적, 메트릭, 로그와 같은 텔레메트리 데이터를 수집, 처리 및 내보내는 통합 접근 방식을 제공하여 개발자가 애플리케이션 성능을 실시간으로 모니터링하고 이해할 수 있도록 합니다.

C# 애플리케이션에 OpenTelemetry를 통합하는 것을 어떻게 시작할 수 있습니까?

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 생성을 위한 활동을 만들고, 모니터링 목적을 위해 프로세스에 대한 관련 정보를 기록하는 사용자 정의 태그를 추가합니다.

사용자 정의 메트릭이란 무엇이며 C#에서 OpenTelemetry와 함께 어떻게 사용할 수 있습니까?

사용자 정의 메트릭은 OpenTelemetry의 MeterCounter 클래스를 사용하여 코드를 수동으로 계측하여 수집할 수 있는 애플리케이션별 데이터 포인트입니다.

C#에서 신뢰할 수 있는 PDF 생성 보장을 어떻게 할 수 있습니까?

IronPDF 라이브러리를 사용하여 PDF 문서를 생성, 조작 및 렌더링하여 신뢰성을 보장합니다. IronPDF는 애플리케이션에서 고품질 PDF 출력을 보장하는 강력한 기능을 제공합니다.

C#에서 PDF 생성을 지원하는 라이브러리에 대한 라이센스 옵션이 있습니까?

IronPDF는 생산 테스트를 위한 무료 체험판을 제공하며, 라이센스는 $399부터 시작하여 개발자가 그 기능을 충분히 탐구할 수 있게 합니다.

C# 애플리케이션에서 OpenTelemetry 통합을 어떻게 테스트할 수 있습니까?

웹 브라우저나 curl과 같은 도구를 사용하여 애플리케이션을 실행하고 요청을 보낸 후, 콘솔에 출력되는 추적 및 메트릭과 같은 텔레메트리 데이터를 관찰합니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해