如何將自訂指標推送至 CloudWatch?

2 分的閱讀內容
0

如何將自訂指標推送至 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 SDK 以使用 PutMetricData API,並將自訂指標傳送至 CloudWatch。建立定期執行以傳送自訂指標的本機指令碼。由於以下原因,API 最適合推送不同的指標和多個值:

  • 您可以在單一 API 中使用多達 1,000 個不同的指標。
  • 使用值和計數方法,您可以使用一個 PutMetricData 請求,讓每個指標可發佈多達 150 個值。
  • 每個指標可使用多達 30 個維度。
  • 針對 HTTP POST 請求,每個 PutMetricData 請求的限制為 1 MB。

例如,您可以使用單一 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 上的限流。


AWS 官方
AWS 官方已更新 1 年前