【发布时间】:2021-09-22 00:35:04
【问题描述】:
我有一个在 EC2 实例中运行的 Web 应用程序。它有不同的 API 端点。我想计算每个 API 被调用的次数。 Web 应用程序是 Java 语言。
谁能向我推荐一些文章,我可以在其中找到合适的 Java 实现以将 statsD 与 CloudWatch 集成?
【问题讨论】:
标签: java amazon-web-services amazon-ec2 amazon-cloudwatch statsd
我有一个在 EC2 实例中运行的 Web 应用程序。它有不同的 API 端点。我想计算每个 API 被调用的次数。 Web 应用程序是 Java 语言。
谁能向我推荐一些文章,我可以在其中找到合适的 Java 实现以将 statsD 与 CloudWatch 集成?
【问题讨论】:
标签: java amazon-web-services amazon-ec2 amazon-cloudwatch statsd
参考他们的文档页面https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-custom-metrics-statsd.html,他们提到在同一页面中发布指标,对于您的客户端,您可以参考https://github.com/etsy/statsd/wiki#client-implementations。
通常我采用一种简单的方法,不使用 statsd,将事件记录在文件中并将文件同步到 Cloudwatch,在 cloudwatch 中您可以配置过滤器,并且基于过滤器,您可以增加自定义指标。
【讨论】:
Install CloudWatch EC2 实例上的代理
找到并打开CW代理config file
Add statsd section 进入配置文件(JSON 格式)
{
....,
"statsd": {
"metrics_aggregation_interval": 60,
"metrics_collection_interval": 10,
"service_address": ":8125"
}
}
AWS CloudWatch 代理足够聪明,可以理解自定义标签,帮助您正确拆分从不同 API 方法收集的统计信息(“正确”在这里是指按维度名称而不是指标名称拆分 API 方法统计信息)。所以你需要一个支持标签的 Java 客户端库。例如DataDog client
按照包文档中的说明配置客户端实例,仅此而已。现在您可以在每个 REST API 操作开始时执行以下操作:
statsd.incrementCounter(“InvocationCount”, 1, “host:YOUR-EC2-INSTANCE-NAME”, “operation:YOUR-REST-OPERATION-NAME”);
CloudWatch 将自动处理所有其他事情。您将能够在“CWAgent”命名空间下的 AWS CloudWatch 控制台中看到您的指标数据流动。请注意,statds 客户端调用与 CW 控制台中的数据可见性之间的平均延迟约为 10-15 分钟。
在每个 REST API 操作中手动编写 statsd 调用可能不是一个好主意。 Decorators 将帮助您只用几行代码自动检测它。
【讨论】: