如何才能将自定义指标推送到 CloudWatch?

上次更新时间:2021 年 6 月 21 日

如何才能将自定义指标推送到 Amazon CloudWatch?

简短描述

默认情况下,AWS 服务会将数据点推送到 CloudWatch。但在某些情况下,您必须根据 AWS 服务不支持的指标来校准资源的性能。在这种情况下,您可以使用 CloudWatch 统一代理或 API 将自定义指标推送到 CloudWatch。

重要提示:自定义指标将按照其存储量和 API 使用量收费。

解决方法

使用 CloudWatch 代理推送自定义指标

CloudWatch 统一代理可采集系统级别指标并将其作为自定义指标发送到 CloudWatch。您可以使用代理从以下来源推送自定义指标:

  • Linux 或 Windows 服务器
  • Amazon Elastic Compute Cloud(Amazon EC2)实例或本地服务器

对于 Linux,请参阅支持的指标列表

有关磁盘指标的代理配置文件指标块示例(Linux):

"disk": 
    {
        "measurement": [
          
          "used_percent"
        ],
        "resources": [
          
          "*"
        ],
        "drop_device": 
        true
      }

对于 Windows,您可以在代理配置文件中引用 Windows 性能监视器中提到的任何计数器。

有关处理器计数器的代理配置文件指标块示例(Windows):

"Processor": {
        "measurement": [
          {"name": "% Idle Time", "rename": "CPU_IDLE", "unit": "Percent"},
          "% Interrupt Time",
          "% User Time",
          "% Processor Time"
        ],
        "resources": [
          "*"
        ],
        "append_dimensions": {
          "d1": "win_foo",
          "d2": "win_bar"
        }
      }

您还可以使用“StatsD”和“collectd”协议从应用程序或服务中检索自定义指标,然后通过代理推送这些指标。Linux 和 Windows 服务器都支持 StatsD,但仅 Linux 服务器支持 collectd。要使用这些协议:

1.    安装 CloudWatch 统一代理

2.    为具有 CloudWatch 权限的实例分配角色或凭证

3.    创建 CloudWatch 代理配置文件

4.    启动代理

使用 PutMetricData 推送自定义指标

如果您的使用场景不支持使用 CloudWatch 统一代理,则可以使用PutMetricData API 将自定义指标推送到 CloudWatch。

例如,要将特定端口的连接作为自定义指标推送,您可以在本地检索到值后通过 API 传输:

total_conn=$(netstat -an | grep <port> | wc -l) 

aws cloudwatch put-metric-data   --namespace "totalconn"   --metric-name <port> --dimensions Instance=<InstanceId> --value $  total_conn

同样,您可以通过 AWS 开发工具包来使用 PutMetricData API 并向 CloudWatch 发送自定义指标。创建定期运行的本地脚本来发送自定义指标。API 最适合推送不同指标和多个值的情形,原因如下:

  • 您最高可在单个 API 中使用二十个不同的指标。
  • 使用 Values and Counts(值和计数)方法时,只需一次 PutMetricData 请求,即可最高为每个指标发布 150 个值。
  • 每个指标最高可以使用十个维度。
  • 对于 HTTP POST 请求,每个 PutMetricData 请求的大小不能超过 40KB。

例如,您可以通过单个 API 调用推送多个指标,而不必分别为每个指标执行单独的 API 调用:

aws cloudwatch put-metric-data --namespace "Usage Metrics" --metric-data file://metric.json

其中 metric.json 为:

[
  {
    "MetricName": "DiskMetric",
    "Value": <value_derived_by_some_calculation>,
    "Unit": "Count"
  },
  {
    "MetricName": "MemoryMetric",
    
    "Value": <value_derived_by_some_calculation>,
    "Unit": "Count"
  }
]

这种方法通常可以降低成本,因为自定义指标将按 API 数量和存储量收费。这种方法也可帮助减少 PutMetricData API 节流问题。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?