大家好!
预览:我对收集 .NET Framework 和 Core 中的指标这一主题并不陌生。每天我都在学习新的东西,但脑子里已经在耳边流淌,所以我真的希望得到社区的帮助。
关于系统: ASP.NET Core 应用程序在 Windows Iron 服务器上运行。自然 - 它托管在 IIS 上。在这里(以及在许多其他服务器上)ASP.NET(非核心)应用程序和螺旋服务正在旋转,它们将它们的指标(包括自定义指标)存储在 Windows 性能计数器中,Zabbex 代理和 Telegraf 代理从那里获取它们。存储收集的 InfluxDB 指标。画格拉法纳。
任务 1:与 Windows Performance Counters(以下简称 WPC)交 ASP.NET Core 朋友。甚至可能吗?
任务 2:如果这不可能 - 您需要最可靠的方法来收集指标并在将它们发送到 InfluxDB 之前保存它们,即使在某些步骤出现问题(例如,网络问题、InfluxDB 的服务器崩溃等)。 .)。希望 Zabbex 或 Telegraf 代理参与其中。
Prometeus 服务器不是一种选择,因为当电报和 InfluxDB 可用时,没有人愿意部署另一项服务,但不排除使用 Prometeus 客户端的可能性,因为电报可以读取它。
目前我正在尝试了解是否有可能与电报建立 App Metrics ( https://www.app-metrics.io ) 朋友,但到目前为止还没有成功,因为对 ASP.NET Core 3.0+ 的支持已经还没有在这个库中完全实现,一半的功能是愚蠢的拒绝工作(库 4.0 预览版,还没有文档)。此外,如果电报由于某种原因无法接收到度量值,如何处理这些度量值的问题尚未得到解决(这里,在 Framework-a 的情况下,WPC 提供帮助,它存储度量值并且代理可以接收它们随时)。
App Metrics 可以写入文件(到目前为止它不能,而且我还没有弄清楚 - 它在我弯曲的手中,或者库还没有准备好,但是文件没有创建并且有没有错误),现在我想知道电报是否可以从文件度量中读取(还没有找到答案)。但即使它可以 - 阅读后如何处理这个文件?如果我们一直在写入文件,它会很快增长到一个巨大的大小,并且如果我们启用覆盖模式(AppendMetricsToTextFile = false;) - 我们没有解决如果没有人可以选择保存度量的问题现在起来。
也许您知道如何通过电报与另一个图书馆交朋友?
我很想阅读您的解决方案并感谢任何建议。
上:App Metrics 的最新进展 - 设法打开端点 https://{my-site}/metrics(以 JSON 格式返回指标)和 https://{my-site}/metrics-text(以格式化文本返回指标) . https://{my-site}/env 仍然不起作用。这并不能解决在代理未运行时存储指标的问题,但有些东西已经存在。我要去看看电报。也许代理可以在家里积累指标,直到它发送。
Up:找到允许从 Prometeus 和其他客户端读取指标的电报配置。现在我正在为 Zabbix 代理寻找类似的配置。一切准备就绪后,我将在答案中发布详细信息。
Ap:在 Zabbix 代理配置中有一个以下格式的 UserParameter: UserParameter=<ключ>,<powershell команда/скрипт>,这使得收集数据成为可能,例如,通过对我们的端点的 http 请求/metrics,但这是两难的。我真的不想使用 app-metrics,因为它还没有真正为 ASP.NET Core 3+ 做好准备,而且普罗米修斯的输出是愚蠢的文本。有人知道如何将 prometheus 输出转换为 JSON,以便使用 pavershell 脚本对其进行解析并将正确格式的字符串从脚本返回到 zabbix?
正如问题本身已经说明的那样 - 我仍然使用 App Metrics 库(https://www.app-metrics.io)。即,以下软件包(目前最相关):
在这个包的预览版中,一切都运行稳定。到目前为止,还没有发现任何错误。我决定暂时不使用 helschecks,但仅用于指标。我在对问题的最后一条评论Ap -e 中使用 Zabbix 。
我使用Telegraf代理作为代理。电报可以累积收集到的指标并延迟发送,这样如果出现网络问题或数据库不可用,它会缓存这些指标。
下面我将给出一个实现的例子,但是我是在一个商业项目上写的,我必须删除很多,只留下与主题相关的内容以及取自开源的内容。我希望我不会错过任何东西。嗯......仍然有点潮湿,但它的工作原理。
程序.sc:
启动.cs:
appsettings.json:
此外,您还可以使用各种指标来衡量单个操作,但对于初学者,我建议您构建这样一个项目,运行它,发出几个请求(希望其中有不成功的请求)并打开地址https://localhost:port/ 指标 在您的情况下,收集的指标可能就足够了。
配置输入插件Telegraf -代理:
此配置将允许您捕获来自应用程序的请求,并且已经在您指定要将数据发送到哪里的输出插件中。默认情况下,我什么都有,除了服务器地址,所以没什么意思。
接下来,为了可视化数据,我使用了以下 graphana 模板: https ://grafana.com/grafana/dashboards/2125
它有它的缺点,但它是一个很好的测试模板,因为它的大多数图表都可以立即工作,而且你会知道它有效。这是一个小片段:
如果没有数据,我们按顺序进行:
我们放了一个提琴手,在启动时我们改变了这一行:
options.InfluxDb.BaseUri = new Uri("http://localhost:8186");对此:
options.InfluxDb.BaseUri = new Uri("http://localhost.fiddler:8186");不要忘记您可能有不同的端口。我们启动应用程序,打开提琴手,看看它是否向电报发送数据。如果一切正常: