SaaSの利用料などを可視化してチームで共有したいことはありませんか? New Relicはシステムのパフォーマンスやエラーなどのテレメトリデータのほかにも様々なデータを取り込むことができます。例えばコストデータを取り込むことによって無駄なく適切に利用しているかチームや会社全体で把握することができます。
本記事ではインフォマティカ社のIntelligent Data Management Cloudをのコスト情報を取り込んでみます。
はじめに
New RelicはAPM AgentやInfrastructure Agentからテレメトリーデータを送信するほかに、New Relic Flexでホスト上のコマンドやファイル、HTTPアクセスを介して任意のデータをNew Relicに送信することができます。
この記事ではNew Relic Flexを使用して、インフォマティカのコスト情報をNew Relicにカスタムイベントとして送信してみます。
Informatica Intelligent Cloud Management
インフォマティカ社のInformatica Intelligent Cloud Management (IDMC) はアプリケーション・データベース・ファイルなどのデータをバッチあるいはリアルタイムで連携できるクラウド型のプラットフォーム (iPaaS: Integration Platform as a Service) です。
IDMCの価格モデルのひとつとして使用量に応じて価格設定されるIPU(Informatica Pricing Units)があります。
IPUの使用状況はRESTAPIのMetering dataを使用して取得することができます。Metering dataでは対象となる期間や取得単位(プロジェクトフォルダやアセットなど)を指定してメータリングデータのエクスポートジョブ要求を送信、ジョブのステータスを確認してデータが含まれるZIPファイルをダウンロードします。ZIPファイルにはCSVデータが含まれます。
必要なソフトウェアのインストール
New Relic FlexはNew Relic Infrastructure Agentがインストールされたホストで利用できます。こちらの記事を参考にインストールしてください。
APIの実行、後続のAPIに受け渡すパラメータの取得、ZIPファイルの展開に必要な次のソフトウェアをインストールしてください。
- curl
- jq
- zip
IPUの使用状況を取得するシェルスクリプトの作成
サンプルのシェルスクリプトを用意しました。こちらをベースにみなさんの環境に合わせてカスタマイズしてください。作成したスクリプトはNew Relic Flexの定義ファイルと同じディレクトリ /etc/newrelic-infra/integrations.d
に配置してください。
あくまでもサンプルとして自己責任でご利用ください。エラー処理は一切していませんし、効率の良くない書き方があるかもしれません。
ファイル名を idmc_metering.sh
に変更してください。
スクリプトの説明
パラメータの定義
ご利用の環境にあわせて設定してください。パラメータ | 値 | 説明 |
---|---|---|
REGION | xxxx | クラウド・プロバイダリージョン(e.g. dm2-us) |
USERNAME | xxxx | APIを実行するユーザーのユーザー名 |
PASSWORD | xxxx | APIを実行するユーザーのパスワード |
DOWNLOADPATH | /<PATH>/idmc_metering.zip | ZIPファイルの保存先 |
LOGFILEPATH | /<PATH>/idmc_metering.log | ログの出力先 |
MAX_RETRIES | 10 | ジョブのステータスを確認するためのリトライ回数 |
SLEEP_SECONDS | 60 | 次のリトライを行うまでの待機時間(秒) |
PASSWORD をスクリプト内で定義していますが、実環境では環境変数などを利用しセキュリティに注意してください。
対象期間の取得
IPUの使用状況は1日ごとに生成されますので、このシェルスクリプトが実行される直近1日のデータを対象として期間を指定します。ENDTIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
STARTTIME=$(date -u -d "$ENDTIME 1 day ago" +%Y-%m-%dT%H:%M:%SZ)
IDMCにログイン
REST APIでIDMCにログインします。RES_LOGIN=$(curl -X POST -H 'Content-Type: application/json' -s \
"https://$REGION.informaticacloud.com/saas/public/core/v3/login" \
-d '{"username" : "'"$USERNAME"'", "password" : "'"$PASSWORD"'"}')
ベースURL,セッションIDを抽出
後続のAPIの実行に必要なベースURLとセッションIDを取得します。BASEAPIURL=$(echo "$RES_LOGIN" | jq -r ".products[].baseApiUrl")
SESSIONID=$(echo "$RES_LOGIN" | jq -r ".userInfo.sessionId")
メータリングデータのエクスポートジョブ要求
IPUを取得するためのAPIを実行します。IPUが取得できるようになるまで時間がかかりますので、このあとの処理でステータスを確認しリトライを行います。RES_EXPORT=$(curl -X POST -H 'Content-Type: application/json' -H "INFA-SESSION-ID: $SESSIONID" -s \
"$BASEAPIURL/public/core/v3/license/metering/ExportMeteringData" \
-d '{
"startDate" : "'"$STARTTIME"'",
"endDate" : "'"$ENDTIME"'",
"jobType" : "PROJECT_FOLDER",
"combinedMeterUsage" : "TRUE",
"allLinkedOrgs" : "TRUE"
}')
# ジョブID, ステータスを抽出
JOBID=$(echo "$RES_EXPORT" | jq -r ".jobId")
STATUS=$(echo "$RES_EXPORT" | jq -r ".status")
このサンプルスクリプトでは jobType
に PROJECT_FOLDER を指定し、プロジェクト別およびフォルダ別にエクスポートします。
メータリングデータのダウンロード
エクスポートジョブのステータスが SUCCESS になるまでリトライします。SUCCESS になったらZIPファイルのダウンロードと展開を行います。展開されたCSVをもとにNew Relicへデータが送信されます。for i in $(seq 1 $MAX_RETRIES)
do
if [ $STATUS = "SUCCESS" ]; then
# ダウンロード
RES_DOWNLOAD=$(curl -X GET -H 'Content-Type: application/json' -H "INFA-SESSION-ID: $SESSIONID" -o "$DOWNLOADPATH" -s \
"$BASEAPIURL/public/core/v3/license/metering/ExportMeteringData/$JOBID/download")
# ダウンロード後に展開
unzip -p $DOWNLOADPATH
break
else
# $SLEEP_SECONDS 秒待機してからステータス確認
sleep $SLEEP_SECONDS
RES_GETTING=$(curl -X GET -H 'Content-Type: application/json' -H "INFA-SESSION-ID: $SESSIONID" -s \
"$BASEAPIURL/public/core/v3/license/metering/ExportMeteringData/$JOBID")
STATUS=$(echo "$RES_GETTING" | jq -r ".status")
fi
done
IDMCからログアウト
REST APIでIDMCからログアウトします。RES_LOGOUT=$(curl -X POST -H 'Content-Type: application/json' -H "INFA-SESSION-ID: $SESSIONID" -s \
"$BASEAPIURL/api/v2/user/logout")
New Relic Flexの設定
こちらもサンプルの定義ファイル(yaml)を用意しましたので必要に応じてカスタマイズしてください。定義ファイルは /etc/newrelic-infra/integrations.d
に配置してください。
ファイル名を idmc_metering.yml
に変更してください。
定義ファイルの説明
メイン セクション
IPUの使用状況は1日ごとに生成されますので、New Relic Flexでの実行も24時間ごとにしています。integrations:
- name: nri-flex
interval: 24h
timeout: 15m
コマンド セクション
作成したシェルスクリプトを実行します。- CSVの先頭にカラム名があるので、
row_start
で2行目以降を取得します。 - IPUの使用状況が生成された日時をNew Relicのタイムスタンプにするため
timestamp_conversion
とrename_keys
を設定しています。
config:
name: Informatica
apis:
- event_type: IDMC_Metering
commands:
- run: /etc/newrelic-infra/integrations.d/idmc_metering.sh
split: horizontal
split_by: ","
row_start: 1
set_header: [date, project, folder, orgId, orgType, ipu]
timeout: 600000
timestamp_conversion:
date: TIMESTAMP
rename_keys:
date: timestamp
データを確認してみよう
New Relic Flexが実行されるとIPUの使用状況ががインジェストされます。
Data Explorerを利用するとデータを簡単に確認できます。
IPUの使用状況は毎日00時00分(UTC)のタイムスタンプとして生成されます。NRQLのSINCE句を 24 hour ago
とするなどしデータを確認してください。
New Relic Flexを利用することにより様々な取り込むことができます。この記事ではインフォマティカ社のIntelligent Data Management Cloudのコスト情報を例にしましたが、他のアプリケーションでもAPIやファイルなどでコスト情報を公開していれば取り込むこともできます。
テレメトリデータに加え、コストやビジネスデータを取り込んで活用することによりオブザーバビリティの成熟度向上にお役立てください!
その他
New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!
New Relic株式会社のX(旧Twitter) や Qiita OrganizationOrganizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!