services.AddOpenTelemetry()
.WithMetrics(builder => builder
//we can see our metrics in the console window
.AddConsoleExporter()
//A Resource is the immutable representation of the entity producing the telemetry
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("ScannerAv"))
//AddMeter() extension method configures OpenTelemetry to transmit all the metrics collected by this concrete Meter
.AddMeter(meters.MetricName)
//With AddPrometheusHttpListener(), OpenTelemetry PrometheusExporter will export data via
//the endpoint defined by PrometheusHttpListenerOptions.UriPrefixes, which is http://localhost:9464/ by default.
//prometheusUrl= *:5000/ => how its work + open as a administrator
.AddPrometheusHttpListener(options => options.UriPrefixes = new string[] { prometheusUrl })
//is the specific configuration that will collect metrics for our incoming HTTP requests.
.AddAspNetCoreInstrumentation()
//collect metrics for outgoing HTTP requests through the HttpClient class
.AddHttpClientInstrumentation()
//Runtime metrics give us some interesting measurements,
//such as the count of exceptions that have been thrown, or the number of thread pools that currently exist.
.AddRuntimeInstrumentation()
//A View in OpenTelemetry defines an aggregation, which takes a series of measurements and expresses them
//as a single metric value at that point in time.
.AddView(
instrumentName: "scan-time-elapse",
new ExplicitBucketHistogramConfiguration { Boundaries = new double[] { 100, 1000, 7000, 12000, 15000, 17000, 20000, 50000, 100000 } })
);
در تنظیمات فوق تعدادی از تنظیمات ، تنظیماتی است که گویای این مورد است که به چه metric ها و یا log هایی ما نیاز دارم برای ارسال و قسمتی از تنظمات مربوط به این است که این metric کجا و به چه نحوی نمایش داده شوند
--------------------------------------------------------------------------------------------------------------------------------------------------------
پکیج های زیر جهت استفاده از openTelemtry در دات نت نیاز به نصب است
<PackageReference Include="OpenTelemetry" Version="1.5.0-alpha.1" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.4.0" />
<PackageReference Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.5.0-alpha.1" />
<PackageReference Include="OpenTelemetry.Exporter.Prometheus.HttpListener" Version="1.5.0-alpha.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.4.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.0.0-rc9.14" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.0.0-rc9.14" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.1.0-rc.2" />
در مرحله بعدی اطلاعاتی که مد نظر ما می باشد را به راحتی در داخل متد ها تنظیم میکنیم جهت ارسال ، که این تنظیمات بسته به نوع نیاز ما می باشد و در اینترنت به راحتی پیدا میشود (https://signoz.io/blog/opentelemetry-dotnet/)
سپس در سروری که prometheus در ان تنظیم شده است و روی پورت 9090 بالا می باشد ، آی پی و پورت سرورمون رو تو تنظمات yml وارد میکنیم تا در prometheus در قسمت target ها قابل مشاهده باشد و در نهایت میتوان در گرافانا هم نمودار مد نظر خودمونو با این اطلاعات درست کنیم و داشبودرشو بسازیم