一、前言数据库
APM,又称应用性能统计,主要用来跟踪请求调用链,每一个环节调用耗时,为咱们诊断系统性能、定位系统问题提供了极大便利。本系统采用的是Elastic Stack体系中的APM,主要是以前部门搞PCI认证,其中有一环ELK,而恰好ELK就是我搭建的,这里就顺便使用ELK体系的APM,不必再另起一套了。json
二、实现centos
首先,你须要搭建好ELK平台,这里搭建过程不作赘述,你们参考Elastic Stack官网,简单明了。服务器
而后,安装Elastic APM Server,就是一个Linux RPM包,一行Linux命令的事情,也不作赘述。这里交代下APMServer的几个关键配置,以centos7为例。在/etc/apm-server目录下,有个apm-server.yml配置文件,修改其中以下几处:app
apm-server访问地址,改为你本身服务器IP和端口:性能
APM Agent访问token凭证,这是个静态口令,你能够随意调整:centos7
SSL启用,表明各agent须要以https方式来连接apm-server,换成你本身的证书和key:server
到ES存储的连接,一样须要调整成你本身的:中间件
其中各项配置的参数,配置文件中已经注释的比较清楚了,大概看下其描述咱们就知道该怎么配。blog
Apm-server配置好以后,接下来就是咱们应用中引入和配置agent了。首选,在咱们待监控应用系统配置文件appsetting.json中,加入以下一段配置:
SecretToken是咱们服务端配置的那个secret_token,必须一致。ServerURLs是apmserver访问地址,对应服务端的host参数。ServiceName是咱们系统标识,ES和kibana中咱们会以此来区分不一样应用的监控数据。VerifyServerCert表明是否须要校验apm-server服务端证书,这里方便起见,直接配置false了,不然agent端会直接把到apm-server的连接给拒绝。
而后,引入Elastic.Apm.NetCoreAll包,ElasticStack包含各类原子包,能够分别监控.NETCORE、aspnetcore、EF等,能够根据具体需求引入对应包,而Elastic.Apm.NetCoreAll直接囊括全部,这里由于系统要监控应用、EF、数据库执行等,因此直接引用了这个大而全的包。以后,引入中间件:
此中间件引入最好放在最靠前的位置,由于要监控整条链路。
三、效果
登陆系统,而后随便开几个页面,以下:
而后,咱们进入kibana,找到对应的APM菜单进去:
右边列表名称那一栏,是咱们agent配置中,对应的ServiceName,找到对应系统,点击进去:
两张图上边一张是请求负载状况,下边是应用系统收到的每一个http请求,咱们以searchroles这个为例,进去看看:
能够看到,searchroles的全部请求数量,每一个请求各环节执行时间,最下面默认展现最近一次请求的跟踪数据,里边能够直观体现本次http请求处理总时间、数据库执行时间,若是有跨服务调用,还会统计其余服务调用时间,甚至帮咱们追踪到了执行的SQL,很是之方便,开箱即用。因此,之后不再要说EF性能低、出问题很差定位之类的话,必定是你姿式不对。