【发布时间】:2015-08-21 17:50:32
【问题描述】:
我需要找到从亚马逊 EC2 实例发出的 API(对外部实例的 Rest API 调用)调用的响应时间(EC2 上运行的应用程序进行这些调用)。如果我还可以根据正则表达式或完整的 url 过滤调用,那就太好了。我们一直在考虑记录调用并分析数据或使用 Dynatrace、Nagios 等工具,这样就不需要更改代码。 如果有人实施了这样的解决方案,请告诉我们。
【问题讨论】:
标签: amazon-ec2 monitoring
我需要找到从亚马逊 EC2 实例发出的 API(对外部实例的 Rest API 调用)调用的响应时间(EC2 上运行的应用程序进行这些调用)。如果我还可以根据正则表达式或完整的 url 过滤调用,那就太好了。我们一直在考虑记录调用并分析数据或使用 Dynatrace、Nagios 等工具,这样就不需要更改代码。 如果有人实施了这样的解决方案,请告诉我们。
【问题讨论】:
标签: amazon-ec2 monitoring
这可能不是一个完整的答案,但按照从日志开始的想法,我建议考虑使用 Cloudwatch:https://aws.amazon.com/cloudwatch/details/#log-monitoring
【讨论】:
根据您的访问级别,您可以使用 https://www.wireshark.org/ 之类的东西来监控所有流量并进行 url/协议过滤。你可以试试像http://papertrailapp.com/ 这样的日志聚合器,它有过滤功能。
正如您所说,您还可以使用某种形式的 APM,例如 dynatrace、statsd、instrumental[1]、newrelic、datadog 等,在您的应用程序内部进行监控。
[1] 我为器乐工作。
【讨论】:
您可以设置一个简单的代理来测量 Web 请求时间并为此测量编写指标。
有一些不错的工具,看看http://datadoghq.com/product或http://devmetrics.io/logslib
例如,带有 devmetrics lib 的简单 nodejs 代理:
var httpProxy = require('http-proxy');
var logger = require('devmetrics-core');
var http = require('http');
var proxy = new httpProxy.createProxyServer({});
var proxyServer = http.createServer(function (req, res) {
// now
var start_time = new Date().getTime();
proxy.web(req, res, { target: 'http://localhost:80' });
res.on('finish', function() {
var latency = new Date().getTime() - start_time;
console.log("The request was proxied in " + latency + "ms");
logger.appGauge('web_request', latency);
});
});
proxyServer.listen(3000);
【讨论】: