0

编辑: 我的目标是能够从我的 spring-boot 应用程序发出指标并将它们发送到Graphite服务器。为此,我正在尝试设置statsd. 如果您可以建议一种更清洁的方法,那就更好了。

我有一个 Beanstalk 应用程序,它需要statsd作为后台进程运行。我能够通过ebextensions配置文件指定命令和包,如下所示:

packages:
  yum:
    git: []

commands:
  01_nodejs_install:
    command: sudo yum -y install nodejs npm --enablerepo=epel
    ignoreErrors: true

  02_mkdir_statsd:
    command: mkdir /home/ec2-user/statsd

  03_fetch_statsd:
    command: git clone https://github.com/etsy/statsd.git /home/ec2-user/statsd
    ignoreErrors: true

  04_run_statsd:
    command: node stats.js exampleConfig.js
    cwd: /home/ec2-user/statsd

当我尝试将应用程序部署到新环境时,EC2 节点从未完全启动。我登录以检查可能发生的情况并注意到/var/log/cfn-init.log其中01_nodejs_install02_mkdir_statsd03_fetch_statsd成功执行。所以我猜系统卡在第四个命令(04_run_statsd)上。

2016-05-24 01:25:09,769 [INFO] Yum installed [u'git']
2016-05-24 01:25:37,751 [INFO] Command 01_nodejs_install succeeded
2016-05-24 01:25:37,755 [INFO] Command 02_mkdir_statsd succeeded
2016-05-24 01:25:38,700 [INFO] Command 03_fetch_statsd succeeded
cfn-init.log (END) 

我需要以下帮助:

  • 如果在实例化环境时有更好的安装和运行方法statsd,如果您能提供有关该方法的详细信息,我将不胜感激。这个当前的方案看起来很老套。

  • 如果这是我需要坚持的方法,我该如何运行第四个命令以便statsd可以作为后台进程运行?

4

1 回答 1

1

尝试了一些事情,发现以下ebextensions配置有效:

packages:
  yum:
    git: []

commands:
  01_nodejs_install:
    command: sudo yum -y install nodejs npm --enablerepo=epel
    ignoreErrors: true

  02_mkdir_statsd:
    command: mkdir /home/ec2-user/statsd

  03_fetch_statsd:
    command: git clone https://github.com/etsy/statsd.git /home/ec2-user/statsd
    ignoreErrors: true

  04_change_config:
    command: cat exampleConfig.js | sed 's/2003/<graphite server port>/g' | sed 's/graphite.example.com/my.graphite.server.hostname/g' > config.js
    cwd: /home/ec2-user/statsd

  05_run_statsd:
    command: setsid node stats.js config.js >/dev/null 2>&1 < /dev/null &
    cwd: /home/ec2-user/statsd

请注意,我添加了另一个命令 ( 04_change_config),以便我可以在configs.xml中配置我自己的Graphite服务器和端口。statsd但是,不需要此更改来解决原始问题。

实际run命令用于setsid将命令作为守护程序运行。

于 2016-05-24T18:16:10.253 回答