我们正在构建一个医疗图像处理软件堆栈,目前托管在各种AWS资源上.作为此应用程序的一部分,我们有一些长期运行的服务器(数据库,负载平衡器,Web应用程序等).在这些服务器上收集性能数据非常简单 – 我的Nagios(用于监控/通知)和Munin(用于收集性能数据和显示趋势)的配方工作正常.
但是 – 作为此应用程序的一部分,我们不断启动并终止EC2上的计算实例.在典型用法中,这些计算实例启动,自行配置,从消息队列接收作业,然后开始处理该作业,这需要15分钟到8小时以上.作业完成后,这些实例将被终止,永远不会再被听到.
在这些短期实例上收集性能数据的体面策略是什么?
我不一定需要对它们进行监控 – 如果它们由于某种原因而失败,我们的应用程序将检测到这一点,并处理在另一个实例上重新启动作业或提升标志,以便管理员可以查看事情.但是,收集cpu(用户,空闲,iowait等),内存使用,网络流量,磁盘读/写数据等信息仍然很有用.在我们的内部数据库中,我们跟踪机器的实例ID运行每个作业,能够查找特定实例ID的性能数据以进行故障排除和分析是非常有帮助的.
Munin似乎不是一个很好的候选者,因为它需要在文本文件中维护一个munin节点列表 – 对于一个流失量大的环境来说远非理想,并且每个节点运行的时间很短,我宁愿无限期地保留全分辨率数据,而不是让RRD随着时间的推移降低数据.
最后,我的猜测是这需要一个监控引擎:
>使用数据库(MySQL,sqlite等)进行配置和数据存储
>公开用于添加/删除主机和服务的API
在评估选项时,还有其他我应该考虑的事情吗?
也许我过度思考这个问题,并且应该在这些短期实例上以1分钟的间隔运行sar并在终止之前收集sar db文件.