gpt4 book ai didi

ruby - AWS 上远程机器上的进程计数

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:29 25 4
gpt4 key购买 nike

我正在为在 Amazon EC2 实例上运行的应用程序设计一个 Auto Scaling 系统。应用程序从 SQS 读取消息并对其进行处理。

Auto Scaling 系统将监控两件事:

  1. SQS 中的消息数量,
  2. 所有 EC2 机器上运行的进程总数。

例如,如果 SQS 中的消息数量超过 3000,我希望系统自动缩放,创建一个新的 EC2 实例,在其上部署代码,当消息数量低于 2000 时,我希望系统终止 EC2 实例.

我正在用 Ruby 和 Capistrano 做这件事。我的问题是:

我无法找到一种方法来确定在所有 EC2 机器上运行的进程数并将该数字保存在变量中。你能帮帮我吗?

最佳答案

您可能希望利用 cron 和 CloudWatch API 将数字手动推送到 CloudWatch,作为自动扩展组策略的一部分。我所说的数字是指每个实例的进程数 ps aux | grep 你的进程 | wc -l

CloudWatch 将允许您为该手动指标设置警报,该指标由所有正在运行的实例或自动扩展组的进程数量的总和聚合而成。

让你开始的东西:

手动推送 RAM 内存指标: http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts-perl.html

还有一个: http://aws.typepad.com/aws/2011/05/amazon-cloudwatch-user-defined-metrics.html

对于内存,它看起来很简单,因为亚马逊已经为此提供了脚本。对于流程,您可能需要深入研究这些脚本或阅读官方 API 文档

编辑:

如果您现在担心监视系统中的单点故障并且您有一个服务器列表,那么最好从远程服务器并行检查它们:

rm ~/count.log

# SSH in parallel
for ROW in `cat ~/ListofIP.txt`
do
IP=`echo ${ROW} | sed 's/\./ /g' | awk '{print $1}'`
ssh -i /path/to/keyfile root@${IP} "ps -ef | grep process_name.rb | grep -v grep | wc -l" >> ~/count.log &
done

# Wait for totals
while [ ! `wc -l ~/ListofIP.txt` -eq `wc -l ~/count.log` ]
do
wait 1
done

# Sum up numbers from ~/count.log
# Push TO CloudWatch

关于ruby - AWS 上远程机器上的进程计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22731532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com