Przejdź do treści stopki
POMOC .NET

Appmetrics C# (Jak to działa dla programistów)

AppMetrics C# to potężne narzędzie zaprojektowane w celu usprawnienia monitorowania aplikacji i analizy wydajności. Dzięki streszczeniom AppMetrics upraszcza się złożoność związaną ze śledzeniem różnych aspektów aplikacji. Niezależnie od tego, czy korzystasz z .NET Core, czy z .NET Framework, ta biblioteka .NET umożliwia wydajne rejestrowanie typów metrycznych. Możesz pobierać wskaźniki i korzystać z typów wskaźników obsługiwanych przez AppMetrics, aby uzyskać kompleksowe informacje.

Biblioteka .NET obsługuje pobieranie metryk i umożliwia ich czyszczenie w określonych odstępach czasu, zapewniając terminowe gromadzenie danych. Oferuje również metodę rozszerzeń, zapewniającą punkty rozszerzalności dla większej elastyczności. Jako rozwiązanie wieloplatformowe, AppMetrics nadaje się do różnych środowisk i zapewnia spójne monitorowanie wydajności.

IronPDF: Advanced PDF Library for C# Developers to kolejna niezbędna biblioteka dla programistów C#, szczególnie podczas pracy z dokumentami PDF. Umożliwia tworzenie, edycję i wyodrębnianie plików PDF bezpośrednio w aplikacjach .NET Core. Może to być szczególnie przydatne w sytuacjach, gdy trzeba wygenerować raporty, faktury lub inne dokumenty w formacie PDF z poziomu aplikacji.

Pierwsze kroki z AppMetrics

Aby zintegrować wieloplatformowe AppMetrics z projektem .NET, należy najpierw zainstalować bibliotekę AppMetrics. Można to zrobić za pomocą pakietów NuGet, menedżera pakietów dla platformy .NET. W ramach projektu uruchom następujące polecenie w konsoli NuGet Package Manager Console:

Install-Package App.Metrics.AspNetCore

Appmetrics C# (How It Works For Developers): Figure 1 - AppMetrics

To polecenie dodaje wszystkie niezbędne zależności do projektu, umożliwiając rozpoczęcie konfiguracji AppMetrics.

Podstawowy przykład kodu: monitorowanie żądań HTTP

Oto jak skonfigurować podstawowe monitorowanie żądań HTTP w aplikacji .NET przy użyciu AppMetrics. Najpierw zbuduj metryki w pliku Startup.cs. Dodaj następujący kod do metody ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMetrics(); // Add basic metrics services
    services.AddMetricsTrackingMiddleware(); // Enable middleware for tracking
    services.AddMetricsEndpoints(); // Add endpoints for metrics exposure
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddMetrics(); // Add basic metrics services
    services.AddMetricsTrackingMiddleware(); // Enable middleware for tracking
    services.AddMetricsEndpoints(); // Add endpoints for metrics exposure
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	services.AddMetrics() ' Add basic metrics services
	services.AddMetricsTrackingMiddleware() ' Enable middleware for tracking
	services.AddMetricsEndpoints() ' Add endpoints for metrics exposure
End Sub
$vbLabelText   $csharpLabel

Następnie, w metodzie Configure tego samego pliku, upewnij się, że dodajesz oprogramowanie pośredniczące AppMetrics do obsługi monitorowania:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseMetricsAllMiddleware(); // Register the middleware to capture all metrics
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseMetricsAllMiddleware(); // Register the middleware to capture all metrics
}
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
	app.UseMetricsAllMiddleware() ' Register the middleware to capture all metrics
End Sub
$vbLabelText   $csharpLabel

Ta konfiguracja automatycznie rozpoczyna zbieranie metryk dotyczących przychodzących żądań HTTP do aplikacji, takich jak liczba żądań, czas trwania żądań i wskaźniki błędów.

Implementacja funkcji AppMetrics

Rejestrowanie niestandardowych metryk

Aby tworzyć i rejestrować niestandardowe metryki lub mierzyć różne aspekty aplikacji, AppMetrics udostępnia elastyczny sposób definiowania, co wymaga śledzenia. Oto przykład rejestrowania prostego licznika do śledzenia logowań użytkowników:

public class LoginTracker
{
    private readonly IMetrics _metrics;

    public LoginTracker(IMetrics metrics)
    {
        _metrics = metrics;
    }

    public void TrackLogin(string userId)
    {
        // Increment login counter for the specified user ID
        _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)
    {
        // Increment login counter for the specified user ID
        _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)
		' Increment login counter for the specified user ID
		_metrics.Measure.Counter.Increment(MetricsRegistry.Logins, New MetricTags("UserId", userId))
	End Sub
End Class
$vbLabelText   $csharpLabel

W tym kodzie za każdym razem, gdy wywoływana jest metoda TrackLogin, licznik logowań zwiększa się dla określonego identyfikatora użytkownika.

Mierzenie wydajności aplikacji

AppMetrics można również używać do mierzenia wydajności aplikacji. Na przykład można śledzić czas trwania konkretnej metody przy użyciu timerów:

public void ProcessData()
{
    // Measure time taken by the database query process
    using (_metrics.Measure.Timer.Time(MetricsRegistry.DatabaseQueryTimer))
    {
        // Code to execute a database query goes here
    }
}
public void ProcessData()
{
    // Measure time taken by the database query process
    using (_metrics.Measure.Timer.Time(MetricsRegistry.DatabaseQueryTimer))
    {
        // Code to execute a database query goes here
    }
}
Public Sub ProcessData()
	' Measure time taken by the database query process
	Using _metrics.Measure.Timer.Time(MetricsRegistry.DatabaseQueryTimer)
		' Code to execute a database query goes here
	End Using
End Sub
$vbLabelText   $csharpLabel

Ten timer rejestruje, jak długo metoda ProcessData wykonuje się, dostarczając informacji o wydajności zapytań do bazy danych.

Raportowanie metryk do dashboardu

Aby wizualizować i monitorować różne typy metryk, AppMetrics może raportować dane do różnych dashboardów. Oto jak skonfigurować raportowanie do dashboardu InfluxDB:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMetricsReportingHostedService();
    services.AddMetrics(builder =>
    {
        builder.Report.ToInfluxDb(options =>
        {
            options.InfluxDb.BaseUri = new Uri("http://your-influxdb-server"); // Configure InfluxDB server URI
            options.InfluxDb.Database = "appmetricsdb"; // Specify the database name
            options.InfluxDb.UserName = "user"; // Set database username
            options.InfluxDb.Password = "password"; // Set database password
            options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30); // Set backoff period
            options.HttpPolicy.FailuresBeforeBackoff = 5; // Set failure count before backoff
            options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10); // Set HTTP timeout duration
            options.FlushInterval = TimeSpan.FromSeconds(5); // Set interval for reporting metrics
        });
    });
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddMetricsReportingHostedService();
    services.AddMetrics(builder =>
    {
        builder.Report.ToInfluxDb(options =>
        {
            options.InfluxDb.BaseUri = new Uri("http://your-influxdb-server"); // Configure InfluxDB server URI
            options.InfluxDb.Database = "appmetricsdb"; // Specify the database name
            options.InfluxDb.UserName = "user"; // Set database username
            options.InfluxDb.Password = "password"; // Set database password
            options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30); // Set backoff period
            options.HttpPolicy.FailuresBeforeBackoff = 5; // Set failure count before backoff
            options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10); // Set HTTP timeout duration
            options.FlushInterval = TimeSpan.FromSeconds(5); // Set interval for reporting metrics
        });
    });
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	services.AddMetricsReportingHostedService()
	services.AddMetrics(Sub(builder)
		builder.Report.ToInfluxDb(Sub(options)
			options.InfluxDb.BaseUri = New Uri("http://your-influxdb-server") ' Configure InfluxDB server URI
			options.InfluxDb.Database = "appmetricsdb" ' Specify the database name
			options.InfluxDb.UserName = "user" ' Set database username
			options.InfluxDb.Password = "password" ' Set database password
			options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30) ' Set backoff period
			options.HttpPolicy.FailuresBeforeBackoff = 5 ' Set failure count before backoff
			options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10) ' Set HTTP timeout duration
			options.FlushInterval = TimeSpan.FromSeconds(5) ' Set interval for reporting metrics
		End Sub)
	End Sub)
End Sub
$vbLabelText   $csharpLabel

Śledzenie użycia pamięci

Monitorowanie użycia pamięci systemowej jest kluczowe dla dostrajania wydajności. Oto jak śledzić wolną pamięć:

public void CheckSystemMemory()
{
    var freeMemory = GC.GetTotalMemory(false); // Get total free memory
    _metrics.Measure.Gauge.SetValue(MetricsRegistry.FreeMemory, freeMemory); // Set gauge to measure free memory
}
public void CheckSystemMemory()
{
    var freeMemory = GC.GetTotalMemory(false); // Get total free memory
    _metrics.Measure.Gauge.SetValue(MetricsRegistry.FreeMemory, freeMemory); // Set gauge to measure free memory
}
Public Sub CheckSystemMemory()
	Dim freeMemory = GC.GetTotalMemory(False) ' Get total free memory
	_metrics.Measure.Gauge.SetValue(MetricsRegistry.FreeMemory, freeMemory) ' Set gauge to measure free memory
End Sub
$vbLabelText   $csharpLabel

Ten wskaźnik mierzy wolną pamięć dostępną dla aplikacji, pomagając zrozumieć wzorce zużycia pamięci.

Obsługa metryk w określonych interwałach

AppMetrics można skonfigurować tak, aby zbierać metryki w określonych interwałach. Pomaga to w utrzymaniu wydajności bez zbyt częstego rejestrowania danych:

public void ConfigureScheduledReporting(IApplicationBuilder app)
{
    var metrics = app.ApplicationServices.GetService<IMetricsRoot>(); // Retrieve the IMetricsRoot instance
    var scheduler = new AppMetricsTaskScheduler(
        TimeSpan.FromSeconds(60), // Set the interval for metrics collection
        async () =>
        {
            await Task.WhenAll(metrics.ReportRunner.RunAllAsync()); // Run all reports asynchronously
        });
    scheduler.Start(); // Start the scheduler
}
public void ConfigureScheduledReporting(IApplicationBuilder app)
{
    var metrics = app.ApplicationServices.GetService<IMetricsRoot>(); // Retrieve the IMetricsRoot instance
    var scheduler = new AppMetricsTaskScheduler(
        TimeSpan.FromSeconds(60), // Set the interval for metrics collection
        async () =>
        {
            await Task.WhenAll(metrics.ReportRunner.RunAllAsync()); // Run all reports asynchronously
        });
    scheduler.Start(); // Start the scheduler
}
Public Sub ConfigureScheduledReporting(ByVal app As IApplicationBuilder)
	Dim metrics = app.ApplicationServices.GetService(Of IMetricsRoot)() ' Retrieve the IMetricsRoot instance
	Dim scheduler = New AppMetricsTaskScheduler(TimeSpan.FromSeconds(60), Async Sub()
			Await Task.WhenAll(metrics.ReportRunner.RunAllAsync()) ' Run all reports asynchronously
	End Sub)
	scheduler.Start() ' Start the scheduler
End Sub
$vbLabelText   $csharpLabel

Ta konfiguracja ustawia raportowanie metryk co 60 sekund, zapewniając spójne monitorowanie wydajności bez przeciążania systemu ciągłym rejestrowaniem danych.

Integracja AppMetrics z IronPDF

Podczas pracy z metrykami i generowaniem PDF w aplikacjach C#, połączenie AppMetrics C# z IronPDF może być bardzo korzystne. Ta integracja pozwala generować raporty w formacie PDF bezpośrednio z danych metryk, co jest przydatne do przeglądów wydajności, prezentacji dla klientów lub wewnętrznych audytów.

Wprowadzenie do IronPDF

IronPDF to kompleksowa biblioteka umożliwiająca programistom tworzenie, odczytywanie i edycję dokumentów PDF przy użyciu C#. To, co wyróżnia IronPDF, to zdolność do konwersji HTML na PDF z IronPDF, co czyni ją szczególnie wartościową do generowania raportów opartych na sieci web. Ta możliwość zapewnia, że wizualne aspekty raportów są zachowane, oferując wysoki stopień wierności od formatu webowego do drukowanego.

Przypadek użycia: połączenie IronPDF z AppMetrics C

Rozważ scenariusz, w którym musisz dostarczać interesariuszom miesięczne raporty wydajności aplikacji. Raporty te zawierają metryki takie jak czasy odpowiedzi, wskaźniki błędów, sesje użytkowników i inne. Korzystając z open-source'owego AppMetrics C#, możesz bezproblemowo zbierać te metryki. Łącząc tę funkcjonalność z IronPDF, możesz automatycznie generować i dystrybuować te metryki w starannie sformatowanym dokumencie PDF.

Przykład kodu dla przypadku użycia

Poniżej znajduje się kompletny przykład implementacji. Przykład zakłada, że masz już skonfigurowane zarówno IronPDF, jak i AppMetrics C# w swoim projekcie.

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")
$vbLabelText   $csharpLabel

Appmetrics C# (How It Works For Developers): Figure 2 - PDF Report Output

Ta integracja nie tylko automatyzuje proces generowania raportów, ale także zapewnia, że raporty są łatwo czytelne i profesjonalnie sformatowane — idealne na spotkania z interesariuszami lub do celów archiwalnych.

Wnioski

Appmetrics C# (How It Works For Developers): Figure 3 - Licensing

Podsumowując, połączenie AppMetrics C# z IronPDF w projektach .NET zapewnia solidne rozwiązanie zarówno do monitorowania wydajności aplikacji, jak i generowania wysokiej jakości raportów PDF. Ta integracja umożliwia płynne przejście od zbierania szczegółowych danych o wydajności za pomocą AppMetrics do prezentowania ich w przejrzystym, profesjonalnym formacie przy użyciu IronPDF.

IronPDF jest szczególnie korzystny dla programistów C# chcących obsługiwać pliki PDF w swoich aplikacjach. Upraszcza tworzenie i manipulację dokumentami PDF oraz oferuje unikalną możliwość konwersji HTML bezpośrednio do PDF. Jeśli rozważasz włączenie IronPDF do swoich projektów, dostępna jest bezpłatna wersja próbna IronPDF, a licencje zaczynają się od $799, zapewniając opłacalny sposób na rozszerzenie możliwości obsługi dokumentów.

Często Zadawane Pytania

Czym jest AppMetrics C# i jakie korzyści daje programistom?

AppMetrics C# to narzędzie przeznaczone do monitorowania aplikacji i analizy wydajności, umożliwiające programistom efektywne śledzenie i pobieranie różnych wskaźników aplikacji w środowiskach .NET Core i .NET Framework.

Jak zintegrować AppMetrics z projektem .NET?

Możesz zintegrować AppMetrics ze swoim projektem .NET, korzystając z menedżera pakietów NuGet za pomocą polecenia: Install-Package App.Metrics.AspNetCore.

Jaka jest rola IronPDF w generowaniu raportów na podstawie danych AppMetrics?

IronPDF może służyć do generowania kompleksowych raportów PDF na podstawie danych AppMetrics poprzez konwersję danych metrycznych w formacie HTML na wysokiej jakości pliki PDF, idealne do przeglądów wydajności i prezentacji.

Jak można śledzić niestandardowe wskaźniki za pomocą AppMetrics?

AppMetrics pozwala definiować i śledzić niestandardowe wskaźniki, takie jak aktywność użytkowników lub konkretne czasy transakcji, umożliwiając szczegółową analizę wydajności dostosowaną do potrzeb aplikacji.

Jakie opcje są dostępne do wizualizacji danych AppMetrics?

AppMetrics obsługuje raportowanie do różnych pulpitów nawigacyjnych, takich jak InfluxDB, umożliwiając programistom skuteczne wizualizowanie i monitorowanie danych metrycznych.

W jaki sposób programiści mogą zoptymalizować wydajność aplikacji za pomocą AppMetrics?

Programiści mogą zoptymalizować wydajność, używając AppMetrics do monitorowania zużycia pamięci i obsługi zaplanowanych wskaźników, zapewniając efektywne zarządzanie zasobami i responsywność aplikacji.

Jakie są zalety generowania raportów PDF za pomocą IronPDF?

Wykorzystanie IronPDF do generowania raportów PDF na podstawie danych AppMetrics oferuje korzyść w postaci tworzenia profesjonalnych i łatwych do odczytania dokumentów, co usprawnia komunikację z interesariuszami.

Czy dostępna jest bezpłatna wersja próbna IronPDF?

Tak, IronPDF oferuje bezpłatną wersję próbną, umożliwiającą programistom zapoznanie się z możliwościami generowania plików PDF przed podjęciem decyzji o zakupie.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie