使用yet-another-cloudwatch-exporter,以降可削減CloudWatch的成本

当使用Prometheus获取CloudWatch指标时,会遇到成本问题。

好久不见了,我很久没有发布过内容了。

我打算写一个关于另一个名为yet-another-cloudwatch-exporter的CloudWatch的Prometheus Exporter,与官方的cloudwatch_exporter和用golang实现的cloudwatch_exporter不同。

我们公司最初使用golang版来获取RDS和Aurora的指标,但是导致CloudWatch的费用变得非常高。。。

亚马逊云监控的费用
由于云监控API的计费方式是基于API请求数量的,所以如果每隔5分钟获取AWS RDS的全部指标(大约25个),在一个实例上每月只需2美元左右,微不足道。
但是,如果增加实例数量或者获取CloudFront等其他指标,计费将随着指标数量增加而增加(如果我当初意识到这点就好了……)。
果不其然,第二个月收到的账单令人吃惊。

在CloudWatch中,有两个用于获取指标的API,分别是GetMetricStatistics和GetMetricData。其中,GetMetricStatistics一次只能获取一个指标,而GetMetricData一次最多可以获取500个指标。
因此,前面提到的cloudwatch_exporter使用的是GetMetricStatistics,因此当要获取的指标和目标实例增加时,CloudWatch API的数量也会相应增加(当然了…)。

关于yes-another-cloudwatch-exporter

我们之前说了很多,但为了节约成本,我们公司决定使用yet-another-cloudwatch-exporter(以下简称YACE)来取代之前的方案。

提升亚马逊云监控的Prometheus导出工具:ivx/yet-another-cloudwatch-exporter

YACE的优点

    • GetMetricData で複数のメトリックを1度のAPIコールで取得してくれる

 

    exporter内でDimensionを取得してGetMetricDataを実行してくれるので設定ファイルがシンプル
discovery:
  exportedTagsOnMetrics:
    ec2:
      - Name
    ebs:
      - VolumeId
  jobs:
  - type: es
    regions:
      - eu-west-1
    searchTags:
      - Key: type
        Value: ^(easteregg|k8s)$
    metrics:
      - name: FreeStorageSpace
        statistics:
        - Sum
        period: 600
        length: 60
    • Prometheusからのscrapeによりメトリックを取得するのではなくProxyとして動作するため、Prometheus側で30秒おきとしても直近に取得(デフォルトでは5分おきにYACEがメトリックを取得する)したものを返す

 

    クロスアカウントに対応しており、1つのNamespaceに対して複数のアカウント分の設定ができる
  jobs:
    - type: ecs-svc
      regions:
        - eu-north-1
      roleArns:
        - "arn:aws:iam::111111111111:role/prometheus" # newspaper
        - "arn:aws:iam:2222222222222:role/prometheus" # radio
        - "arn:aws:iam:3333333333333:role/prometheus" # television
      metrics:
        - name: MemoryReservation
          statistics:
            - Average
            - Minimum
            - Maximum
          period: 600
          length: 600

由于YACE的帮助,API数量大幅减少,并且成本降低了一半以上。

最后

目前,由于命名空间的限制,似乎无法获取所有服务的指标。
此外,只有自动发现的作业使用GetMetricData,静态作业使用GetMetricStatistics,因此需要注意。
如果您需要解决CloudWatch成本增加或API限制的问题,可以考虑作为一个选择。

广告
将在 10 秒后关闭
bannerAds