ASP.NET Core 集成Prometheus+grafana

  • 相关主页 

Prometheus https://prometheus.io/

grafana https://grafana.com/

  • 安装Prometheus

        Linux 可以参考https://www.cnblogs.com/linkanyway/p/Configure-a-Prometheus-Monitoring-Server-with-a-Gr.html

        windows:

           下载地址:https://prometheus.io/download/

            下载对应windows版本

             

解压后在命令行运行 prometheus.exe

然后访问 http://localhost:9090/

出现以下页面说明启动成功:

如果要添加监视服务器可以配置:prometheus.yml

global: scrape_interval:     15s evaluation_interval: 15sscrape_configs: - job_name: 'prometheus'   static_configs:   - targets: ['localhost:9090'] - job_name: 'node_exporter'   scrape_interval: 5s   static_configs:   - targets: ['localhost:9100']
  • node-exporter 

node-exporter是prometheus的服务提供者。

windows版本为:

https://github.com/martinlindhe/wmi_exporter

下载最新的版本。启动后的默认端口是9182

  • 安装grafana

下载地址:https://grafana.com/grafana/download?platform=windows

本人选择的是压缩包下载,解压后在命令行运行 grafana-server.exe

访问http://localhost:3000/

出现以下页面说明启动成功

初始用户名和密码都是 admin

grafana配置prometheus数据源:

选择Prometheus数据源

配置仪表盘

https://grafana.com/grafana/dashboards?orderBy=name&direction=asc选择合适的仪表盘

导入仪表板:

选择import

然后输入之前记录的id

选择prometheus的数据源,之后打开dashboard就可以看到漂亮的仪表盘了

  •  AspNet Core   配置

          参考 https://www.c-sharpcorner.com/article/reporting-metrics-to-prometheus-in-asp-net-core/

         NuGet引用:prometheus-net.AspNetCore

public class Startup  {      // others ...            public void Configure(IApplicationBuilder app, IHostingEnvironment env)      {          // others ...            app.UseMetricServer();      }  }

启动应用程序访问 /metrics    出现以下页面说明配置成功

      

例如,我们希望能够统计每个API请求次数(200表示成功,500表示错误)。

public class RequestMiddleware  {      private readonly RequestDelegate _next;      private readonly ILogger _logger;        public RequestMiddleware(          RequestDelegate next          , ILoggerFactory loggerFactory          )      {          this._next = next;          this._logger = loggerFactory.CreateLogger<RequestMiddleware>();      }            public async Task Invoke(HttpContext httpContext)      {          var path = httpContext.Request.Path.Value;          var method = httpContext.Request.Method;            var counter = Metrics.CreateCounter("prometheus_demo_request_total", "HTTP Requests Total", new CounterConfiguration          {              LabelNames = new[] { "path", "method", "status" }          });            var statusCode = 200;            try          {              await _next.Invoke(httpContext);          }          catch (Exception)          {              statusCode = 500;              counter.Labels(path, method, statusCode.ToString()).Inc();                throw;          }                    if (path != "/metrics")          {              statusCode = httpContext.Response.StatusCode;              counter.Labels(path, method, statusCode.ToString()).Inc();          }      }  }    public static class RequestMiddlewareExtensions  {              public static IApplicationBuilder UseRequestMiddleware(this IApplicationBuilder builder)      {          return builder.UseMiddleware<RequestMiddleware>();      }  }

修改Startup

public void Configure(IApplicationBuilder app, IHostingEnvironment env)  {      // others ...        app.UseMetricServer();        app.UseRequestMiddleware();  }

修改api代码

[HttpGet]  public ActionResult<IEnumerable<string>> Get()  {      if(new System.Random().NextDouble() > 0.5)      {          throw new System.Exception("test exception");      }        return new string[] { "value1", "value2" };  }

然后在prometheus.yml添加配置

scrape_configs:  - job_name: mydemo    scrape_interval: 15s    scrape_timeout: 10s    metrics_path: /metrics    scheme: http    static_configs:    - targets:      - localhost:44363   
  • Grafana集成到自己的Web项目

Web项目中我使用iframe直接嵌套进去的

  但是浏览器缓存清除了或者session失效了,每次进入Web页面看Grafana的时候就需要重新登录,在官方社区查找,并没有太好的执行办法,最后决定把Grafana设置成匿名登录:

  修改conf/ custom.ini目录下的默认配置文件内容:
找到:# enable anonymous access

然后重启grafana服务(systemctl restart grafana-server)就可以。

  • Grafana分享集成

     

        

(0)

相关推荐