zl程序教程

您现在的位置是:首页 >  其他

当前栏目

CloudWatch Metric Streams – 实时将 AWS 指标发送给合作伙伴和您的应用程序

2023-03-02 10:32:48 时间

当我们在 2009 年推出 Amazon CloudWatch用于 Amazon EC2 的新功能:Elastic Load Balancing、Auto Scaling 和 Amazon CloudWatch)之后,它跟踪了 EC2 实例的性能指标(CPU 负载、磁盘 I/O 和网络 I/O),并以一分钟为时间间隔将它们汇总,然后将它们存储两星期。当时,它用于监控实例运行状况以及驱动 Auto Scaling。如今,CloudWatch 已演变成一项全面和复杂得多的服务。最近新增的一些功能包括具有 1 分钟粒度并适用于所有 EBS 卷类型的指标CloudWatch Lambda Insights 以及 Metrics Explorer

AWS 合作伙伴利用 CloudWatch 指标创建了各种监控、警报和成本管理工具。为了访问这些指标,合作伙伴创建了轮询队列,这些队列为它们的每个客户调用了 ListMetricsGetMetricData 函数。

必须根据每个合作伙伴客户创建的 AWS 资源数量以及为每个资源检索的 CloudWatch 指标数量,成比例扩展这些队列。此轮询是每个合作伙伴都必须完成的无差别繁重工作。它不会增加任何价值,而且需要投入原本可以通过其他方式善加利用的宝贵时间。

新的指标流
CloudWatch 边栏菜单(控制面板、警报、指标等等)为使 AWS 合作伙伴和其他各方更快、更轻松地大规模访问 CloudWatch 指标,我们正在推出 CloudWatch 指标流。系统并不执行轮询(这可能导致 5 到 10 分钟的延迟),而是将指标传送到 Kinesis Data Firehose 流。此功能极具可扩展性,而且效率要高得多,并支持两个重要的使用案例:

合作伙伴服务 – 您可以将指标流式传输到 Kinesis Data Firehose,它会将数据写入到 AWS 合作伙伴拥有的终端节点。这样,合作伙伴就能够大幅缩减他们的轮询队列,并构建一些工具,以便在关键成本或绩效指标意外发生变化时更快地响应。

数据湖 – 您可以将指标流式传输到自己的 Kinesis Data Firehose。从那里,您可以应用所需的任何数据转换,然后将指标推送到 Amazon Simple Storage Service (S3)Amazon Redshift。随后,您可以随意使用全套 AWS 分析工具:S3 SelectAmazon SageMakerAmazon EMRAmazon AthenaAmazon Kinesis Data Analytics 等等。我们的客户这样做是为了将计费与性能数据相结合,以度量和改进成本优化、资源性能和资源利用率。

CloudWatch 指标流是完全托管的,设置起来非常轻松。可以对流进行扩展,以处理任意数量的指标,并在两三分钟内传送到目的地。您可以选择将所有可用的指标发送到您创建的每个流,也可以选择加入任何可用的 AWS(EC2、S3 等等)或自定义命名空间。

设置流之后,指标会在一两分钟内开始流动。如有必要,可以在稍后停止并重新启动这一流动,这对测试和调试来说非常方便。当设置流时,您可以在二进制 Open Telemetry 0.7 格式与人类可读的 JSON 格式之间进行选择。

每个指标流都驻留在特定的 AWS 区域,系统会将指标传送到单个目的地。如果希望向多个合作伙伴传送指标,则需要为每个合作伙伴创建一个指标流。如果您正在创建跨越多个 AWS 账户和/或区域的集中式数据湖,则需要设置一些 IAM 角色(有关更多信息,请参阅使用 Amazon Kinesis Data Firehose 控制访问权限)。

创建指标流
我们来看一下使用指标流的两种方法。首先,我会使用 Quick S3 设置选项将数据发送到 Kinesis Data Firehose,然后从那里发送到 S3。随后,我会使用 Firehose 将数据写入到 AWS 合作伙伴 New Relic 上的一个终端节点。

我会打开 CloudWatch 控制台,选择所需的区域,然后单击左侧导航中的 Streams(流)。我会查看此页面,然后单击 Create stream(创建流)以继续:

控制台中的 CloudWatch 指标流主页

我会选择要流式传输的指标。我可以选择 All metrics(所有指标),然后排除我不需要的那些指标,也可以单击 Selected namespaces(所选的命名空间)并包含我需要的那些命名空间。我会选择 All(全部),但排除 Firehose:

创建指标流 - 第 1 部分,全部或所选

我选择 Quick S3 setup(Quick S3 设置),然后将这一部分中的其他配置设置保持不变(我会将它展开,以使您能够看到所有可用的选项):

创建指标流 - 用于 S3 存储桶和 IAM 角色的选项

随后,我会为我的流输入一个名称 (MyMetrics-US-East-1A),确认我了解要创建的资源,然后单击 Create metric stream(创建指标流):

为指标流设置名称并确认要创建的资源

我的流会在几秒钟内创建并激活:

指标流处于活动状态

对象会在一两分钟内开始出现在 S3 存储桶中:

对象显示在 S3 存储桶中

我可以使用上面列出的任何工具分析我的指标,也可以简单地查看原始数据:

一个指标对象,以 NotePad++、JSON 格式显示

每个指标流都会生成自己的一组 CloudWatch 指标:

指标流的指标

我可以停止一个正在运行的流:

如何停止正在运行的流

然后启动它:

如何启动已停止的流

我还可以使用 CloudFormation 模板创建指标流。下面是一份代码摘录:

AWSTemplateFormatVersion: 2010-09-09
Resources:
  MetricStream:
    Type: 'AWS::CloudWatch::MetricStream'
    Properties:
      OutputFormat: json
      RoleArn: !GetAtt
        - MetricStreamToFirehoseRole
        - Arn
      FirehoseArn: !GetAtt
        - FirehoseToS3Bucket
        - Arn

现在,我们来看一下合作伙伴的使用案例! New Relic 的团队为我设置了一个 CloudFormation 模板,此模板创建了必要的 IAM 角色和指标流。我只输入了我的 API 密钥和 S3 存储桶名称,所有的繁重工作都由此模板完成。下面是我观察到的现象:

New Relic UI 中显示指标

注意事项
就是这样! 这里需要牢记几点:

区域 – 指标流现已在所有商业 AWS 区域推出,但 AWS 中国(北京)区域和 AWS 中国(宁夏)区域除外。如前所述,您需要在每个所需的账户和区域中创建指标流(这对于 CloudFormation Stacksets 来说是一个很好的使用案例)。

定价 – 您需要为每 1000 次指标更新支付 0.003 USD,并支付与 Kinesis Data Firehose 相关联的任何费用。要了解更多信息,请查看定价页面

指标 – CloudWatch 指标流与所有 CloudWatch 指标兼容,但不会发送时间戳超过两个小时的指标。这包括 S3 每日存储指标和一些计费指标。

合作伙伴服务
我们设计此功能的目标是让 AWS 合作伙伴(包括 Datadog、Dynatrace、New Relic、Splunk 和 Sumo Logic)更轻松、更高效地访问指标,以便能够构建更好的工具。我们一直在与这些合作伙伴合作,以帮助他们开始使用 CloudWatch 指标流。下面是他们为了分享自己的经验而撰写的一些博客文章。(我正在使用他们发表这些文章时的链接来更新本文。)

现已推出
CloudWatch 指标流现已推出,您可以使用它将指标流式传输到您自己的 Kinesis Data Firehose 或 AWS 合作伙伴的 Kinesis Data Firehose。有关更多信息,请查看文档,并向 Amazon CloudWatch 的 AWS 论坛发送反馈。

Jeff