Elastic APM 是 Elastic 公司开源的一款 APM 工具,目前还处于 Beta 阶段,它有以下几个优势:
Elastic APM 架构如下:
APM Agent(即在应用端引入的探针)将收集的日志发送到 APM Server(Go 写的 HTTP 服务),APM Server 将数据存储到 ElasticSearch 中,然后通过 Kibana 展示。
Kibana 展示如下:
我们使用 Docker 安装并启动 ELK,运行如下命令:
$ docker run -p 5601:5601 \ -p 9200:9200 \ -p 5044:5044 \ -it --name elk sebp/elk
首先,下载 APM Server 解压。然后运行以下命令:
$ ./apm-server setup # 导入 APM 仪表盘到 Kibana $ ./apm-server -e # 启动 APM Server,默认监听 8200 端口
用浏览器打开 localhost:5601,进入 Dashboard 页,如下所示:
测试代码如下:
const apm = require('elastic-apm-node').start({ appName: 'test' }) const Paloma = require('paloma') const app = new Paloma() app.route({ method: 'GET', path: '/', controller (ctx) { apm.setTransactionName(`${ctx.method} ${ctx._matchedRoute}`) ctx.status = 200 }}) app.route({ method: 'GET', path: '/:name', controller (ctx) { apm.setTransactionName(`${ctx.method} ${ctx._matchedRoute}`) ctx.status = 200 }}) app.listen(3000)
运行该程序,发起两个请求:
$ curl localhost:3000/ $ curl localhost:3000/nswbmw
等待一会,Kibana 展示如下:
在 Elastic APM 中,有两个术语:
现在,我们来测试下 Elastic APM 的错误收集功能。修改测试代码为:
const apm = require('elastic-apm-node').start({ appName: 'test' }) const Paloma = require('paloma') const app = new Paloma() app.use(async (ctx, next) => { try { await next() } catch (e) { apm.captureError(e) ctx.status = 500 ctx.message = e.message } }) app.route({ method: 'GET', path: '/', controller: function indexRouter (ctx) { apm.setTransactionName(`${ctx.method} ${ctx._matchedRoute}`) throw new Error('error!!!') }}) app.listen(3000)
重启测试程序,并发起一次请求。回到 Kibana,单击 Dashboard -> [APM] Errors 可以看到错误日志记录(自动聚合)和图表,如下所示:
单击 View Error Details 进入错误详情页,如下所示:
可以看出:在错误日志中展示了错误代码及行数、上下几行代码、父级函数名和所在文件等信息。
上一节:5.1 NewRelic
下一节:6.1 koa-await-breakpoint
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8