
Introducción
La creación de documentos PDF dinámicos, impulsados por datos y ricos es una demanda típica en muchos sectores del desarrollo de software moderno. Las empresas dependen en gran medida de su capacidad para generar rápidamente PDF de alta calidad, ya sea para crear facturas, informes o documentación. Sin embargo, rastrear y comprender la efectividad de los procesos de producción de PDF se vuelve esencial para preservar la salud de las aplicaciones y garantizar la satisfacción del usuario a medida que se vuelven más complicadas y a gran escala.
Este artículo tiene como objetivo discutir cómo los desarrolladores pueden mejorar las operaciones de generación de PDF y proporcionar información importante sobre el rendimiento de las aplicaciones utilizando las características de IronPDF y OpenTelemetry.NET. Exploraremos las características y ventajas de ambas tecnologías y mostraremos cómo pueden trabajar juntas armoniosamente para optimizar la creación y el monitoreo de PDF en aplicaciones .NET.
¿Qué es OpenTelemetry?
OpenTelemetry es un marco de observabilidad neutral creado especialmente para aplicaciones nativas de la nube. La instrumentación automática de OpenTelemetry proporciona una única API para recopilar información de telemetría, incluidos registros, trazas y métricas. Con el uso de estos datos extensos, los desarrolladores pueden depurar problemas de manera efectiva, identificar cuellos de botella de rendimiento y obtener una comprensión completa del comportamiento del programa. OpenTelemetry admite tanto la instrumentación automática como manual para una recopilación de datos de telemetría completa y flexible.
Componentes clave de OpenTelemetry
API: Para instrumentar aplicaciones y generar datos de telemetría, OpenTelemetry especifica un conjunto estandarizado de API. Esto simplifica el proceso de instrumentación y garantiza la coherencia entre diversos lenguajes de programación.
- SDK: para instrumentar aplicaciones, OpenTelemetry ofrece SDK adaptados a determinados lenguajes. Los desarrolladores pueden incorporar fácilmente la funcionalidad de OpenTelemetry en sus proyectos .NET con la ayuda del SDK de .NET.
- Exportadores: Estas partes son las encargadas de transmitir los datos de telemetría que se han recopilado a los sistemas backend para que puedan ser almacenados y examinados. OpenTelemetry admite muchos exportadores de sistemas de backend ampliamente usados, como Zipkin (trazado), Prometheus (métricas) y Jaeger (trazado).
- Instrumentación automática: este método simplifica el proceso para aplicaciones .NET Core . Las bibliotecas de OpenTelemetry pueden capturar automáticamente datos para operaciones comunes dentro de su aplicación o servicio web. Esto elimina las modificaciones manuales del código, agilizando el proceso de integración.
- Instrumentación manual: para un control granular sobre la recopilación de datos, OpenTelemetry proporciona una API sólida para la instrumentación manual. Este enfoque le permite capturar métricas y trazas específicas relacionadas con la lógica única de su aplicación. Es particularmente útil para aplicaciones de .NET Framework o escenarios donde la instrumentación automática no cubre sus necesidades específicas.
Beneficios del uso de OpenTelemetry en .NET
Integrar OpenTelemetry en sus aplicaciones .NET ofrece varias ventajas:
- Neutralidad del proveedor: OpenTelemetry ofrece flexibilidad y prepara su aplicación para el futuro integrándose sin esfuerzo con una variedad de sistemas backend. Su código de instrumentación no necesita ser cambiado para cambiar de sistemas de backend.
- Enfoque estandarizado: la instrumentación de varias áreas de su aplicación se hace más fácil gracias a la API uniforme. Los desarrolladores pueden usar la misma API para recopilar registros, trazas y métricas, lo que resulta en un código más fácil de leer y mantener.
- Análisis de rendimiento en profundidad: OpenTelemetry ofrece una gran cantidad de datos (métricas, seguimientos y registros) para un análisis de rendimiento integral. Con esta perspectiva integral, puede identificar áreas de optimización y determinar la fuente subyacente de los problemas.
- Mejor resolución de problemas: los desarrolladores pueden detectar y solucionar problemas más fácilmente siguiendo la ruta de las solicitudes a través de su aplicación utilizando los completos datos de seguimiento que captura OpenTelemetry.
- Escalabilidad mejorada: la complejidad de su aplicación no obstaculizará la capacidad de escalabilidad de OpenTelemetry. Nuevas funciones o servicios pueden ser instrumentados fácilmente sin requerir grandes modificaciones en el código.
Crear y configurar OpenTelemetry
Configurar OpenTelemetry en la aplicación ASP.NET
OpenTelemetry necesita ser configurado en su aplicación; para aplicaciones ASP.NET Core, esto generalmente se realiza en el método ConfigureServices de su archivo Startup.cs. Esta es una ilustración de una configuración de exportador Jaeger:
using OpenTelemetry.Trace;
using OpenTelemetry.Exporter.Jaeger;
using OpenTelemetry.Resources;
public void ConfigureServices(IServiceCollection services)
{
// Configure OpenTelemetry
services.AddOpenTelemetry().WithTracing(builder =>
{
// Configure Jaeger exporter. The 'serviceName' can be read from environment variables
builder
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService("YourServiceName"))
.AddAspNetCoreInstrumentation()
.AddJaegerExporter(opt =>
{
opt.AgentHost = "localhost"; // Jaeger agent host
opt.AgentPort = 14250; // Jaeger agent port
});
});
// Other service configurations...
}Imports OpenTelemetry.Trace
Imports OpenTelemetry.Exporter.Jaeger
Imports OpenTelemetry.Resources
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Configure OpenTelemetry
services.AddOpenTelemetry().WithTracing(Sub(builder)
' Configure Jaeger exporter. The 'serviceName' can be read from environment variables
builder.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("YourServiceName")).AddAspNetCoreInstrumentation().AddJaegerExporter(Sub(opt)
opt.AgentHost = "localhost" ' Jaeger agent host
opt.AgentPort = 14250 ' Jaeger agent port
End Sub)
End Sub)
' Other service configurations...
End SubReemplace "YourServiceName" con el nombre real de su servicio. Ajuste el host y el puerto del agente Jaeger según las opciones de configuración de Jaeger.
Añadir OpenTelemetry Middleware
Debe incluir el middleware de OpenTelemetry en aplicaciones ASP.NET Core para obtener una instrumentación automática de las solicitudes HTTP entrantes. En el método Configure de su archivo Startup.cs, añada el middleware:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Add Prometheus metrics middleware if using Prometheus
app.UseHttpMetrics();
// Other middleware configurations...
}Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
' Add Prometheus metrics middleware if using Prometheus
app.UseHttpMetrics()
' Other middleware configurations...
End SubIniciar rastreo
Después de configurar todo, OpenTelemetry comenzará a rastrear las solicitudes HTTP entrantes y enviará información de telemetría al backend de Jaeger configurado automáticamente.
Verificar y supervisar
Puede verificar trazas en su backend de Jaeger para confirmar que OpenTelemetry está funcionando correctamente. Abra la interfaz de usuario de Jaeger (generalmente disponible en http://localhost:16686 para Jaeger UI) y busque trazas asociadas con su servicio.
Elija un sistema backend (opcional)
OpenTelemetry no es imprescindible para la instrumentación básica, pero se integra con otros sistemas operativos de backend para almacenar y procesar datos de telemetría. Las opciones populares incluyen los sistemas operativos oficialmente compatibles:
- Jaeger (trazado)
- Prometheus (métricas)
- Zipkin (trazado)
Empezando
¿Qué es IronPDF?
El popular paquete .NET IronPDF le permite crear, editar y renderizar documentos PDF dentro de programas .NET. Las funciones para trabajar con PDF son numerosas e incluyen convertir páginas HTML a PDF, extraer texto e imágenes de PDF, agregar texto, imágenes y formas a documentos PDF preexistentes, y producir PDF a partir de contenido HTML, fotos o datos sin procesar.
Dos de las principales ventajas de IronPDF son su facilidad de uso y simplicidad. Los desarrolladores pueden comenzar a crear PDF fácilmente dentro de sus proyectos .NET debido a su API intuitiva y documentación completa. La eficiencia y la velocidad de IronPDF son características adicionales que ayudan a los desarrolladores a crear documentos PDF de alta calidad de forma rápida y eficiente.
Algunos de los beneficios de IronPDF:
- Producción de PDFs a partir de HTML, imágenes y datos sin procesar
- Extracción de texto e imágenes de archivos PDF
- Incorporar marcas de agua, encabezados y pies de página en archivos PDF
- Los archivos PDF están protegidos por cifrado y una contraseña
- La capacidad de firmar electrónicamente y completar formularios
Instalar el paquete NuGet
Múltiples paquetes NuGet están disponibles para diferentes componentes de OpenTelemetry. Dependiendo de sus necesidades, puede instalar los paquetes requeridos. Para enviar datos de telemetría a un backend de observabilidad (como Jaeger, Zipkin o Prometheus), al menos necesitará el paquete OpenTelemetry, paquetes de instrumentación para su marco de aplicación (como ASP.NET Core) y un paquete exportador. Además, asegúrese de que el paquete IronPDF esté instalado en su proyecto. Para instalarlo, use la Consola del Administrador de Paquetes NuGet:
Install-Package OpenTelemetry
Install-Package OpenTelemetry.Instrumentation.AspNetCore
Install-Package OpenTelemetry.Exporter.Jaeger
Install-Package IronPdf
Uso de OpenTelemetry con IronPDF
Abra el archivo Startup.cs de su aplicación ASP.NET Core para acceder al método ConfigureServices. Para configurar IronPDF, incluya el siguiente código.
using IronPdf;
public void ConfigureServices(IServiceCollection services)
{
// Configure IronPDF
services.AddSingleton<HtmlToPdf>();
// Other service configurations...
}Imports IronPdf
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Configure IronPDF
services.AddSingleton(Of HtmlToPdf)()
' Other service configurations...
End SubEste código asegura que se cree y utilice una instancia de HtmlToPdf en la aplicación solo configurando el servicio HtmlToPdf de IronPDF como un singleton.
Puede rastrear y observar los procesos de generación de PDF en sus aplicaciones .NET integrando OpenTelemetry.NET con IronPDF. Veamos el ejemplo de código en profundidad, revisando cada paso paso a paso:
using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using Microsoft.Extensions.Logging;
using IronPdf;
namespace DemoWebApplication.Controllers
{
[ApiController]
[Route("[controller]")]
public class DemoController : ControllerBase
{
private readonly HtmlToPdf _htmlToPdf;
private readonly ILogger<DemoController> _logger;
private readonly Tracer _tracer;
public DemoController(ILogger<DemoController> logger, HtmlToPdf htmlToPdf, TracerProvider tracerProvider)
{
_tracer = tracerProvider.GetTracer("Demo");
_htmlToPdf = htmlToPdf;
_logger = logger;
}
[HttpGet]
public FileContentResult Generate()
{
// Define the PDF file name
string fileName = "Sample.pdf";
// Generate PDF from HTML content
_logger.LogInformation("Generating PDF...");
var pdfBytes = GeneratePdf("Hello, IronPDF!");
// Return the PDF as a file result
return new FileContentResult(pdfBytes, "application/pdf")
{
FileDownloadName = fileName
};
}
private byte[] GeneratePdf(string htmlContent)
{
// Start a tracing activity for PDF generation
using (var activity = _tracer.StartActiveSpan("PDF Generation"))
{
var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
// Log PDF generation
_logger.LogInformation("PDF generated successfully.");
return pdfDocument.BinaryData;
}
}
}
}Imports Microsoft.AspNetCore.Mvc
Imports OpenTelemetry.Trace
Imports System.Diagnostics
Imports Microsoft.Extensions.Logging
Imports IronPdf
Namespace DemoWebApplication.Controllers
<ApiController>
<Route("[controller]")>
Public Class DemoController
Inherits ControllerBase
Private ReadOnly _htmlToPdf As HtmlToPdf
Private ReadOnly _logger As ILogger(Of DemoController)
Private ReadOnly _tracer As Tracer
Public Sub New(ByVal logger As ILogger(Of DemoController), ByVal htmlToPdf As HtmlToPdf, ByVal tracerProvider As TracerProvider)
_tracer = tracerProvider.GetTracer("Demo")
_htmlToPdf = htmlToPdf
_logger = logger
End Sub
<HttpGet>
Public Function Generate() As FileContentResult
' Define the PDF file name
Dim fileName As String = "Sample.pdf"
' Generate PDF from HTML content
_logger.LogInformation("Generating PDF...")
Dim pdfBytes = GeneratePdf("Hello, IronPDF!")
' Return the PDF as a file result
Return New FileContentResult(pdfBytes, "application/pdf") With {.FileDownloadName = fileName}
End Function
Private Function GeneratePdf(ByVal htmlContent As String) As Byte()
' Start a tracing activity for PDF generation
Using activity = _tracer.StartActiveSpan("PDF Generation")
Dim pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent)
' Log PDF generation
_logger.LogInformation("PDF generated successfully.")
Return pdfDocument.BinaryData
End Using
End Function
End Class
End NamespaceEn este ejemplo:
- Inyectamos el
HtmlToPdf,ILogger, yTracerProvideren elDemoController. - El método
Generateinicia una descarga de archivo, devolviendo un PDF creado dinámicamente con el contenido 'Hello, IronPDF!'. - El método
GeneratePdfutiliza elHtmlToPdf.RenderHtmlAsPdfpara renderizar el PDF y produce los datos binarios del PDF. - El código usa OpenTelemetry para rastrear el proceso de generación de PDF y registra los datos de trazado.
Salida de PDF generada a partir del código fuente anterior:

Pantalla de la traza generada desde la interfaz de Jaeger:

Conclusión
OpenTelemetry es un cambio de juego para la optimización del rendimiento de las aplicaciones .NET y el monitoreo de la salud. Proporciona a los desarrolladores una comprensión profunda de los entresijos de sus aplicaciones al ofrecer un método neutral y estandarizado para recopilar, analizar y exportar datos de telemetría (métricas, trazas y registros).
Al integrar OpenTelemetry.NET con IronPDF, los desarrolladores pueden mejorar los flujos de trabajo para crear PDF y obtener información sobre el rendimiento de sus aplicaciones. Al aprovechar la implementación de OpenTelemetry.NET para instrumentar manualmente los procesos de generación de PDF, los desarrolladores pueden rastrear caminos de ejecución, monitorear métricas de rendimiento e identificar áreas que requieren optimización. Además, la recopilación y el análisis de métricas de monitoreo centralizado son posibles al exportar datos de telemetría a plataformas de observabilidad, brindando a los desarrolladores la capacidad de preservar la salud de sus aplicaciones y proporcionar una experiencia de usuario impecable.
La integración de la implementación de OpenTelemetry.NET con IronPDF puede mejorar los flujos de trabajo de los desarrolladores para crear PDF y garantizar escalabilidad, rendimiento y confiabilidad en aplicaciones .NET. La integración de estas tecnologías ayuda a los desarrolladores a cumplir con las necesidades del desarrollo de software moderno y producir resultados sobresalientes, ya sea creando facturas, informes o documentación.
Cuando se compra como un paquete, IronPDF tiene un precio razonable e incluye una licencia de por vida. El paquete ofrece un gran valor a solo $999, que es una tarifa única para muchos sistemas. Ofrece a los titulares de licencias soporte de ingeniería en línea las 24 horas, los 7 días de la semana. Por favor visite el sitio web de Iron Software para obtener más detalles sobre el cargo. Explore los productos de Iron Software para obtener más información sobre las soluciones que ofrecen.

Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, transformándola, junto con el director ejecutivo Cameron Rimington, en una empresa de más de 50 personas que presta servicios a la NASA, Tesla y organismos gubernamentales de todo el mundo.
Artículos Relacionados


