使ってないGCEインスタンスを洗い出す
3741 ワード
経緯
- 社内のいろんな人がGCE使ってインスタンス作りまくった結果、色々と不要そうなインスタンスが溜まってきたので、それらの洗い出しがしたかった
-
gcloud compute instance list
とかで最終起動時間とか見れるかなーと思ったが見れなかったので
「使ってない」の定義
今回はインスタンスが指定の日数の間に稼動していなかった場合、「使ってない」と判断する
稼動しているかどうかの判断
今回はStackdriverLoggingの方のログが出ているかで判断することにした。なお、管理アクティビティ監査ログは400日間は保存されるので、それ以上の日数稼動していないとかの判断はできなさそう
やってみた
#!/bin/bash
while read instance
do
id="$(jq -r ".id" <<<"$instance")"
name="$(jq -r ".name" <<<"$instance")"
filterdate=$(date -d "-14 days" "+%Y-%m-%dT15:00:00.000Z")
# log=$(gcloud logging read "resource.type=\"gce_instance\" resource.labels.instance_id=\"${id}\" jsonPayload.event_subtype=\"compute.instances.start\" timestamp>=\"${filterdate}\"" --limit=1)
log=$(gcloud logging read "resource.type=\"gce_instance\" resource.labels.instance_id=\"${id}\" timestamp>=\"${filterdate}\"" --limit=1)
if [ -z "$log" ]; then
# ログがない=稼動してない
echo $name
fi
done < <(jq -c "{ id: .id, name: .name }" <<<"$(gcloud compute instances list --format=json --filter="status!=RUNNING" | jq -r ".[]")")
懸念
- なんかもっとスマートな方法がある気がしてならない
- メンテナンスかなんかで稼動してない場合でもインスタンスのログが出力されるのだったらこの方法使えない
- 稼動していても使ってないインスタンスは洗い出せない
Author And Source
この問題について(使ってないGCEインスタンスを洗い出す), 我々は、より多くの情報をここで見つけました https://qiita.com/uu4k/items/7d77c885ac56be12d889著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .