.NET 帮助

Appmetrics C#(开发人员如何使用)

发布 2024年七月1日
分享:

AppMetrics C# 是一款功能强大的工具,旨在简化应用程序监控和性能分析。通过 App Metrics 抽象,它简化了跟踪应用程序各个方面的复杂性。无论您使用的是 .NET Core 还是 .NET Framework,这个 .NET 库都能让您高效地记录度量类型。您可以检索指标并利用 App Metrics 支持的指标类型来获得全面的见解。

.NET库支持检索指标,并允许您以指定的时间间隔刷新指标,确保及时收集数据。它还提供一种扩展方法,为增强灵活性提供扩展点。作为一种跨平台解决方案,AppMetrics 适用于各种环境,可确保一致的性能监控。

IronPDF 是 C# 开发人员的另一个基本库,尤其是在处理 PDF 文档时。它可以直接在 .NET Core 应用程序中创建、编辑和提取 PDF 文件。在需要从应用程序中生成 PDF 格式的报告、发票或任何其他文档时,这一点尤其有用。

开始使用 AppMetrics

要将跨平台 App Metrics 集成到 .NET 项目中,首先要安装 AppMetrics 库。您可以使用 .NET 的软件包管理器 NuGet 软件包来完成这项工作。在您的项目中,在 NuGet 包管理器控制台中运行以下命令:

Install-Package App.Metrics.AspNetCore
Install-Package App.Metrics.AspNetCore
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package App.Metrics.AspNetCore
VB   C#

Appmetrics C#(如何为开发人员工作):图 1 - AppMetrics

该命令将所有必要的依赖项添加到项目中,使您可以开始配置 AppMetrics。

基本代码示例:监控 HTTP 请求

下面介绍如何使用 AppMetrics 在 .NET 应用程序中设置 HTTP 请求的基本监控。首先,在Startup.cs文件中建立度量。在 ConfigureServices 方法中添加以下代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMetrics(); // metric type
    services.AddMetricsTrackingMiddleware();
    services.AddMetricsEndpoints();
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddMetrics(); // metric type
    services.AddMetricsTrackingMiddleware();
    services.AddMetricsEndpoints();
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	services.AddMetrics() ' metric type
	services.AddMetricsTrackingMiddleware()
	services.AddMetricsEndpoints()
End Sub
VB   C#

接下来,在同一文件的配置方法中,确保添加 AppMetrics 中间件来处理监控:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseMetricsAllMiddleware();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseMetricsAllMiddleware();
}
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
	app.UseMetricsAllMiddleware()
End Sub
VB   C#

此设置会自动开始捕获有关传入应用程序的 HTTP 请求的指标,如请求计数、请求持续时间和错误率。

实施 App Metrics 的功能

录制自定义指标

要创建和记录自定义指标或测量应用程序中的内容,AppMetrics 提供了一种灵活的方式来定义需要跟踪的内容。下面是一个记录简单计数器以跟踪用户登录的示例:

public class LoginTracker
{
    private readonly IMetrics _metrics;
    public LoginTracker(IMetrics metrics)
    {
        _metrics = metrics;
    }
    public void TrackLogin(string userId)
    {
        _metrics.Measure.Counter.Increment(MetricsRegistry.Logins, new MetricTags("UserId", userId));
    }
}
public class LoginTracker
{
    private readonly IMetrics _metrics;
    public LoginTracker(IMetrics metrics)
    {
        _metrics = metrics;
    }
    public void TrackLogin(string userId)
    {
        _metrics.Measure.Counter.Increment(MetricsRegistry.Logins, new MetricTags("UserId", userId));
    }
}
Public Class LoginTracker
	Private ReadOnly _metrics As IMetrics
	Public Sub New(ByVal metrics As IMetrics)
		_metrics = metrics
	End Sub
	Public Sub TrackLogin(ByVal userId As String)
		_metrics.Measure.Counter.Increment(MetricsRegistry.Logins, New MetricTags("UserId", userId))
	End Sub
End Class
VB   C#

在这段代码中,每次调用 TrackLogin 时,指定用户 ID 的登录计数器都会增加。

衡量应用程序性能

AppMetrics 还可用于衡量应用程序性能。例如,您可以使用计时器跟踪特定方法的持续时间:

public void ProcessData()
{
    using (_metrics.Measure.Timer.Time(MetricsRegistry.DatabaseQueryTimer))
    {
        // Code to execute a database query
    }
}
public void ProcessData()
{
    using (_metrics.Measure.Timer.Time(MetricsRegistry.DatabaseQueryTimer))
    {
        // Code to execute a database query
    }
}
Public Sub ProcessData()
	Using _metrics.Measure.Timer.Time(MetricsRegistry.DatabaseQueryTimer)
		' Code to execute a database query
	End Using
End Sub
VB   C#

该计时器记录了 ProcessData 方法的执行时间,可帮助用户深入了解数据库查询的性能。

向仪表板报告指标

为了可视化和监控各种指标类型,AppMetrics 可以将数据报告到不同的仪表板。以下是如何配置向 InfluxDB 面板报告的方法:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMetricsReportingHostedService();
    services.AddMetricsBuild(builder =>
    {
        builder.Report.ToInfluxDb(options =>
        {
            options.InfluxDb.BaseUri = new Uri("http://your-influxdb-server");
            options.InfluxDb.Database = "appmetricsdb";
            options.InfluxDb.UserName = "user";
            options.InfluxDb.Password = "password";
            options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30);
            options.HttpPolicy.FailuresBeforeBackoff = 5;
            options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10);
            options.FlushInterval = TimeSpan.FromSeconds(5);
        });
    });
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddMetricsReportingHostedService();
    services.AddMetricsBuild(builder =>
    {
        builder.Report.ToInfluxDb(options =>
        {
            options.InfluxDb.BaseUri = new Uri("http://your-influxdb-server");
            options.InfluxDb.Database = "appmetricsdb";
            options.InfluxDb.UserName = "user";
            options.InfluxDb.Password = "password";
            options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30);
            options.HttpPolicy.FailuresBeforeBackoff = 5;
            options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10);
            options.FlushInterval = TimeSpan.FromSeconds(5);
        });
    });
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	services.AddMetricsReportingHostedService()
	services.AddMetricsBuild(Sub(builder)
		builder.Report.ToInfluxDb(Sub(options)
			options.InfluxDb.BaseUri = New Uri("http://your-influxdb-server")
			options.InfluxDb.Database = "appmetricsdb"
			options.InfluxDb.UserName = "user"
			options.InfluxDb.Password = "password"
			options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30)
			options.HttpPolicy.FailuresBeforeBackoff = 5
			options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10)
			options.FlushInterval = TimeSpan.FromSeconds(5)
		End Sub)
	End Sub)
End Sub
VB   C#

跟踪内存使用情况

监控系统内存使用情况对性能调整至关重要。下面介绍如何跟踪可用内存:

public void CheckSystemMemory()
{
    var freeMemory = GC.GetTotalMemory(false);
    _metrics.Measure.Gauge.SetValue(MetricsRegistry.FreeMemory, freeMemory);
}
public void CheckSystemMemory()
{
    var freeMemory = GC.GetTotalMemory(false);
    _metrics.Measure.Gauge.SetValue(MetricsRegistry.FreeMemory, freeMemory);
}
Public Sub CheckSystemMemory()
	Dim freeMemory = GC.GetTotalMemory(False)
	_metrics.Measure.Gauge.SetValue(MetricsRegistry.FreeMemory, freeMemory)
End Sub
VB   C#

该工具可测量应用程序的可用内存,帮助您了解内存消耗模式。

在指定时间间隔处理指标

AppMetrics 可配置为按指定时间间隔处理指标收集。这有助于在不频繁记录数据的情况下保持性能:

public void ConfigureScheduledReporting(IApplicationBuilder app)
{
    var metrics = app.ApplicationServices.GetService<IMetricsRoot>();
    var scheduler = new AppMetricsTaskScheduler(
        TimeSpan.FromSeconds(60),
        async () =>
        {
            await Task.WhenAll(metrics.ReportRunner.RunAllAsync()); // await task
        });
    scheduler.Start();
}
public void ConfigureScheduledReporting(IApplicationBuilder app)
{
    var metrics = app.ApplicationServices.GetService<IMetricsRoot>();
    var scheduler = new AppMetricsTaskScheduler(
        TimeSpan.FromSeconds(60),
        async () =>
        {
            await Task.WhenAll(metrics.ReportRunner.RunAllAsync()); // await task
        });
    scheduler.Start();
}
Public Sub ConfigureScheduledReporting(ByVal app As IApplicationBuilder)
	Dim metrics = app.ApplicationServices.GetService(Of IMetricsRoot)()
	Dim scheduler = New AppMetricsTaskScheduler(TimeSpan.FromSeconds(60), Async Sub()
			Await Task.WhenAll(metrics.ReportRunner.RunAllAsync()) ' await task
	End Sub)
	scheduler.Start()
End Sub
VB   C#

该配置将指标设置为每 60 秒报告一次,确保了性能监控的一致性,而不会因持续的数据记录而使系统不堪重负。

将 AppMetrics 与 IronPDF 集成

在您的C#应用程序中使用度量和生成PDF时,将AppMetrics C#与IronPDF结合起来会非常有益。通过这种集成,您可以直接从度量数据中生成 PDF 格式的报告,这对于绩效考核、客户演示甚至内部审计都非常有用。

IronPDF 简介

IronPDF 是一个综合库,可帮助开发人员使用 C# 创建、阅读和编辑 PDF 文档。IronPDF 的与众不同之处在于它能够 将 HTML 转换为 PDF因此,它对基于网络的报告生成尤为重要。这种功能可确保保留报告的视觉效果,从网络到打印形式都能保持高度的逼真性。

IronPDF 与 AppMetrics C&num 合并的用例;

假设您需要向利益相关者提供应用程序的月度性能报告。这些报告包括响应时间、错误率、用户会话等指标。使用开源 AppMetrics C#,您可以无缝捕获这些指标。通过将此功能与 IronPDF 相结合,您可以在格式整洁的 PDF 文档中自动生成和分发这些指标。

用例代码示例

以下是如何实现此功能的完整示例。本示例假定您已经在项目中设置了 IronPDF 和 AppMetrics C#。

using App.Metrics;
using App.Metrics.Formatters.Prometheus;
using IronPdf;
public class MetricsToPdfConverter
{
    private readonly IMetricsRoot _metrics;
    public MetricsToPdfConverter(IMetricsRoot metrics)
    {
        _metrics = metrics;
    }
    public void GeneratePdfReport(string outputPath)
    {
        // Step 1: Capture the metrics snapshot
        var metricsData = _metrics.Snapshot.Get();
        var formatter = new MetricsPrometheusTextOutputFormatter();
        using var stream = new MemoryStream();
        formatter.WriteAsync(stream, metricsData).Wait();
        // Step 2: Convert the metrics snapshot to string format
        stream.Position = 0;
        var reader = new StreamReader(stream);
        var metricsText = reader.ReadToEnd();
        // Step 3: Use IronPDF to convert the metrics text to a PDF document
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1> Metrics Report </h1> <pre>" + metricsText + "</pre>");
        // Step 4: Save the PDF document
        pdf.SaveAs(outputPath);
    }
}
// Usage
var metrics = new MetricsBuilder().Build();
var pdfConverter = new MetricsToPdfConverter(metrics);
pdfConverter.GeneratePdfReport("MonthlyPerformanceReport.pdf");
using App.Metrics;
using App.Metrics.Formatters.Prometheus;
using IronPdf;
public class MetricsToPdfConverter
{
    private readonly IMetricsRoot _metrics;
    public MetricsToPdfConverter(IMetricsRoot metrics)
    {
        _metrics = metrics;
    }
    public void GeneratePdfReport(string outputPath)
    {
        // Step 1: Capture the metrics snapshot
        var metricsData = _metrics.Snapshot.Get();
        var formatter = new MetricsPrometheusTextOutputFormatter();
        using var stream = new MemoryStream();
        formatter.WriteAsync(stream, metricsData).Wait();
        // Step 2: Convert the metrics snapshot to string format
        stream.Position = 0;
        var reader = new StreamReader(stream);
        var metricsText = reader.ReadToEnd();
        // Step 3: Use IronPDF to convert the metrics text to a PDF document
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1> Metrics Report </h1> <pre>" + metricsText + "</pre>");
        // Step 4: Save the PDF document
        pdf.SaveAs(outputPath);
    }
}
// Usage
var metrics = new MetricsBuilder().Build();
var pdfConverter = new MetricsToPdfConverter(metrics);
pdfConverter.GeneratePdfReport("MonthlyPerformanceReport.pdf");
Imports App.Metrics
Imports App.Metrics.Formatters.Prometheus
Imports IronPdf
Public Class MetricsToPdfConverter
	Private ReadOnly _metrics As IMetricsRoot
	Public Sub New(ByVal metrics As IMetricsRoot)
		_metrics = metrics
	End Sub
	Public Sub GeneratePdfReport(ByVal outputPath As String)
		' Step 1: Capture the metrics snapshot
		Dim metricsData = _metrics.Snapshot.Get()
		Dim formatter = New MetricsPrometheusTextOutputFormatter()
		Dim stream = New MemoryStream()
		formatter.WriteAsync(stream, metricsData).Wait()
		' Step 2: Convert the metrics snapshot to string format
		stream.Position = 0
		Dim reader = New StreamReader(stream)
		Dim metricsText = reader.ReadToEnd()
		' Step 3: Use IronPDF to convert the metrics text to a PDF document
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf("<h1> Metrics Report </h1> <pre>" & metricsText & "</pre>")
		' Step 4: Save the PDF document
		pdf.SaveAs(outputPath)
	End Sub
End Class
' Usage
Private metrics = (New MetricsBuilder()).Build()
Private pdfConverter = New MetricsToPdfConverter(metrics)
pdfConverter.GeneratePdfReport("MonthlyPerformanceReport.pdf")
VB   C#

Appmetrics C#(如何为开发人员工作):图 2 - PDF 报告输出

这种集成不仅能自动生成报告,还能确保报告易于阅读且格式专业,非常适合利益相关者会议或存档使用。

结论

Appmetrics C#(如何为开发人员工作):图 3 - 许可

总之,在您的.NET项目中将AppMetrics C#与IronPDF相结合,可为监控应用程序性能和生成高质量的PDF报告提供强大的解决方案。通过这种集成,您可以从使用 AppMetrics 捕捉详细的性能数据无缝过渡到使用 IronPDF 以清晰、专业的格式展示这些数据。

IronPDF 特别适合希望在应用程序中处理 PDF 文件的 C# 开发人员。它简化了 PDF 文档的创建和操作,并提供了将 HTML 直接转换为 PDF 的独特功能。如果您正在考虑将 IronPDF 纳入到您的项目中,他们提供了一个 免费试用 许可证起价为 749 美元,是提高文档处理能力的经济高效的方法。

< 前一页
C# 析构器(开发者如何使用)
下一步 >
Mathnet.Numerics C#(它是如何为开发者工作的)

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 10,731,156 查看许可证 >