Banyak organisasi menggunakan alat monitoring pihak ketiga untuk mengambil data metrik dari Amazon CloudWatch guna ditampilkan dalam dashboard dan sistem notifikasi mereka. Hal ini sering menyebabkan penggunaan API GetMetricData yang sangat tinggi dan menghasilkan biaya CloudWatch yang besar.
Tantangan yang sering dihadapi oleh tim optimasi biaya adalah mengetahui siapa atau apa yang menyebabkan biaya tinggi tersebut, terutama jika bukan bagian dari alur kerja operasional utama.
โ Masalah Sebelumnya
Dulu, tidak ada data langsung yang tersedia untuk pelanggan guna mengidentifikasi klien yang melakukan panggilan GetMetricData secara berlebihan. Biasanya, pelanggan harus menghubungi AWS Support untuk mendapatkan detail seperti IAM Role atau IP Address yang digunakan.
โ Solusi Baru
Kini, dengan diperkenalkannya CloudTrail data events untuk GetMetricData, pelanggan bisa melacak sendiri siapa yang melakukan panggilan API tersebut melalui CloudTrail trail atau CloudTrail Lake. Hal ini memungkinkan analisis lebih cepat dan tindakan yang lebih tepat.
๐ Tujuan Panduan Ini
- Mengaktifkan CloudWatch data events di CloudTrail
- Menggunakan metrik penggunaan API AWS untuk menemukan lonjakan aktivitas
- Menganalisis log GetMetricData menggunakan Athena dan CloudWatch Log Insights
- Menerapkan praktik terbaik untuk menghindari biaya berlebih
๐ Syarat Awal
Pastikan Anda sudah memiliki CloudTrail trail aktif di region yang ingin dianalisis. Anda bisa menambahkan data event CloudWatch secara sementara untuk investigasi. Setelah selesai, trail bisa dihapus agar tidak menimbulkan biaya tambahan.
๐ ๏ธ Langkah-Langkah Solusi
1. Aktifkan CloudWatch Data Events di CloudTrail
Catatan: Fitur ini tidak aktif secara default dan bisa menimbulkan biaya tambahan.
Langkah-langkah:
- Buka AWS Console โ CloudTrail โ Trails
- Pilih trail yang ingin digunakan โ klik Edit di bagian Data events
- Centang Data events, lalu pilih Switch to advanced event selectors
- Pada Resource type, pilih CloudWatch metric
- Klik Save Changes
Setelah itu, tunggu beberapa menit sampai aktivitas API mulai dicatat.
2. Identifikasi Waktu Aktivitas Tinggi
Gunakan namespace AWS/Usage di CloudWatch untuk melihat metrik seperti:
- CallCount: jumlah panggilan sukses
- ErrorCount: jumlah gagal
- ThrottleCount: jumlah yang dibatasi
Untuk melihat grafik penggunaan GetMetricData selama 30 hari terakhir:
- Buka CloudWatch Console
- Pilih Metrics โ All Metrics
- Cari GetMetricData
- Pilih Usage by AWS Resource โ CallCount
- Ubah statistik ke SUM, periode ke 1 hari
- Pilih rentang waktu (custom / last 4 weeks)
Dari grafik, Anda bisa melihat kapan lonjakan terjadi, misalnya tanggal 5 Februari.
3. (Opsional) Buat Tabel Athena
Jika ingin menggunakan Amazon Athena untuk menganalisis log CloudTrail, Anda perlu membuat tabel terlebih dahulu. Namun jika menggunakan CloudWatch Log Insights, Anda bisa langsung query tanpa membuat tabel.
4. Analisis Data Menggunakan Athena / Log Insights
Berikut beberapa contoh query untuk menganalisis sumber API GetMetricData:
a. Berdasarkan IAM Role atau User
Athena:
SELECT
userIdentity.arn AS IAM,
count(*) AS CallCount
FROM "default"."cloudtrail_logs_ops"
WHERE eventname = 'GetMetricData'
AND eventtime BETWEEN '2025-02-05T00:00:00Z' AND '2025-02-06T00:00:00Z'
GROUP BY userIdentity.arn
ORDER BY CallCount DESC;
Log Insights:
SELECT `userIdentity.arn` AS IAM_Role_User, count(*) AS CallCount
FROM `cloudtrail_logs_ops`
WHERE eventName = 'GetMetricData'
GROUP BY `userIdentity.arn`
ORDER BY CallCount DESC;
b. Berdasarkan UserAgent dan IP Address
Athena:
SELECT
useragent,
sourceipaddress AS ClientIP,
count(*) AS CallCount
FROM "default"."cloudtrail_logs_ops"
WHERE eventname = 'GetMetricData'
AND eventtime BETWEEN '2025-02-05T00:00:00Z' AND '2025-02-06T00:00:00Z'
GROUP BY useragent, sourceipaddress
ORDER BY CallCount DESC;
Log Insights:
SELECT `userAgent`, `sourceIPAddress` AS ClientIP, count(*) AS CallCount
FROM `cloudtrail_logs_ops`
WHERE eventName = 'GetMetricData'
GROUP BY `userAgent`, `sourceIPAddress`
ORDER BY CallCount DESC;
c. Berdasarkan AWS Account ID
Athena:
SELECT
userIdentity.accountId,
count(*) AS CallCount
FROM "default"."cloudtrail_logs_ops"
WHERE eventname = 'GetMetricData'
AND eventtime BETWEEN '2025-02-05T00:00:00Z' AND '2025-02-06T00:00:00Z'
GROUP BY userIdentity.accountId
ORDER BY CallCount DESC;
Log Insights:
SELECT `userIdentity.accountId` AS Account_ID, count(*) AS CallCount
FROM `cloudtrail_logs_ops`
WHERE eventName = 'GetMetricData'
GROUP BY `userIdentity.accountId`
ORDER BY CallCount DESC;
๐ก Tips untuk Mengurangi Biaya GetMetricData
Mengacu pada harga CloudWatch, GetMetricData dikenakan biaya berdasarkan jumlah metrik yang diambil ($0.01 per 1000 metrik). Untuk menekan biaya:
- Ambil hanya metrik yang benar-benar dibutuhkan untuk dashboard atau alert
- Batasi region tempat pengambilan data jika tidak ada aktivitas
- Cabut izin IAM yang tidak perlu menggunakan GetMetricData
- Kurangi frekuensi pengambilan data
- Pertimbangkan migrasi ke CloudWatch Metric Streams, yang lebih murah dan push data ke alat pemantauan pihak ketiga secara real-time
๐งน Pembersihan Setelah Analisis
Hapus CloudWatch Data Events
- Buka CloudTrail Console โ Trails โ pilih trail Anda
- Klik Edit di bagian Data events โ klik Remove โ Save Changes
Hapus Trail atau Tabel Athena jika tidak diperlukan
DROP TABLE IF EXISTS "default"."cloudtrail_logs_ops";
๐ฏ Kesimpulan
Dalam panduan ini, Anda telah mempelajari cara:
- Melacak penggunaan API GetMetricData
- Mengidentifikasi siapa (IAM, IP, akun) yang menyebabkannya
- Menerapkan praktik terbaik untuk mengurangi biaya CloudWatch
Dengan CloudTrail dan Athena, kini Anda bisa menghemat biaya CloudWatch secara proaktif dan mengoptimalkan penggunaan API dengan cepat dan efisien.
Infrastruktur IT yang kuat adalah kunci produktivitas perusahaan. Dengan awscloud indonesia, Anda bisa mendapatkan solusi IT lengkap yang sesuai dengan kebutuhan Anda. iLogo Indonesia sebagai mitra terpercaya siap mengintegrasikan semuanya agar bisnis Anda tetap berjalan lancar dan aman.
Hubungi kami sekarang atau kunjungi awscloud.ilogoindonesia.id untuk informasi lebih lanjut!
