前面咱们聊了一下一个应用程序 应该监控的8个关键位置.html
. 嗯..地址以下:linux
最后卖了个小关子,是关于如何监控ASP.NET Core的.git
今天咱们就来说讲如何监控它,下面上效果图:github
阅读本文须要了解的相关技术与内容:数据库
InfluxDb(分布式时序数据库,开源)(注:分布式部分已商业化最新的分布式版本已不在开源,单例的继续开源)json
Grafana(开源的,功能齐全的度量仪表盘和图形编辑器)windows
App Metrics(主角,开源的支持.NET Core的监控插件,采用管道注入的方式,对代码的入侵性极小)app
本文测试环境为Windows64位,固然 这个方案所有均可以在linux上实现(甚至windows才应该是备用方案 - -,尴尬.)编辑器
下面咱们正式开始分布式
App.Metrics支持的库不少,有InfluxDB、Graphite 、Prometheus.
今天咱们主要已InfluxDb为例子.
首先下载,InfluxDb
知道大家懒得找..地址以下:https://portal.influxdata.com/downloads#influxdb
下载你须要的对应的系统的版本.这里我就直接下载Windows Binaries (64-bit)
linux的安装步骤我就很少说了,网上一大把..讲一下windows安装InfluxDb的注意事项(..这玩意对liunx的支持比windows好的多)..
解压后打开influxdb.conf,由于influxdb的默认配置全是针对linux配置的..因此咱们要修改一下配置文件.
修改下面3个liunx的路径,改成winodws路径以下:
[meta] # Where the metadata/raft database is stored dir = "D:/influxdb/meta"
[data] # The directory where the TSM storage engine stores TSM files. dir = "D:/influxdb/data"
# The directory where the TSM storage engine stores WAL files. wal-dir = "D:/influxdb/wal"
而后修改网页图形化管理界面配置,端口以下:
[admin] # Determines whether the admin service is enabled. enabled = true # The default bind address used by the admin service. bind-address = ":8083"
最后cmd运行,进入到你的解压目录,执行命令:
influxd -config influxdb.conf
获得如图效果:
咱们就安装完成了.
咱们进入管理界面的监听端口:http://localhost:8083/,会看到以下界面:
而后咱们输入SQL语句 CREATE DATABASE "你的库名"
看到下图,就是执行成功了.
咱们查一下看是否是真的,输入SQL语句:SHOW DATABASES
如图:
除了默认的第一个库之外,还有你本身添加的库名,就说明是加成功了,好了,安装就到此结束
而后咱们安装Grafana,
下载地址:https://grafana.com/get
咱们解压后进入bin目录,如图:
直接运行grafana-server.exe便可.
Grafana默认会监听3000的端口,因此咱们进入http://localhost:3000,
会让你登录,直接输入本地的管理员账户便可,账户:admin 密码:admin,进入后如图:
安装完成以后,咱们下载相关的仪表模版.
地址以下:https://grafana.com/dashboards/2140 (是个json文件)
而后咱们导入咱们的仪表:如图操做便可:
而后,添加咱们上面的数据源.
如图:
选择Add DataSource,而后操做以下:
这样,咱们就完成了Grafana的安装配置和添加数据源
接下来就是咱们的重头戏了,在ASP.NET Core中使用AppMetrics.
咱们随便建立一个ASP.NET Core MVC项目,如图:
用nuget包添加引用:
核心程序:
管道注入的扩展:
ASP.NET Core MVC的扩展:
其余相关要用到的库:(注:咱们这里的数据源是influxDB因此用的这个库,其余的库请搜索其余库的后缀)
咱们回到咱们熟悉的C#代码,在Startup中咱们编写注入代码以下:
首先修改ConfigureServices方法,以下:
public void ConfigureServices(IServiceCollection services) { var database = "TestData"; var uri = new Uri("http://127.0.0.1:8086"); services.AddMetrics(options => { options.GlobalTags.Add("app", "sample app"); options.GlobalTags.Add("env", "stage"); }) .AddHealthChecks() .AddJsonSerialization() .AddReporting( factory => { factory.AddInfluxDb( new InfluxDBReporterSettings { InfluxDbSettings = new InfluxDBSettings(database, uri), ReportInterval = TimeSpan.FromSeconds(5) }); }) .AddMetricsMiddleware(options => options.IgnoredHttpStatusCodes = new[] { 404 }); // Add framework services. services.AddMvc(); }
加入咱们influxDB相关配置,其中database就是你本身输入的数据库名. uri就是你数据库的地址.
而后咱们须要在程序启动的时候就注入咱们的Metrics监控,因此修改Configure代码以下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime lifetime) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); app.UseMetrics(); app.UseMetricsReporting(lifetime); //loggerFactory.AddDebug(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
其中app.UseMetrics(); app.UseMetricsReporting(lifetime) ,是咱们的注入代码..
其余的地方.不用动一丝一毫..怎么样 是否是几乎没有什么入侵性~.
最后,咱们跑起来.
随便在home中点击几下页面,或者调用一下..
而后进入到Grafana的监控页面中,就能够看到以下信息:
这篇只是简单的讲了如何作到初级的监控,其实还有心跳检测等比较多的功能,后面会慢慢来说..
.Net Core也就今年社区才慢慢起步,所这个监控也是刚刚完成,做者一直在积极的更新中.
比较遗憾的是原本这个是支持 .NET4.5.2以上的,可是因为关注的人比较少.因此就只出了RC的预览版.对最新版支持不完善.
我也在GitHub上给做者提了Issues,https://github.com/alhardy/AppMetrics/issues/177
但愿感兴趣的基友们一块儿加入,这里也吐槽一下,..我就一句话..社区须要咱们共通建立,而不是等着摘现成的桃子..
http://www.cnblogs.com/GuZhenYin/p/7170010.html