如何在.NET C#应用中使用OpenTelemetry File Exporter导出指标
.NET C# OpenTelemetry 1.7.0 指标导出到JSON/文本文件实现示例
1. 安装对应NuGet包
要使用File Exporter,首先安装版本匹配的OpenTelemetry.Exporter.File包:
# Package Manager Install-Package OpenTelemetry.Exporter.File -Version 1.7.0 # .NET CLI dotnet add package OpenTelemetry.Exporter.File --version 1.7.0
2. 修改TelemetryBuilder配置
在原有的OpenTelemetry指标配置中添加File Exporter,支持文本格式或JSON格式,以下是修改后的完整代码:
using OpenTelemetry; using OpenTelemetry.Exporter; using OpenTelemetry.Metrics; using OpenTelemetry.Resources; using OpenTelemetry.Trace; using OpenTelemetry.Logs; using OpenTelemetry.Exporter.File; // 新增命名空间 namespace OpenTelemetrySample.OpenTelemetryBuilder; public static class OpenTelemetryBuilder { public static void OpenTelemetryInstrumenter(IServiceCollection services, string ApplicationName) { services.AddOpenTelemetry() .ConfigureResource(resource => resource.AddService(ApplicationName)) .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() .AddConsoleExporter() .AddOtlpExporter(options => { options.Endpoint = new Uri("https://newrelicendpoint"); options.Headers = "api-key=somekey"; }) ) .WithMetrics(metrics => metrics .AddAspNetCoreInstrumentation() .AddConsoleExporter() .AddOtlpExporter(options => { options.Endpoint = new Uri("https://newrelicendpoint"); options.Headers = "api-key=somekey"; }) // 新增File Exporter配置 .AddFileExporter(options => { // 输出文件的基础路径(自动生成带时间戳的文件名) options.Path = "./app-metrics"; // 选择导出格式:Json 或 Text options.MetricsExportFormat = MetricsExportFormat.Json; // 可选:配置滚动文件策略,避免单个文件过大 options.RotationOptions = new FileRotationOptions { MaxFileSize = 1024 * 1024, // 单个文件最大1MB MaxNumberOfFiles = 5, // 最多保留5个历史文件 RotationInterval = TimeSpan.FromHours(1) // 每小时生成新文件 }; }) ); } }
3. 关键配置说明
- Path:输出文件的前缀,程序会自动在末尾添加时间戳和扩展名(如
app-metrics-202405201430.json) - MetricsExportFormat:指定导出格式,
MetricsExportFormat.Text生成人类可读的文本,MetricsExportFormat.Json生成结构化JSON数据 - RotationOptions:可选配置,用于设置文件滚动规则,防止单个文件体积过大,支持按文件大小、时间间隔或文件数量限制
4. 运行验证
启动应用并访问接口后,会在应用根目录下生成对应的指标文件,打开即可查看导出的指标数据。
Program.cs无需修改,保持原有调用逻辑即可。
内容的提问来源于stack exchange,提问作者Confounder
相关产品推荐
相关产品推荐

