我有一个dotnet核心1.1 Web API。我知道某人正在跟踪调用它的次数,因为它在Azure中托管,我可以在该应用的“概述”页面上看到它的图表。 / p>
我想要做的是在API中使用某种/ stats端点,它会报告对API的调用次数,HTTP-200返回的次数以及非200次返回的数量。
是否有内置方法从同一API中的控制器内部获取此数据?我的意思是,我可以创建一个中间件,在调用" await _next.Invoke(context)"之前递增计数器,但似乎我正在重新发明轮子。
对此的想法?
编辑:我知道(帽子提示Danny Chen)使用Application Insights我可以从Azure控制台获取此信息。我已经满足于能够以编程方式查询Azure ...基本上我希望能够在Zabbix或其他系统以及Azure控制台中使用此数据。
答案 0 :(得分:3)
Application Insights正是您想要的,实际上远远超过“计算失败响应”。您可以使用profiler来实现所需的功能。
更新由于您在不同的云平台中部署了应用程序并希望从第三个应用程序“获取数据”,因此您有两种选择:
解决方案1:在不修改应用程序的情况下,向云平台添加无服务器触发器。对于Azure,请使用Functions。对于AWS,请使用Lambda。好处是您不需要修改应用程序,这意味着您的Web应用程序专注于业务。让专业人员进行监控。 “缺点”是你需要为不同的云平台添加不同的实现,IMO并不是那么糟糕,因为它是一次性工作,而且我们世界上只有少数云提供商。
解决方案2(不推荐):向您的Web应用程序添加中间件,计算此中间件中的请求并使其数据可由Zabbix访问(例如,Web API)。它是“平台兼容的”,但如果有一个新功能说“计算旧版api的请求数量”会怎么样?现在去修改代码,然后重新部署你的应用程序!哦,中间件有一个bug? OMG整个申请受到影响......
答案 1 :(得分:0)
您可以使用ActionFilter。
public class SampleActionFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
// do something before the action executes
}
public void OnActionExecuted(ActionExecutedContext context)
{
// do something after the action executes
}
}
我希望这不是你想到的中间件。 简单地在计数器中创建静态变量,或将其保存到某个文件中。 然后将过滤器添加到特定方法/控制器或将其注册为全局:
services.AddMvc(
config =>
{
config.Filters.Add(new GlobalFilter(SampleActionFilter));
});