- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
上一次我们讲了 OpenTelemetry Logs 与 OpenTelemetry Traces。今天继续来说说 OpenTelemetry Metrics。 随着现代应用程序的复杂性不断增加,对于性能监控和故障排除的需求也日益迫切。在 .NET 生态系统中,OpenTelemetry Metrics 可用于实时监控和分析应用程序的性能指标。比如监控内存,CPU 使用量,链接数等等.
OpenTelemetry Metrics 是 OpenTelemetry 的一部分,用于记录和导出应用程序的性能指标。它提供了一组灵活的 API 和工具,用于创建、注册和导出度量指标,以便实时监控和分析应用程序的性能。OpenTelemetry Metrics 支持各种类型的度量指标,包括计数器(Counter)、测量值(ObservableGauge)等,以满足不同场景下的性能监控需求.
OpenTelemetry 已经为我们直接提供了一些开箱即用的包。我们使用这些包就可以非常便捷的对 ASP.NET Core 或者 Runtime 的一些指标进行监控。以下我们将演示通过简单的几步如何把这些指标通过 OpenTelemetry 协议发送给 Prometheus.
首先安装相关的包 。
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.8.1" />
跟 logs,traces 一样,我们需要在启动的时候添加必要的服务及配置.
builder.Services.AddControllers();
var otel = builder.Services.AddOpenTelemetry();
// Configure OpenTelemetry Resources with the application name
otel.ConfigureResource(resource => resource
.AddService(builder.Environment.ApplicationName));
otel.WithMetrics(metrics =>
{
metrics.AddAspNetCoreInstrumentation()
.AddRuntimeInstrumentation()
.AddOtlpExporter((otlpOptions, metricReaderOptions) =>
{
otlpOptions.Protocol = OtlpExportProtocol.HttpProtobuf;
otlpOptions.Endpoint = new Uri("http://localhost:9090/api/v1/otlp/v1/metrics");
metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 1000;
});
});
从官网下载 Prometheus 的安装包或者 k8s 运行。启动的时候记得开启参数:otlp-write-receiver 。
./prometheus --enable-feature=otlp-write-receiver
prometheus 默认的 metrics 的 api 地址为:http://localhost:9090/api/v1/otlp/v1/metrics 。
让我们运行上面的 .NET 程序,等待一会。然后打开 http://localhost:9090/graph 进行查看。我们能看到 Prometheus 中多了很多跟 ASP.NET Core 以及 .NET runtime 相关的指标。 有 kestrel 相关的,GC 相关的, Thread pool 相关的指标等等很多很多。 下面我们随便选一个 kestrel 的活动链接数看看: 可以直观的看到从0个连接到2个连接再到1个连接的过程.
以上演示了如何监控 ASP.NET Core 以及 .NET runtime 相关的指标。过程呢相当简单。但是光有这些框架的指标可能还不够,有的时候我们希望监控业务数据的指标,比如订单数量,实时用户在线量,等等。那么这个时候我们需要自己去实现一个指标。 下面我们就以订单总数这个数据定义一个自定义的指标。当用户每次下单成功后订单数量就会 +1.
首先定义一个 MyMeterService 的类:
public class MyMeterService
{
public static Meter MyMeter = new("MyMeter", "1.0");
public static Counter<long> MyOrderCounter = MyMeter.CreateCounter<long>("MyOrderCounter");
}
首先创建了一个名为 MyMeter 的度量器。然后创建了一个名为 MyOrderCounter 的长整型计数器(Counter ),并将其绑定到 MyMeter 上,名称为 "MyOrderCounter".
otel.WithMetrics(metrics =>
{
metrics.AddAspNetCoreInstrumentation()
.AddRuntimeInstrumentation()
.AddMeter("MyMeter")
.AddOtlpExporter((otlpOptions, metricReaderOptions) =>
{
otlpOptions.Protocol = OtlpExportProtocol.HttpProtobuf;
otlpOptions.Endpoint = new Uri("http://localhost:9090/api/v1/otlp/v1/metrics");
metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 1000;
});
});
通过调用 AddMeter("MyMeter") 方法 OpenTelemetry 会监听前面定义的 MyMeter 度量器.
[ApiController]
[Route("[controller]")]
public class OrderController : ControllerBase
{
[HttpPost]
public string Add()
{
MyMeterService.MyOrderCounter.Add(1);
return "ok";
}
}
添加一个 Order 的控制器,每次调用 Add 方法的时候就会给 MyOrderCounter 加 1 .
跟上面一样我运行我们的程序后等待一会,再次刷新 http://localhost:9090/graph。里面就会多出来 MyOrderCounter 指标.
使用 POSTMAN 调用几次 Order 接口后,点击 Execute 查询一下:
可以看到 MyOrderCounter 指标的折线图.
上面我们使用一个 Counter 来对订单数进行累加。其实 .NET 为我们提供了更多的度量方法。以下简单介绍几个常用的:
Counter 表示支持添加非负值的检测。 例如,可以在每次处理请求时调用 counter.Add(1) 以跟踪请求总数。 默认情况下,大多数指标查看器使用速率 (请求数/秒) 显示计数器,但也可以显示累积总计.
ObservableCounter 表示一个指标可观测的检测,当观察检测时报告单调递增的值,例如,不同进程、线程、用户模式或内核模式的 CPU 时间.
ObservableGauge 表示在观察仪器时报告非累加值的可观测仪器,例如当前室内温度.
UpDownCounter 支持报告正或负指标值的工具。 UpDownCounter 可用于报告活动请求或队列大小更改等方案.
ObservableUpDownCounter 一种指标可观测的仪器,在观察检测时报告值增加或减少。 例如,使用此仪器可以监视进程堆大小或无锁循环缓冲区中的项的近似数量.
以上我们通过代码演示了如何通过 OpenTelemetry 把 Metrics 的数据发送到 Prometheus 里进行查询与展示。然后又演示了自定义相关指标来满足业务数据指标的监控。从概念到代码还是非常非常简单清晰的。希望对各位正在打算建立监控体系的同学有所帮助.
最后此篇关于.NET使用OpenTelemetrymetrics监控应用程序指标的文章就讲到这里了,如果你想了解更多关于.NET使用OpenTelemetrymetrics监控应用程序指标的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在 Azure 中找不到几个 SQL 指标。任何人都可以帮助如何设置以下主题的指标。 1)产能利用率不足 2)池外的数据库数量 3)扩大规模 4)连接超时 提前致谢。 最佳答案 实际上,这些并不是
我要监控的应用程序提供了一个用于健康检查的 api 端点,它以 json 格式响应指标。例如: $ curl https://example.com/api/stats {"status":"suc
我正在考虑用于分析软件开发工作的软件指标。当我考虑在面向对象的软件中使用类似功能点的指标时,我遇到了一个有趣的挑战/问题。 考虑一个业务规则引擎。它是一种应用程序,由运行业务规则所需的组件组成,然后将
我要监控的应用程序提供了一个用于健康检查的 api 端点,它以 json 格式响应指标。例如: $ curl https://example.com/api/stats {"status":"suc
因此,我正在将旧的数据可视化转换为新平台,但我对他们的社区排序功能有点困惑。在原始代码中,作者似乎使用了带有余弦相似度计算器的凝聚聚类。我认为在 Javascript 中解决这个问题的最佳方法是使用
我不是专业程序员,但我正在尝试改变一些技术指标在名为 TradeStation 的金融图表包中的显示方式(与特定图表供应商无关)。 这就是问题所在:大多数指标都是围绕零点绘制的,有时它们会靠近零点摆动
我们存储了大量来 self 们服务的指标(大约 8000 万个事件)。我们必须根据数据生成报告。 我的问题比较笼统,哪些工具可以满足您的指标/报告需求?有什么推荐的吗? 我们使用 Apache 编写日
我们网站上的页面的 CLS 一直接近于零。这是有道理的,因为它们是服务器呈现的 HTML 页面,具有简单的静态布局。 最近我们添加了 content-visibility: auto 的使用,如下所示
我能想到几种方法来转这种类型的矩阵(数据框): dat = data.frame( x1 = rep(c('a', 'b'), 100), x2 = rep(c('x', 'y
我正在使用 codahale 指标(现在是 dropwizard 指标)来监控我系统中发生的一些“事件”。我正在使用 counters跟踪“事件”发生次数的指标。 我检查了记者为我的计数器指标打印的值
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 11 个月前关闭。 Improve this que
在不使用 Heapster 的情况下,有没有办法收集有关 Kubernetes 集群中节点的 CPU 或磁盘指标? Heapster 最初是如何收集这些指标的? 最佳答案 Kubernetes 监控在
对于二元分类问题,我有一个略微不平衡的数据集,正负比为 0.6。 我最近从这个答案中了解到了 auc 指标:https://stats.stackexchange.com/a/132832/12822
为了做一些参数调整,我喜欢用 Keras 循环一些训练函数。但是,我意识到在使用 tensorflow.keras.metrics.AUC() 时作为度量,对于每个训练循环,都会将一个整数添加到 au
我使用 Azure,现在我想在特定情况下添加短信通知。 当我使用基于日志的指标时,它效果很好,但我想针对特定异常创建通知。 下一个流程:抛出异常 => Azure 知道识别它 => Azure 发送有
我正在尝试访问给定cloudService的指标 我有以下代码: var metricsClient = new MetricsClient(new CertificateCloudCredentia
我正在尝试使用 R 和 xgboost 来研究我的模型。训练模型总体上效果很好,但对于插入符来说,度量存在一些问题。 我尝试为类列设置一个因子,但仍然没有结果。 我的数据 ID var1var2TA
我对编程还很陌生,有时它会用非常基本的概念来困扰我。我在我的 tableviewcontroller 中定义了一个 Activity 指示器作为 Outlet。 @IBOutlet weak var
我正在训练一个进行序列预测的模型。例如,给定某人之前写过的 10 个单词,我正在训练 LSTM 来预测他们将写的下一个单词。我有一个有时可以工作的模型,因此我想创建一个指标来跟踪模型通过词性标签预测下
我正在尝试使用 hystrix 来监控某个网络调用。但我尝试监控的所有指标始终为空。我做错了什么? 我通过实现一个(某种程度上)RESTful 接口(interface)来模拟网络调用,该接口(int
我是一名优秀的程序员,十分优秀!