Opbeat已死,请用Elastic APM

Opbeat已死,请用Elastic APM

今天收到Opbeat即将关闭的邮件。APM服务众多,Opbeat有什么优势呢?

  1. 简单,UI简洁
  2. 可以和Git集成,方便看版本发布后性能变化
  3. 类似sentry的错误收集功能

后来Opbeat被Elastic收购了,做成了Elastic APM,过了快一年终于迎来关服,下面看看Elastic APM表现如何。

Docker快速部署

Opbeat已死,请用Elastic APM

官方文档的一张图,架构上Elastic APM和ES、Kibana还是相对独立的,集成也不难。

下面用Docker部署一个用于本地开发的环境,可以快速上手而不用纠结运维和性能优化,这里用了带X-Pack的版本,因为有APM UI,不然就只有Dashboard。

启动Elasticsearch

docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.2.4

启动Kibana,注意需要通过ELASTICSEARCH_URL设置ES的URL,IP要用网卡的IP,不能用localhost、127.0.0.1,不然会被docker隔离:

docker run -d -e ELASTICSEARCH_URL=http://192.168.0.102:9200 -p 5601:5601 docker.elastic.co/kibana/kibana:6.2.4

最后安装APM Server:

wget https://artifacts.elastic.co/downloads/apm-server/apm-server-6.2.4-linux-x86_64.tar.gz
tar xf apm-server-6.2.4-linux-x86_64.tar.gz
cd apm-server-6.2.4-linux-x86_64
./apm-server setup
./apm-server -e

配置文件在apm-server.yml,都用默认配置。

完成之后,打开Kibana,就能看到APM增加的Dashboard和APM UI。

NodeJS集成

NodeJS集成使用elastic-apm-node包,集成代码必须加在代码的最前面:

var apm = require('elastic-apm-node').start({
    serviceName: 'Demo API',
    serverUrl: 'http://localhost:8200'
})

写了一个简单的Koa应用看一下效果:

require('elastic-apm-node').start({
    serviceName: 'Demo API',
    secretToken: '',
    serverUrl: 'http://localhost:8200'
})

import Koa from 'koa';
import KoaRouter from 'koa-router';
import Redis from 'redis';
import {promisify} from 'util'

let app = new Koa()
let router = new KoaRouter();
let redis = Redis.createClient();

router.get("/", async (ctx, next) => {
    ctx.body = "OK";
});

router.get("/incr", async (ctx, next) => {
    let incr = promisify(redis.incr).bind(redis)
    let count = await incr("count")
    ctx.body = count;
});

app.use(router.routes());
app.listen(3000);

然后直接用siege分别10并发压测两个接口.

APM UI里可以看到响应时间、每分钟请求数

Opbeat已死,请用Elastic APM

错误信息也有记录:

Opbeat已死,请用Elastic APM

下面是每个路由请求的情况:

Opbeat已死,请用Elastic APM

点击路由能看请求的详细信息:

Opbeat已死,请用Elastic APM

Redis、MySQL、外部服务请求的耗时也会被自动被记录(这里只有一个Redis incr命令)。

Elastic APM功能基本和Opbeat一致,只缺了Git集成。

总结

如果你是Opbeat的用户,又没找到替代品,Elastic APM还是值得一试的,毕竟几乎一致的用户体验,接口可没变化。

如果你是ELK的用户,但是没做APM,Elastic APM也是值得一试的,集成非常方便。

相关推荐