如何在常规ASP.NET 4.7.1应用程序中使用prometheus-net?在.Net Core中非常容易,但是我找不到在4.7.1中向Grafana报告指标的好方法
理想的做法是使用路径/metrics
来报告指标。
我试图创建一个粗略的测试控制器来运行MetricServer
,但出现错误。
// horrible test code
[RoutePrefix("metrics")]
public class MetricsController : ApiController
{
static readonly MetricServer _server = new MetricServer(7777);
static MetricsController()
{
_server.Start();
}
[Route("")]
public async Task<IHttpActionResult> Get()
{
using (var client = new HttpClient())
{
var metrics = await client.GetAsync("http://localhost:7777/metrics");
return Content(HttpStatusCode.OK, await metrics.Content.ReadAsStringAsync(),null, metrics.Content.Headers.ContentType.ToString());
}
}
}
System.Net.HttpListenerException:'访问被拒绝'
答案 0 :(得分:1)
还有另一种方法可以做到这一点。除了在启动时创建新的$userdata = array(
'responsavel_cpf' => Input::get('email'),
'responsavel_senha' => Input::get('password')
);
if (Auth::guard('igrejas')->attempt($userdata)) {
return Redirect::to('dashboard_paroquia');
} else {
return Redirect::to('login');
}
并调用它之外,您还可以自己调用MetricServer
来收集指标。
只需创建一个看起来像这样的WebApi控制器:
CollectAndExportAsTextAsync
或者您也可以只使用我的NuGet软件包,该软件包也为您提供HTTP指标和一些SQL指标-https://www.nuget.org/packages/prometheus-net.AspNet/
答案 1 :(得分:0)
MetricServer.Start()
在Windows上可能会引发拒绝访问异常。您可以使用netsh命令向自己授予所需的权限:
netsh http add urlacl url=http://+:7777/metrics user=DOMAIN\user
答案 2 :(得分:0)
借助 ASP.NET Framework,您还可以创建一个独立的 HttpHandler
来提供您的指标端点。
首先创建处理程序(通常存储在 App_Code
目录中):
/// <summary>
/// Prometheus metrics scraping endpoint.
/// </summary>
public class MetricsHandler : HttpTaskAsyncHandler
{
public override async Task ProcessRequestAsync(HttpContext context)
{
// Uses pattern from Prometheus.MetricServer
var response = context.Response;
try
{
try
{
await Metrics.DefaultRegistry.CollectAndExportAsTextAsync(context.Response.OutputStream);
}
catch (ScrapeFailedException ex)
{
response.StatusCode = 503;
if (!string.IsNullOrWhiteSpace(ex.Message))
{
using (var streamWriter = new StreamWriter(response.OutputStream))
{
streamWriter.Write(ex.Message);
}
}
}
}
catch (Exception ex)
{
if (!(ex is OperationCanceledException))
{
try
{
response.StatusCode = 500;
}
catch
{
}
}
}
}
}
然后在 web.config
中注册您的处理程序:
<system.webServer>
<handlers>
<add name="MetricsHandler" verb="*" path="metrics" type="<your-namespace>.MetricsHandler, <your-assembly-name>" resourceType="Unspecified" />
</handlers>
</system.webServer>
为了获得我的处理程序代码,我查看了 Prometheus MetricServer
实现,并结合了 Rocklan 的回答。