雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

Splunk EnterpriseでAWS CURの情報を可視化/分析する

これはなに?

Splunkに、AWS のコストと使用状況レポート (AWS CUR)の情報を取り込んでコスト分析できる環境を構築します。

一応AWS CURの説明

AWS のコストと使用状況レポート (AWS CUR) には、利用可能な最も包括的なコストと使用状況のデータが含まれています。コストと使用状況レポート を使用して、所有する Amazon Simple Storage Service (Amazon S3) バケットに対して AWS 請求レポートを発行できます。コストを時間または日、製品または製品リソース、または自分で定義したタグごとに分類したレポートを受け取ることができます。 AWS は、1 日に 1 回、カンマ区切り値 (CSV) 形式のバケットでレポートを更新します。Microsoft Excel または Apache OpenOffice Calc などのスプレッドシートソフトウェアを使用してレポートを表示することも、Amazon S3 API を使用するアプリケーションからレポートにアクセスすることもできます。

AWS のコストと使用状況レポート とは - コストと使用状況レポート

環境

  • クラウド: AWS
  • Splunk ライセンス: Enterprise(試用版)
  • データ取り込み: Splunk Add-on for Amazon Web Service
  • データ可視化: Search & Reporting

構成

AWS CURの情報をSplunkのアドオンの「Splunk Add-on for Amazon Web Service」を使って定期的に取り込み、そのデータを「Search & Reporting」で可視化していきます。

手順

1. コストと使用状況レポート(CUR) の作成

CURの出力設定を実施していない場合は、 以下の手順を参考に、S3バケットにCURを出力するようにしてください。
出力したS3バケット情報は後から利用するのでメモしておいてください。

docs.aws.amazon.com

2. Splunk Enterprise 構築

Splunk Enterpriseをマケプレから作成します。
マケプレのコンソール上から任意VPCにSplunkをデプロイできるので手順は割愛します。

Configure AWS permissions for the Splunk Add-on for AWS - Splunk Documentation

注意点としては、以下のポリシーを付与したIAMロールをアタッチしてください。
your bucket name には、CURが格納されているS3を指定します。 aws.amazon.com

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*",
      ],
      "Resource": ""arn:aws:s3:::<your bucket name>"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": "*"
    }
  ]
}

3. Splunk Add-on for Amazon Web Service 追加/設定

Splunk Add-on for Amazon Web Service のインストールとCURの取り込み設定を実施します。

① ホーム画面より、[app - その他のappのサーチ] をクリックする
② 検索窓に「Splunk Add-on for Amazon Web Service」と入力、アドオンが表示されるので「インストール」をクリックする
③ ログイン情報を入力し、「ログインとインストール」をクリックする
f:id:ykoomaru:20201221221838p:plain

Splunkユーザーの登録がまだの場合は以下のURLから登録してください。
無料アカウントを作成 | Splunk

インストールはこれで完了です。

④ ホームに戻り、アプリ一覧より、「Splunk Add-on for AWS」 をクリックする
次にSplunkへCURを取り込む設定を実施します。
f:id:ykoomaru:20201221222231p:plain

⑤ 「設定 - Account」を開き、EC2にアタッチされているIAMロールが表示されていることを確認する。
CUR情報を読み込むための権限設定ができているか確認します。 f:id:ykoomaru:20201221230426p:plain

⑥ 画面右上の「Create New Input - Billing - Billing(Cost and Usage Report)」をクリックする f:id:ykoomaru:20201221222933p:plain

⑦ 必要な情報を入力し、「保存」をクリックする。
AWS AccountにIAMロール名、S3BucketにCURが保存されているバケットを指定すれば後はデフォルトでもOKです。
その他の設定内容は以下を参照ください。
Configure Billing inputs for the Splunk Add-on for AWS - Splunk Documentation

f:id:ykoomaru:20201221225730p:plain

以上の設定で、AWS CURをSplunkに定期的に取り込めるようになりました。

4. 分析/可視化

最後にCURの情報を使って可視化してみます。Splunk Add-on for AWS で取り込んだデータは、3 - ⑥のソースタイプの指定次第ですが、デフォルトでは「aws:billing:cur」に格納されています。Search & Reporting で検索してみると以下のように情報を取得できます。
f:id:ykoomaru:20201221224127p:plain

コスト分析に必要な情報はSplunkに入っているので、後は目的に応じて可視化していきます。
AWS CURのデータディクショナリは以下を参照してみてください。
データディクショナリ - コストと使用状況レポート

サンプル

① 各AWSサービスの週ごとのAWS利用料

Splunk上で何故か重複データがあったため、SPLの2行目で重複排除しています。

sourcetype="aws:billing:cur"
| dedup TimeInterval UsageAmount UnblendedCost ProductName 
| eval _time=strptime(UsageStartDate,"%Y-%m-%dT%H:%M:%OSZ")
| timechart  useother=false span=1w sum(UnblendedCost) by servicename

f:id:ykoomaru:20201221224659p:plain

② 各EC2の月ごとの稼働率(%)

月ごとにUsageAmountをSUMして、月稼働時間(744時間/31日想定)で割って、稼働率を算出しています。EC2はNameタグごとに分類してます。
稼働率がxx%以上ならRIを購入するみたいな情報で使えそうですね。

sourcetype="aws:billing:cur" "lineitem/UsageType=*boxusage*"
| dedup TimeInterval UsageAmount UnblendedCost ProductName 
| eval _time=strptime(UsageStartDate,"%Y-%m-%dT%H:%M:%OSZ")
| timechart  useother=false span=1mon eval(round((sum(UsageAmount)/744)*100,1)) by Name

f:id:ykoomaru:20201221224921p:plain

③ 各EC2の月ごとの利用料
sourcetype="aws:billing:cur"
| dedup TimeInterval UsageAmount UnblendedCost ProductName
| timechart useother=false  span=1mon sum(UnblendedCost) by Name

f:id:ykoomaru:20210104114849p:plain

最後に

Splunkを使ってAWSコストの可視化を実施してみましたが、かなり簡単にCURの情報を取り込めたので、後はSplunkの機能を使って目的によっていかようにでも可視化できそうな感じです。AWSのコスト分析はかなり重要な運用業務の一つだと思うので、しっかりコスト分析してコスト最適化していきましょう。