以编程方式在EC2实例上运行statsd作为守护程序

时间:2016-05-24 01:13:45

标签: elastic-beanstalk statsd ebextensions

编辑: 我的目标是能够从我的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可以作为后台进程运行?

1 个答案:

答案 0 :(得分: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),以便我可以在Graphite配置中配置我自己的statsd服务器和端口。但是,这个变化不需要解决原始问题。

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