[eggjs/egg]同一台服务器上的两个egg应用都使用了egg-alinode来监控性能,他们的性能数据一模一样

2025-11-04 159 views
3
What happens?

我在同一台服务器上部署了两个egg应用,这两个egg应用都开启了egg-alinode用来监控性能数据,但是在node.console.aliyun.com上的监控数据来看这两个应用的监控数据一模一样,看起来是一份数据

Mini Showcase Repository(REQUIRED)

How To Reproduce

Expected behavior

两个应用的数据应该是不同的 Context Node Version: 8.9.4 Plugin Name: egg-alinode Plugin Version: 2.0.1 Platform: linux

回答

5

同一台机器上,egg-alinode 采集的系统数据当然是一样的。。。

3

你看下进程数据是不是不一样

2

我想在一台机器上部署两个egg服务 分别监控他们的性能数据 这个是可行的吗

3

@guozefei 进程级别的数据肯定是可以分开监控的,不过你要这么干的话,最好把 NODE_LOG_DIR 配置到不同的地方。

因为本质上 alinode 的工作原理是 runtime 输出进程日志到 NODE_LOG_DIR 配置的日志目录下(默认为 /tmp/),然后 egg-alinode 则定时去配置的 logdir 目录读取 runtime 输出的日志并解析上报到云端,因此你把 NODE_LOG_DIR 和 egg-alinode 的 logdir 目录配置到不同的地方即可。

我印象中 egg production 下的日志目录为 $HOME(这里得咨询 @atian25 确认下),这样一个比较简单的办法是你给两个不同的 egg 应用使用不同的 linux 用户启动即可。

当然系统级别的信息肯定是大家都一样的,毕竟你在同一台服务器上。

0

好的 我再去按您的建议修改一下 多谢 进程数据确实是不一样的

2

我印象中 egg production 下的日志目录为 $HOME(这里得咨询 @atian25 确认下)

https://github.com/eggjs/egg-scripts/blob/master/lib/cmd/start.js#L123

从这来看,是会一起的,没有加应用名区分。自己加个环境变量吧。

最好 docker 化吧。

9

@hyj1991 我之前以为你们在 alinode 日志目录下会区分应用的

9

@atian25 https://github.com/eggjs/egg-scripts/blob/master/lib/cmd/start.js#L83

这里的 logdir 本身是和 $HOME 一致的,实际上 alinode 的日志是 $HOME/logs/alinode,只要用不同的用户启动应用就行了

4

alinode runtime 为了解耦,没有任何配置就可以启动了,所以 runtime 这边没办法预先知道自己是哪个 app 的

0

但启动后,就知道 package.json 了吧,这时候才会去写入日志的。

我不确定除了 alinode 自己的 agent 外,sandbox 那边会不会也读取这个文件,因此 egg-scripts 这里不一定能改。

6

@hyj1991 目前我config.default.js里的日志配置如上图所示 您的建议是 需要在alinode的配置中再加一行 logdir,与上面Logger中配置的dir不同 是这样吗

3

@guozefei 看上面的源码,改环境变量。这个配置只是上报的路径,不是写入的路径。

6

但启动后,就知道 package.json 了吧,这时候才会去写入日志的。

runtime 启动比读取 package 还要前,在入口 js 和 event loop 启动之前就开始写日志了,我觉得把 app 的配置引入 alinode runtime 不是一个很好的解法:现有机制下,alinode 日志不带有任何的 app 配置属性,因此可以方便的切换应用来采集

2

@hyj1991 目前我config.default.js里的日志配置如上图所示 您的建议是 需要在alinode的配置中再加一行 logdir,与上面Logger中配置的dir不同 是这样吗

最简单的办法是,你在服务器上建立不同的用户,来启动你的两个 web 应用就行了,理论上不同的应用间原本就是需要做隔离的

1

但启动后,就知道 package.json 了吧,这时候才会去写入日志的。

runtime 启动比读取 package 还要前,在入口 js 和 event loop 启动之前就开始写日志了,我觉得把 app 的配置引入 alinode runtime 不是一个很好的解法:现有机制下,alinode 日志不带有任何的 app 配置属性,因此可以方便的切换应用来采集

docker 化是最治标的了,非 docker 的话就自己搞吧。

6

@atian25 好的 谢谢您的建议 主要是我们现在生产环境还没有docker化,后面应该会docker化但是现在还没有 @hyj1991 在服务器上建立两个账户这个我会找运维同学帮忙试试的 谢谢 至于 NODE_LOG_DIR环境变量的修改 是如下面这种修改的方法吗 EGG_SERVER_ENV=prod NODE_LOG_DIR='/disk2/cloudop/alinodelogs/appletLogin/' npm start

4

@guozefei 就是这样配置的,全路径

但是你配置了这个,要在 egg-alinode 的配置里加上 logdir: "你配置的 NODE_LOG_DIR 路径",egg-alinode 会去 logdir 字段配置的路径下去查找 node-xxx.log 来进行采集

1

了解了 十分感谢 我这就去试试

0

@hyj1991 egg-alinode 不会去读取这个 env ?

4

启动进程的时候通过环境变量输出日志不同的目录。采集的时候启动不同的 agent 去不同目录下读取。就能分开应用了。

9

按上面的配置 发现 抓不到qps等指标了 我是 11:36左右修改的 发现qps apdex gc 这三个指标到11:36之后就没有了