概要
例えば前月や当月の本日までの特定の VM におけるネットワーク転送量が知りたいケースがあるかなと思います
コンソールだと合計値が見れないのでスクリプトを作成してみました
環境
- macOS 15.0.1
- Python python 3.11.10
- gcloud 491.0.0
- google-cloud-monitoring 2.22.2
- GCP (2024/10/08 時点)
インストール
- pipenv install google-cloud-monitoring
認証
- gcloud auth application-default login
集計スクリプト
前月分集計する場合は以下のようになります
プロジェクトIDとVM名の部分は適宜変更してください
from datetime import datetime, timedelta
from google.cloud import monitoring_v3
def get_network_usage(project_id, instance_name):
now = datetime.now()
current_month_start = datetime(now.year, now.month, 1)
# 前月の開始日時を計算
last_month_end = current_month_start - timedelta(
seconds=1
) # 前月の終了日時(現在の月開始日の前日23:59:59)
last_month_start = datetime(
last_month_end.year, last_month_end.month, 1
) # 前月の開始日時
print(last_month_end)
print(last_month_start)
# UNIX タイムスタンプに変換
start_time = int(last_month_start.timestamp())
end_time = int(last_month_end.timestamp())
# クライアントの作成
client = monitoring_v3.MetricServiceClient()
# プロジェクト名の設定
project_name = f"projects/{project_id}"
# メトリックス取得期間の設定
interval = monitoring_v3.TimeInterval(
{
"end_time": {"seconds": end_time},
"start_time": {"seconds": start_time},
}
)
# 取得するメトリクス情報の設定
filter_str = (
f'metric.type="compute.googleapis.com/instance/network/received_bytes_count" '
# f'metric.type="compute.googleapis.com/instance/network/sent_bytes_count" ' # 送信量に関してはこちら
f'AND metric.label.instance_name="{instance_name}"'
)
# メトリクスデータを取得
results = client.list_time_series(
name=project_name,
filter=filter_str,
interval=interval,
view=monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.FULL,
)
# 合計値を計算
total_received_bytes = sum(
[point.value.int64_value for ts in results for point in ts.points]
)
print(f"Total received bytes: {total_received_bytes / 1024 / 1024} MB")
# 例: プロジェクト ID とインスタンス ID を使って前月分のネットワーク受信量を計算
get_network_usage("project-123456", "web")
当日までの今月分の転送量
当日分までの転送量の場合は以下です
日付の計算部分だけ変更しています
from datetime import datetime
from google.cloud import monitoring_v3
def get_network_usage(project_id, instance_name):
# 現在の UTC 日付と時刻を取得
now = datetime.now()
# 今月の開始日時を設定
current_month_start = datetime(now.year, now.month, 1)
# UNIX タイムスタンプに変換
start_time = int(current_month_start.timestamp())
end_time = int(now.timestamp())
# クライアントの作成
client = monitoring_v3.MetricServiceClient()
# プロジェクト名の設定
project_name = f"projects/{project_id}"
# メトリックス取得期間の設定
interval = monitoring_v3.TimeInterval(
{
"end_time": {"seconds": end_time},
"start_time": {"seconds": start_time},
}
)
# 取得するメトリクス情報の設定
filter_str = (
f'metric.type="compute.googleapis.com/instance/network/received_bytes_count" '
# f'metric.type="compute.googleapis.com/instance/network/sent_bytes_count" ' # 送信量に関してはこちら
f'AND metric.label.instance_name="{instance_name}"'
)
# メトリクスデータを取得
results = client.list_time_series(
name=project_name,
filter=filter_str,
interval=interval,
view=monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.FULL,
)
# 合計値を計算
total_received_bytes = sum(
[point.value.int64_value for ts in results for point in ts.points]
)
print(f"Total received bytes: {total_received_bytes / 1024 / 1024} MB")
# 例: プロジェクト ID とインスタンス ID を使って前月分のネットワーク受信量を計算
get_network_usage("project-123456", "web")
最後に
GCP のインスタンスが一ヶ月でどれくらいネットワーク通信をしているのか確認するのに使えると思います
具体的な取得方法は GCP 側でブラックボックスになっているのでどこにどれくらい通信したのかはわかりませんがおおよその目安として使用量がわかるかなと思います
何もしていなくても数GBの通信はしていることが確認できました
0 件のコメント:
コメントを投稿