Datadog製品使用量APIを使ったデータ取得方法
はじめに
皆さんは月のDatadogのコスト予算はどのように作成されていますか?
弊社では今後の予算管理と費用抑制のため、独自の予測計算を行っています。
そのため、月の途中で各製品の日次利用量(料金ではなく)を正確に把握する必要がありました。
しかし、Datadogのコンソール画面ではこれらの情報が確認しづらく確認する製品の数も多いこともあり、コンソール画面を変えながら何十回もクリックしなければいけない状況でした。
そんな中、Datadogの製品使用量APIがあることを知り、それを活用することでより詳細なデータを効率的に取得できるようになりました。現在はそのデータを活用して月の予算を作成しています。
本記事では、そのAPIの取り方をご紹介します。
ターゲット
・Datadogのコスト管理を実施している方
・Datadogのコスト管理に製品使用量APIを使ってみたいと考えている方
ゴール
取得したい製品のコストデータが取得できる
準備するもの
Datadogの「API Keys」 と 「Application Keys」の情報
Datadogのコンソール画面から下記の画面でそれぞれ取得します。
Pythonの実行環境
Pythonの実行環境を準備します。
弊社の環境では下記のバージョンを利用しています。
- Python ver:3.10.13
Datadogの製品使用量APIの概要
Datadogの製品使用量APIでは、製品ファミリーと使用量(usage)という概念が導入されています。
製品ファミリーは一つまたは複数の使用量をグループ化したものです。この概念に基づき、APIの構成も「product_family」の下に「usage_type」が配置されています。
下記はサンプルのAPIの返り値です。
{
"data": [
{
"attributes": {
"product_family": "fargate",
"measurements": [
{
"usage_type": "apm_fargate_count",
"value": 5
},
{
"usage_type": "tasks_count",
"value": 10
},
]
}
}
]
}
サンプルコード
過去10日間のfargate(product_family)のデータを取得するコード(Python)です。
APIのV1は非推奨となっているためV2から取得しています。
注意:反映されるまでに最大72時間かかる場合があります
import requests
from datetime import datetime, timedelta
# APIキーとアプリケーションキーを設定
DATADOG_API_KEY = '{APIキー}' # Datadogの管理画面から確認
DATADOG_APP_KEY = '{APPキー}' # Datadogの管理画面から確認
# Datadogの使用量APIエンドポイント
URL = 'https://api.datadoghq.com/api/v2/usage/hourly_usage'
# 認証ヘッダー
headers = {
'DD-API-KEY': DATADOG_API_KEY,
'DD-APPLICATION-KEY': DATADOG_APP_KEY,
}
# パラメータの設定(例: 過去15日間のデータを取得)
start_time = (datetime.utcnow() - timedelta(days=10)).strftime('%Y-%m-%dT%H:%M:%SZ')
end_time = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
params = {
'filter[timestamp][start]': start_time,
'filter[timestamp][end]': end_time,
'filter[product_families]': 'fargate', # ここに任意のproduct_familyを入れる
}
# APIリクエストを実行
response = requests.get(URL, headers=headers, params=params)
# 応答のステータスコードとデータを確認
if response.status_code == 200:
# 応答からデータを取得
data = response.json()
print(data)
else:
print(f'Error fetching data: {response.status_code}')
上記スクリプトの返り値のサンプルです。
{
"data": [
{
"id": "",
"type": "usage_timeseries",
"attributes": {
"product_family": "fargate",
"org_name": "",
"public_id": "",
"account_name": "",
"account_public_id": "",
"region": "us",
"timestamp": "2024-09-30T13:00:00+00:00",
"measurements": [
{
"usage_type": "apm_fargate_count",
"value": 2
},
{
"usage_type": "appsec_fargate_avg_task_count",
"value": 4
},
{
"usage_type": "avg_profiled_fargate_tasks",
"value": 5
},
{
"usage_type": "tasks_count",
"value": 15
}
]
}
}
]
}
各product_familyで取得可能な項目は以下の通りです(一部抜粋)
参考
・使用量のメータリング
・Hourly Usage APIのV1からV2への移行
・Indexed LogsとRUMのHourly UsageおよびSummary Usage APIでの移行
infra_hosts (EC2などのサーバー用)
usage_type |
用途 |
---|---|
agent_host_count |
Datadogエージェントで監視されているホストの数 |
apm_azure_app_service_host_count |
APMで監視されているAzure App Serviceのホスト数 |
apm_host_count |
APMで監視されているホストの数 |
aws_host_count |
AWSで監視されているホストの数 |
azure_host_count |
Azureで監視されているホストの数 |
container_count |
監視されているコンテナの数 |
gcp_host_count |
Google Cloud Platformで監視されているホストの数 |
heroku_host_count |
Herokuで監視されているホストの数 |
host_count |
監視されているホストの総数 |
infra_azure_app_service |
インフラ監視でのAzure App Serviceの数 |
opentelemetry_host_count |
OpenTelemetryで監視されているホストの数 |
fargate
usage_type |
用途 |
---|---|
apm_fargate_count |
APMがtrueになっているFargateタスクの数 |
appsec_fargate_avg_task_count |
アプリケーションセキュリティモニタリング(AppSec)機能で監視されている Fargate タスクの平均数 |
avg_profiled_fargate_tasks |
プロファイリングされたFargateタスクの平均数 |
tasks_count |
Fargateタスクの数 |
analyzed_logs
usage_type |
用途 |
---|---|
analyzed_logs |
セキュリティ解析のために分析されたログの数 |
indexed_logs
usage_type |
用途 |
---|---|
logs_indexed_events_3_day_count |
3日間の保持期間でインデックスされたログイベントの数 |
logs_live_indexed_events_3_day_count |
3日間のライブインデックスされたログイベントの数 |
logs_rehydrated_indexed_events_3_day_count |
3日間の再ハイドレートされたログイベントの数 |
他、保持期間別に同様のusage_type が存在します |
indexed_spans
usage_type |
用途 |
---|---|
indexed_events_count |
インデックスされたスパンのイベント数 |
serverless
usage_type |
用途 |
---|---|
func_count |
監視されているサーバーレス関数の数 |
invocations_sum |
サーバーレス関数の総呼び出し回数 |
synthetics_api
usage_type |
用途 |
---|---|
check_calls_count |
Synthetics APIテストの実行回数 |
ingested_spans
usage_type |
用途 |
---|---|
ingested_events_bytes |
インジェストされたスパンデータの総バイト数 |
rum
usage_type |
用途 |
---|---|
rum_replay_session_count |
RUMリプレイセッションの数 |
rum_lite_session_count |
RUM Liteセッションの数 |
rum_total_session_count |
RUMセッションの総数 |
rum_mobile_legacy_session_count_android |
モバイル(Android)のレガシーRUMセッションの数 |
rum_mobile_lite_session_count_ios |
モバイル(iOS)のレガシーRUMセッションの数 |
timeseries (カスタムしたメトリクスのコスト)
usage_type |
用途 |
---|---|
num_custom_timeseries |
カスタムタイムシリーズの総数 |
応用例
弊社ではusage_type
のデータを利用し、当月のコスト予測を独自計算で算出し、月の予算を作成しています。
本ブログでは簡単な紹介のみで詳細は割愛しますが、別の記事で紹介できればと思います。
簡単な紹介
毎月スケジュール起動でLambdaが実行され、取得したデータをRDSに保存します。そのデータをMetabase(BIツール)から参照・コスト予測(計算)し、結果をMetabaseのダッシュボードに表示します。
[構成]
[コスト算出ダッシュボード]
まとめ
今回Datadogの製品使用量APIを使ったデータ取得方法の記事を書いたのは、便利なAPIですが活用事例の記事が少なく、少しでも利用を検討している方の助けになればと思ったからです。
弊社でも実際使ってみて、コスト予測の計算をより効率的にすることができました。
ここまで記事を読んでいただきありがとうございます。
最後に、一言だけ弊社の紹介をさせてください。
弊社は「歳を重ねることが 楽しみになる 社会の創造」を目指しているスタートアップです。
それを実現するために様々なサービスをリリース中です。
Discussion