Opentelemetry em C# (Como funciona para desenvolvedores)
O OpenTelemetry é um conjunto de ferramentas, APIs e SDKs que trabalham em conjunto para coletar, processar e exportar dados de telemetria, como rastreamentos, métricas e logs de seus aplicativos. Este tutorial tem como objetivo ajudar iniciantes a entender como integrar o OpenTelemetry em aplicações C# usando o método de extensão, com foco na coleta de métricas integradas para monitorar aplicações .NET de forma eficaz. Também aprenderemos sobre a biblioteca IronPDF para geração de PDFs em C# .
Introdução ao OpenTelemetry

O OpenTelemetry oferece uma maneira unificada de coletar todos os tipos de dados de seus aplicativos. Para desenvolvedores .NET , integrar o OpenTelemetry significa que você pode monitorar seus aplicativos mais de perto, entender como eles se comportam em tempo real e identificar problemas rapidamente. A biblioteca de instrumentação do OpenTelemetry habilita automaticamente o rastreamento e a coleta de métricas para aplicativos .NET .
Com as métricas coletadas pelo framework OpenTelemetry, os desenvolvedores obtêm informações valiosas sobre o ambiente de execução do .NET . A implementação OpenTelemetry .NET oferece suporte ao ambiente de execução .NET , incluindo .NET Core e .NET Framework. Ele segue o protocolo OpenTelemetry para coleta padronizada de dados de telemetria.
Preparando seu ambiente
Para começar, você precisará ter o SDK do .NET instalado em sua máquina. Se você estiver usando o Visual Studio, provavelmente ele já veio com o SDK do .NET . Você pode verificar sua versão atual do SDK do .NET abrindo uma linha de comando e executando o seguinte comando:
dotnet --version
Em seguida, crie um novo projeto Web .NET executando o seguinte comando:
dotnet new web -o MyTelemetryApp
cd MyTelemetryApp
dotnet new web -o MyTelemetryApp
cd MyTelemetryApp
Este comando cria um novo projeto ASP.NET Core em um diretório chamado MyTelemetryApp .
Integrando o OpenTelemetry
Adicionando os pacotes necessários
Primeiro, adicione os pacotes OpenTelemetry necessários ao seu projeto. Abra o terminal e navegue até o diretório do seu projeto. Em seguida, instale os seguintes pacotes usando a CLI do Gerenciador de Pacotes 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>
Substituir
Configurando o OpenTelemetry em seu aplicativo
Após adicionar os pacotes necessários, você precisa configurar o OpenTelemetry em sua aplicação. Isso envolve configurar o SDK OpenTelemetry e especificar quais dados de telemetria devem ser coletados. O OpenTelemetry oferece bibliotecas de instrumentação para integração perfeita com aplicativos .NET .
Abra o arquivo Startup.cs em seu projeto e modifique o método ConfigureServices para incluir OpenTelemetry, conforme mostrado no trecho de código abaixo:
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
Este trecho de código mostra como configurar o OpenTelemetry para coletar dados de telemetria de aplicativos ASP.NET Core e chamadas de clientes HTTP e, em seguida, exportar esses dados para o console. O método AddAspNetCoreInstrumentation habilita automaticamente a instrumentação para solicitações HTTP recebidas em aplicativos ASP.NET Core .
Coletando métricas
Para coletar métricas, você também precisará configurar a API OpenTelemetry Metrics, com foco em métricas em vez de rastreamento.
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
Essa configuração permite a coleta de métricas integradas do ASP.NET Core e da instrumentação do cliente HTTP, exportando-as para o console para facilitar a visualização.
Criação de métricas personalizadas
Embora o OpenTelemetry colete automaticamente muitas métricas úteis, você pode querer coletar métricas personalizadas específicas para sua aplicação. Utilizar um método de extensão fornecido pela biblioteca de instrumentação não só coleta telemetria automaticamente, como também oferece aos desenvolvedores um controle mais granular sobre as métricas emitidas. Isso pode ser conseguido instrumentando manualmente seu código para criar e registrar métricas personalizadas.
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)
Este trecho de código demonstra como criar uma métrica personalizada que contabiliza as solicitações para seu aplicativo, associando cada métrica ao caminho da solicitação. Ao aproveitar os métodos de extensão fornecidos pelo OpenTelemetry, os desenvolvedores podem exercer um controle mais preciso sobre o processo de coleta de dados de telemetria.
Testando sua integração
Execute sua aplicação usando a linha de comando ou o Visual Studio. Faça algumas requisições ao seu aplicativo, seja acessando seu URL em um navegador web ou usando uma ferramenta como o curl . Você deverá ver os dados de telemetria, incluindo rastreamentos e métricas, sendo impressos na saída do console.
curl http://localhost:5000
curl http://localhost:5000
Introdução ao IronPDF

IronPDF é uma biblioteca poderosa para desenvolvedores C#, que permite a geração, manipulação e renderização de documentos PDF diretamente em aplicações .NET . Essa funcionalidade é especialmente útil para gerar relatórios, faturas ou qualquer outro tipo de documento a partir de aplicações web que utilizam HTML , serviços ou aplicativos desktop. A combinação do IronPDF com o OpenTelemetry permite que os desenvolvedores monitorem o desempenho e a confiabilidade dos processos de geração de PDFs em seus aplicativos, garantindo uma experiência de usuário fluida.
O IronPDF se destaca na conversão de HTML para PDF , garantindo a preservação precisa dos layouts e estilos originais. É perfeito para criar PDFs a partir de conteúdo da web, como relatórios, faturas e documentação. Com suporte para arquivos HTML, URLs e strings HTML brutas, o IronPDF produz facilmente documentos PDF de alta qualidade.
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
Configurando o IronPDF
Primeiro, você precisa adicionar o IronPDF ao seu projeto .NET . Você pode fazer isso usando o Gerenciador de Pacotes NuGet . Abra o terminal e navegue até o diretório do seu projeto. Em seguida, execute o seguinte comando para instalar o IronPDF:
dotnet add package IronPDF
dotnet add package IronPDF
Geração de um PDF com IronPDF e monitoramento com OpenTelemetry
Abaixo, segue um exemplo de como gerar um documento PDF simples e monitorar a operação usando o OpenTelemetry. O exemplo a seguir pressupõe que você já tenha configurado o OpenTelemetry em sua aplicação, conforme mostrado anteriormente.
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
Neste exemplo, criamos uma nova classe de serviço chamada PdfService que inclui um método GeneratePdf para gerar um documento PDF. Utilizamos a classe ChromePdfRenderer do IronPDF para renderizar HTML como um documento PDF. Com o OpenTelemetry, iniciamos uma nova atividade chamada "Gerar PDF" para monitorar essa operação. Adicionamos tags personalizadas à atividade para fornecer contexto adicional sobre o processo de geração de PDF, como o tamanho do PDF, o tipo de conteúdo e o caminho de saída. Também capturamos quaisquer exceções para registrar erros adequadamente dentro da mesma atividade.
Conclusão

A integração do OpenTelemetry em seus aplicativos .NET permite coletar dados de telemetria valiosos, oferecendo insights sobre o desempenho e o comportamento do seu aplicativo. Seguindo os passos descritos neste tutorial, você configurou o rastreamento básico e a coleta de métricas para uma aplicação web .NET . Experimente ainda mais explorando recursos mais avançados do OpenTelemetry, como exportar dados de telemetria para ferramentas de monitoramento externas ou coletar registros juntamente com rastreamentos e métricas.
A IronPDF oferece um período de teste gratuito da IronPDF de produção para que você possa experimentar todas as suas funcionalidades. As licenças começam a partir de apenas US$ 399.
Perguntas frequentes
Qual é a finalidade do OpenTelemetry no desenvolvimento em C#?
O OpenTelemetry oferece uma abordagem unificada para coletar, processar e exportar dados de telemetria, como rastreamentos, métricas e logs, permitindo que os desenvolvedores monitorem e compreendam o desempenho do aplicativo em tempo real.
Como posso começar a integrar o OpenTelemetry em minha aplicação C#?
Comece instalando os pacotes OpenTelemetry necessários via NuGet e, em seguida, configure seu aplicativo modificando o método 'ConfigureServices' em 'Startup.cs' para incluir o rastreamento e as métricas do OpenTelemetry.
Quais são os passos necessários para configurar o ambiente do OpenTelemetry em C#?
Certifique-se de que o SDK do .NET esteja instalado em sua máquina. Você pode verificar a instalação executando o comando dotnet --version na linha de comando.
Como faço para gerar um PDF em C# usando conteúdo HTML?
Você pode usar a classe ChromePdfRenderer da biblioteca IronPDF para renderizar HTML como um documento PDF e, em seguida, usar o método SaveAs para salvar o PDF gerado.
Como posso monitorar o processo de geração de PDF em uma aplicação C#?
Utilize Tracer do OpenTelemetry para criar uma atividade de geração de PDF, adicionando tags personalizadas para registrar informações relevantes sobre o processo para fins de monitoramento.
O que são métricas personalizadas e como elas podem ser usadas no OpenTelemetry com C#?
As métricas personalizadas são pontos de dados específicos da aplicação que você pode coletar instrumentando manualmente seu código com as classes Meter e Counter do OpenTelemetry.
Como posso garantir a geração confiável de PDFs em C#?
Utilize a biblioteca IronPDF para gerar, manipular e renderizar documentos PDF de forma confiável. O IronPDF oferece recursos robustos para garantir a alta qualidade dos seus PDFs em suas aplicações.
Existem opções de licenciamento disponíveis para bibliotecas que auxiliam na geração de PDFs em C#?
O IronPDF oferece um período de teste gratuito para testes em produção, com licenças a partir de US$ 399, tornando-o acessível para que os desenvolvedores explorem todas as suas funcionalidades.
Como posso testar minha integração com o OpenTelemetry em um aplicativo C#?
Execute sua aplicação e faça requisições usando um navegador web ou ferramentas como o curl, depois observe os dados de telemetria, como rastreamentos e métricas, exibidos no console.




