1、前言

  APM,又称应用性能统计,主要用来跟踪请求调用链,每个环节调用耗时,为我们诊断系统性能、定位系统问题提供了极大便利。本系统采用的是Elastic Stack体系中的APM,主要是之前部门搞PCI认证,其中有一环ELK,而刚好ELK就是我搭建的,这里就顺便使用ELK体系的APM,没必要再另起一套了。

2、实现

  首先,你需要搭建好ELK平台,这里搭建过程不做赘述,大家参考Elastic Stack官网,简单明了。

  然后,安装Elastic APM Server,就是一个Linux RPM包,一行Linux命令的事情,也不做赘述。这里交代下APMServer的几个关键配置,以centos7为例。在/etc/apm-server目录下,有个apm-server.yml配置文件,修改其中如下几处:

apm-server访问地址,改成你自己服务器IP和端口:

APM Agent访问token凭证,这是个静态口令,你可以随意调整:

SSL启用,代表各agent需要以https方式来链接apm-server,换成你自己的证书和key:

到ES存储的链接,同样需要调整成你自己的:

  其中各项配置的参数,配置文件中已经注释的比较清楚了,大概看下其描述我们就知道该怎么配。

  

  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、数据库执行等,所以直接引用了这个大而全的包。之后,引入中间件:

  此中间件引入最好放在最靠前的位置,因为要监控整条链路。

3、效果

  登录系统,然后随便开几个页面,如下:

  然后,我们进入kibana,找到对应的APM菜单进去:

  右边列表名称那一栏,是我们agent配置中,对应的ServiceName,找到对应系统,点击进去:

  两张图上边一张是请求负载情况,下边是应用系统收到的每个http请求,我们以searchroles这个为例,进去看看:

  可以看到,searchroles的所有请求数量,每个请求各环节执行时间,最下面默认展示最近一次请求的跟踪数据,里边可以直观体现本次http请求处理总时间、数据库执行时间,如果有跨服务调用,还会统计其他服务调用时间,甚至帮我们追踪到了执行的SQL,非常之方便,开箱即用。所以,以后再也不要说EF性能低、出问题不好定位之类的话,一定是你姿势不对。

Core + Vue 后台管理基础框架7——APM的更多相关文章

  1. Core + Vue 后台管理基础框架0——开篇

    1.背景 最近,打算新开个项目,鉴于团队技术栈,选型.net core + vue,前后端分离.本打算捡现成的轮子的,github上大致逛了逛,总发现这样那样的不太适合心中那些“完美实践”,例如:Ab ...

  2. Core + Vue 后台管理基础框架4——前端授权

    1.前言 上篇,我们讲了后端的授权.与后端不同,前端主要是通过功能入口如菜单.按钮的显隐来控制授权的.具体来讲,就是根据指定用户的制定权限来加载对应侧边栏菜单和页面内的功能按钮.我们一个个来讲. 2. ...

  3. Core + Vue 后台管理基础框架2——认证

    1.前言 这块儿当时在IdentityServer4和JWT之间犹豫了一下,后来考虑到现状,出于3个原因,暂时放弃了IdentityServer4选择了JWT: (1)目前这个前端框架更适配JWT: ...

  4. Core + Vue 后台管理基础框架3——后端授权

    1.前言 但凡业务系统,授权是绕不开的一环.见过太多只在前端做菜单及按钮显隐控制,但后端裸奔的,觉着前端看不到,系统就安全,掩耳盗铃也好,自欺欺人也罢,这里不做评论.在.NET CORE中,也见过不少 ...

  5. Core + Vue 后台管理基础框架9——统一日志

    1.背景 前阵子有园友留言,提到日志相关的东西,同时,最近圈子里也有提到日志这个东西.一个充分.集中的统一日志平台还是很有必要的,否则系统出问题了只能靠猜或者干瞪眼.何谓充分,日志记录满足最低要求.出 ...

  6. Core + Vue 后台管理基础框架1——运行系统

    1.down源码 git clone https://github.com/KINGGUOKUN/SystemManagement.git,项目目录如下: 2.还原数据库 找到项目根目录下System ...

  7. Core + Vue 后台管理基础框架8——Swagger文档

    1.前言 作为前后端分离的项目,或者说但凡涉及到对外服务的后端,一个自描述,跟代码实时同步的文档是极其重要的.说到这儿,想起了几年前在XX速运,每天写完代码,还要给APP团队更新文档的惨痛经历.给人家 ...

  8. hsweb 企业后台管理基础框架

    hsweb 详细介绍 业务功能 现在: 权限管理: 权限资源-角色-用户. 配置管理: kv结构,自定义配置.可通过此功能配置数据字典. 脚本管理: 动态脚本,支持javascript,groovy, ...

  9. 基于bootstrap的漂亮网站后台管理界面框架汇总

    基于bootstrap的漂亮网站后台管理界面框架汇总 10个最新的 Bootstrap 3 管理模板 这里分享的 10 个模板是从最新的 Bootstrap 3 管理模板集合中挑选出来的,可以帮助你用 ...

随机推荐

  1. struts2学习笔记之十四:使用注解配置Action(不是和spring集成使用)

    Struts2支持使用注解配置Action,减少配置文件的配置 Struts2如果要支持注解配置Action,需要插件的支持,导入插件struts2-convention-plugin-2.1.8.1 ...

  2. js new 与 return

    前置: 默认情况下, 函数的返回值是 undefined (即没有定义返回值). new 操作符 js 中的 new 操作符,可以是我们像 java 一样,获得一个新的对象,例如: function ...

  3. 网易与Google合作,于GDC开幕首日发布开源UI自动化测试方案

    [TechWeb报道]美西时间3月19日,在GDC开幕第一天的Google开发者专场,Google发布了一款由网易研发的UI自动化测试方案:Airtest Project. Google方面评价,这可 ...

  4. Tensorflow 错误集锦

    文章目录 参考文献 本文记录笔者在Tensorflow使用上的一些错误的集锦,方便后来人迅速查阅解决问题. 我是留白. 我是留白. CreateSession still waiting for re ...

  5. Python学习笔记(四)函数式编程

    高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...

  6. epoll的原理和用法

    设想一个场景,有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收到TCP包)也就是说,在每一时刻进程只需要处理这100万连接中的一小部分连接,那么,如何 ...

  7. Ubuntu 16.04.5部署Django环境

    1.安装python环境 使用如下命令安装的是3.5.x版本 sudo apt-get install python3-pip 如果使用下面的命令,会安装2.x版本的python sudo apt-g ...

  8. LeetCode--二叉树2--运用递归解决树的问题

    LeetCode--二叉树2--运用递归解决树的问题 在前面的章节中,我们已经介绍了如何利用递归求解树的遍历. 递归是解决树的相关问题最有效和最常用的方法之一. 我们知道,树可以以递归的方式定义为一个 ...

  9. CKEditor4.7怎样实现上传图片,浏览服务器(无需ckfinder),nodejs图片管理,字体居中,图片居中(超详细)

    首先是下载CKEditor,下载地址:http://ckeditor.com/download 选择里面的Customize自定义,如图 然后进入配置界面,第一个choose preset一般就选st ...

  10. 原型模式故事链(3)--JS的数据类型、以及区别、区分、转化

    上一章--原型链讲解:传送门:https://segmentfault.com/a/11... 在上一章讲解原型链时提到了:所有的引用类型都有一个_proto_属性,称之为隐式原型.那么引用类型是什么 ...