New Relicを使ってFOCUS形式のクラウドコストデータを可視化してみよう

## はじめに

みなさん、こんにちは。クラウドコストの最適化をしていますか？クラウドのコストと使用量を最適化していく上での大切な第一歩は、自分が使っているクラウドコストをしっかりと把握、理解をすることです。

クラウドコストの把握や理解には、クラウドのネイティブサービスや純粋なFinOpsツールを活用するケースが多く、今も大多数はこれらを活用しているかと思います。しかし昨今、オブザーバビリティツールの普及に伴い、オブザーバビリティツールを活用してクラウドコストを可視化するといったケースも増えてきています。

ということで、今回はNew Relicを使ってFOCUS形式のクラウドコストを可視化をしてみようと思ったので、こちらの方法について紹介していきたいと思います。（最初にお伝えしておきますが最後に盛大なオチがあります。ごめんなさい、、、）

## そもそも "FOCUS" とは？

FinOps Open Cost and Usage Specification（FOCUS）は、FinOps Foundation主導でクラウドプロバイダー各社も協力して作り上げたクラウドのコストと使用量の課金データに関するオープンソースの技術仕様で、クラウドプロバイダー各社でバラバラだったクラウド請求書のデータフォーマットを統一規格で扱えるようにするものです。

AWS、Azure、Google Cloud、OCIなどの主要なパブリッククラウドはすでに対応しており、今後は主要なSaaSプロバイダーなどにも広がっていくことが見込まれています。まだ過渡期ということもあり、ほとんどの方は現時点で気にする必要はありませんが、ぜひ今後の動向には注目してみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/0524385f-3553-e59e-52c8-58c1e416ec53.png)
出典: [What is FOCUS?] by [FinOps Foundation] (CC BY 4.0)

[What is FOCUS?]: https://focus.finops.org/what-is-focus/

## 構築予定のイメージ図

次の図のように各クラウドプロバイダーのコスト管理サービスからFOCUS形式でデータをエクスポートし、エクスポートしたデータをNew Relicへログデータとして流し込む、といった形で実現できると見込んでいます。（ん、見込み？）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/8504d5bb-8965-9ad2-3a2f-41ae4b092767.png)

## AWSからのデータインジェスト設定

### ステップ1. コスト情報をFOCUS形式でS3へエクスポート

[FOCUSサイト手順](https://focus.finops.org/get-started/aws/)を参考にAWS Billing and Cost Managementコンソールから[データエクスポートの作成](https://docs.aws.amazon.com/ja_jp/cur/latest/userguide/dataexports-create.html)を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/9f3d3126-ccfa-7662-379e-382393aafe2f.png)

### ステップ2. S3からのログ送信するためのLambda関数を作成

次にNew Relic公式ドキュメントを参考に[S3からのログ送信のためのAWS Lambda](https://docs.newrelic.com/jp/docs/logs/forward-logs/aws-lambda-sending-logs-s3/)を作成します。今回はNew Relicから公開されている`NewRelic-log-ingestion-s3`を使用します。

https://github.com/newrelic/aws_s3_log_ingestion_lambda

といっても、複雑なことはなく単純に「[AWS Serverless Application Repository](https://serverlessrepo.aws.amazon.com/applications)」からポチポチとするだけでデプロイが簡単にできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/83137e52-1326-f2a9-94fb-bf2db0ad6ad5.png)

デプロイされたLambda関数にはトリガーが設定されていないため、ドキュメントの手順に沿ってS3イベントをトリガーに設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/128e1fda-95ca-28c0-9d30-1f0db1544a33.png)

以上でAWSの設定はおわりです。あとはAWS Billing and Cost Managementからデータがエクスポートされたら自動的にNew Relic側へと反映されることを祈るばかりです。

## Azureからのデータインジェスト設定

### ステップ1. コスト情報をFOCUS形式でS3へエクスポート

[FOCUSサイト手順](https://focus.finops.org/get-started/microsoft/)を参考にMicrosoft Cost Managementコンソールから[エクスポートの作成](https://learn.microsoft.com/ja-jp/azure/cost-management-billing/costs/tutorial-improved-exports)を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/1c5a0059-da0e-3638-cafc-02aa441fcb50.png)

### ステップ2. Blobストレージからのログ送信するための関数を作成

次にNew Relic公式ドキュメントを参考に[Azure Blobストレージからログを送信](https://docs.newrelic.com/jp/docs/logs/forward-logs/azure-log-forwarding/#azure-blob-storage)する関数を作成します。今回はNew Relicから公開されている次のARMテンプレートを使用します。

https://github.com/newrelic/newrelic-azure-functions/blob/master/armTemplates/azuredeploy-blobforwarder.json

New Relicコンソールの`Integrations & Agents`から`Microsoft Azure Blob Storage`タイルを選択し、手順にしたがってポチポチするだけでデプロイが簡単にできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/57244780-e5a7-753b-88b8-a474eec59aa1.png)

以上でAzureの設定もおわりです。あとはMicrosoft Cost Managementからデータがエクスポートされたら自動的にNew Relic側へと反映されることを祈るばかりです。

## Google Cloudからのデータインジェスト設定

### ステップ1. コスト情報をBigQueryにエクスポート

[FOCUSサイト手順](https://focus.finops.org/get-started/google-cloud/)を参考にGoogle Cloud Billingコンソールから[BigQueryへの課金データのエクスポートの設定](https://cloud.google.com/billing/docs/how-to/export-data-bigquery-setup?hl=ja)を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/18117fff-bd3d-8dbc-5d86-f50ed3c052fe.png)

### ステップ2. コスト情報をFOCUS形式でPub/Subにエクスポート

公式ドキュメントを参考にBigQueryの[継続的クエリ](https://cloud.google.com/bigquery/docs/export-to-pubsub?hl=ja)を使ってPub/Subトピックにデータをエクスポートします。

こちらの[ダウンロードサイト](https://cloud.google.com/resources/google-cloud-focus?hl=ja
)から入手できる「**Google Cloud's Guide to FOCUS™ v1.0**」にて、FOCUS形式でデータを取得するためのSQLクエリが紹介されているため、こちらを参考にいただければイケるのでは、と考えています。

、、、ちなみに、最初に謝っておきます。すいません。こちらのガイドなのですが残念ながらPDFファイルで提供されており、困ったことにページも複数にまたがっています。単純なコピー＆ペーストでSQLクエリの構文を取ってこれない、インデントもめちゃくちゃになる、ということもあり面倒だな～とフィージビリティの確認を怠っております。ごめんなさい^^;

### ステップ3. Pub/Subからログ送信するための設定

最後に、次にNew Relic公式ドキュメントを参考に[Pub/Subトピックからログを送信する設定](https://docs.newrelic.com/jp/docs/logs/forward-logs/google-cloud-platform-log-forwarding/)を行います。今回はDataflowジョブを使うほどでもないため、ヘッダーレスAPIを使用しましょう。

なお、今回はCloud Loggingからのエクスポートではないため最後のルーティングシンクの設定はスキップしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/05bdcf3c-c4e0-ce6c-624c-f5046f43dd8b.png)

以上でGoogle Cloudの設定もおわりです。ステップ2をスキップしてしまったため、フィージビリティは確認できていませんが、こちらでCloud Billingからデータがエクスポートされたら自動的にNew Relic側へと反映される見込みです^^;

## New Relic側にインジェストされたデータを可視化

なんですが、もうデータインジェストしただけおなかいっぱいだな、、、ってことで、またどこか時間が取れるときにでも更新しようと思います^^; イメージとしては以下のような感じで見えるようになるかと思います。

![](https://focus.finops.org/wp-content/uploads/2024/08/focus_dashboard_1.0.png)
画像引用: https://focus.finops.org/get-started/aws/

## 最後に

この記事を書いておいてなんですが、正直クラウドコストの可視化をすることだけにフォーカスすると、別にクラウドのネイティブサービスでも問題なくできますし、FOCUS形式のデータフォーマットなんて使う必要もありません。

ただ、業務を進めるにあたってクラウドコスト以外にも、ビジネス指標やらエラーバジェットだとかのデータも確認しにいくかと思います。そのときに、ツールを切り替えてあっちやこっちに行くのは正直なところ面倒で、なるべくなら見に行くダッシュボードはひとつのツールにまとめたいな、と思うのは人の性かと思います。

ということで、すでにオブザーバビリティツールを活用しており、クラウドコストの可視化にも興味があれば挑戦してみてはいかがでしょうか。

以上、今回は「New Relicを使ってFOCUS形式のクラウドコストデータを可視化してみよう（**と思っただけ**）」でした。、、、えっ！？タイトルが違う？まぁいいじゃないかｗ

---

- New Relic は、New Relic, Inc.の登録商標です。
- その他、本資料に記述してある会社名、製品名は、各社の登録商品または商標です。