在WinampToSpotify项目中添加了.NET Aspire服务默认值和.NET Aspire AppHost后,添加了以下代码以在本地使用Docker Desktop运行Prometheus和Grafana。运行以下代码需要启动Docker Desktop。
// Prometheus容器,用于抓取应用指标varprometheus=builder.AddContainer("prometheus","prom/prometheus").WithBindMount("./prometheus/prometheus.yml","/etc/prometheus/prometheus.yml").WithEndpoint(port:9090,targetPort:9090).WithArgs("--config.file=/etc/prometheus/prometheus.yml","--web.enable-otlp-receiver");// 使用Prometheus作为数据源的Grafana容器vargrafana=builder.AddContainer("grafana","grafana/grafana").WithVolume("grafana-storage","/var/lib/grafana")// 持久化仪表板、用户、数据库.WithVolume("grafana-provisioning","/etc/grafana/provisioning",isReadOnly:true)// 可选:预配置YAML/JSON.WithEndpoint(port:3000,targetPort:3000);prometheus.yml是默认的Prometheus配置:
global:scrape_interval:15sevaluation_interval:15sscrape_configs:-job_name:"otel-collector"static_configs:-targets:["localhost:9090"]# 如果使用Docker,请调整,例如 host.docker.internal:9464metrics_path:/metrics创建了OpenTelemetryLib项目,并创建了一个ServiceCollection扩展方法来配置OTEL导出端点。安装了以下NuGet包:OpenTelemetry、OpenTelemetry.Exporter.Console、OpenTelemetry.Exporter.OpenTelemetryProtocol、OpenTelemetry.Exporter.Prometheus.HttpListener、OpenTelemetry.Instrumentation.Process。
varmeterProviderBuilder=Sdk.CreateMeterProviderBuilder().SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("winamptospotifyweb",serviceVersion:"1.0.0")).AddMeter(WinamptoSpotifyMetricsManager.MeterName).AddOtlpExporter((options,metricReader)=>{options.Protocol=OtlpExportProtocol.Grpc;// 4317作为gRPC端口。options.ExportProcessorType=ExportProcessorType.Batch;options.Endpoint=endpoint;metricReader.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds=60000;// 1分钟metricReader.PeriodicExportingMetricReaderOptions.ExportTimeoutMilliseconds=30000;// 半分钟})//Aspire Dashboard导出.AddOtlpExporter((exporterOptions,metricReaderOptions)=>{exporterOptions.Endpoint=newUri("http://localhost:9090/api/v1/otlp/v1/metrics");exporterOptions.Protocol=OtlpExportProtocol.HttpProtobuf;metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds=1000;});//Prometheus导出创建了Spotify指标类来注册Spotify服务相关的指标。开始跟踪每个文件夹添加的总曲目数。
publicclassSpotifyServiceMetrics:IWinampToSpotifyWebMetrics{privatereadonlyISpotifyService_spotifyService;publicSpotifyServiceMetrics(ISpotifyServicespotifyService){_spotifyService=spotifyService;}publicvoidRegisterMetrics(Metermeter){vartracksAddedMetric=meter.CreateObservableGauge("winamptospotifyweb.spotifyservice.totaltracksadded",()=>_spotifyService.GetPlaylistSummary().TotalTracksAdded,"unitless","Number of tracks added");}}WinamptoSpotifyMetricsManager类有助于注册指标,该类使用IMeterFactory进行注册。
publicWinamptoSpotifyMetricsManager(IEnumerable<IWinampToSpotifyWebMetrics>metrics,IMeterFactorymeterFactory){_metrics=metrics.ToImmutableList();_meter=meterFactory.Create(newMeterOptions(MeterName));}/// <summary>/// 注册WinampToSpotify实例中包含的所有自定义指标。/// </summary>publicvoidStart(){foreach(varmetricin_metrics){metric.RegisterMetrics(_meter);}}winamptospotifyweb.spotifyservice.totaltracksadded指标已导出到 Aspire Dashboard、Prometheus 和 Grafana。
代码更改可以在 dotnet aspire added 和 opentelemetry and metrics added 提交中找到。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)