12
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

yet-another-cloudwatch-exporter の時間に関するオプションを把握する

12
Last updated at Posted at 2025-07-30

yet-another-cloudwatch-exporter と CloudWatch, Prometheus の間の関係を調べたので備忘録として

yet-another-cloudwatch-exporter の概要

prometheus-community/yet-another-cloudwatch-exporter は CloudWatch メトリクスを取得する Exporter です

(以下、yet-another-cloudwatch-exporter を YACE と略記します)

弊社では当時の他の選択肢よりも API コールを少なくしてコストを削減できるため導入した経緯があります

しかしながら、Prometheus から YACE を参照する場合には時間に関するオプションに注意する必要があります

なお YACE は Auto-discovery なメトリクス (discovery: で指定した job ) で GetMetricData API を使用します

この記事では上記の GetMetricData API を使ったデータ取得を前提としています

config

YACE では以下のように config を設定しメトリクスを取得します1

apiVersion: v1alpha1
sts-region: eu-west-1
discovery:
  exportedTagsOnMetrics:
    kafka:
      - Name
  jobs:
  - type: kafka
    regions:
      - eu-west-1
    searchTags:
      - key: env
        value: dev
    metrics:
      - name: BytesOutPerSec
        statistics:
        - Average
        period: 600
        length: 600

時間に関するオプションは以下です

  • period: メトリクスの取得期間
  • length: 要求する時間長

なお delay を指定すると要求する終了時刻を過去にずらし、集計後の正確な値を取得できるとされています2

length, delay を変数とみなして実際に実行される get-metric-data CLI を書くと以下のようになります

aws cloudwatch get-metric-data \
  -- start-time $(date -u -d "$end_time - ${length} seconds" +"%Y-%m-%dT%H:%M:%SZ") \
  -- end-time $(date -u -d "$now - ${delay} seconds" +"%Y-%m-%dT%H:%M:%SZ")

また、コマンドでの時間に関するオプションは以下です

  • -scraping-interval: YACE がメトリクスを取得する API コールをする間隔

このオプションのデフォルトが 300s であり、他の設定値と揃えれば整合性に悩む必要はないですがコストが増加する場合があります

今回は -scraping-interval が period より長いときにどのような不都合があるか確認しておきます

実際の取得タイムライン

以下のような job を想定します

  jobs:
  - type: AWS/ApplicationELB
    metrics:
      - name: RequestCount
        statistics:
        - Sum
        period: 60
        length: 600

以上の設定を interval 60s でスクレイプする Prometheus と併せてタイムラインに表示すると下図のようになります

各ツール上でのデータ

YACE では delay の時間よりも過去のデータポイントをメトリクスとして保持します

(addCloudwatchTimestamp は今回考慮しない)

下図では実際に取得する CloudWatch メトリクスを仮に2分前としています

YACE の interval が 5m の場合、問い合わせに対しては同じ値を5分間返し続けます

Prometheus の interval が 1m だと同じ値を5回取得することになります

output_chart.png

統計が Average のメトリクスでは大きな問題になりませんが、統計が Sum 等のメトリクスでは精度が著しく落ちる場合があります

じゃあどうするか

確かに -scraping-interval 60 とすれば 理想的には 欠損がなく、正確に近いデータを期待できます

一方で、CloudWatch の API コールの費用が無視できない額になる可能性があります

メトリクスの利用目的 (Alertmanager, Grafana etc.) に応じて時間に関する設定値を調整するとよいでしょう

今回は時間に関する設定値を統一しない場合の挙動を整理しました


免責事項

  • この記事の内容は個人の見解であり、所属する組織の意見を代表するものではありません。
  1. yet-another-cloudwatch-exporter/docs/configuration.md

  2. クラウドメトリクスの遅延 | Datadog

12
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?