Skip to main content

Centralized Logging (EC2 Application Logs ke CloudWatch Logs)

📌 Summary

Agar aplikasi kamu (misal: file log nginx, php, atau dotnet app) otomatis dikirim ke CloudWatch Logs, kamu perlu:

  • Install agent CloudWatch Logs Agent atau lebih modern CloudWatch Unified Agent di EC2.

  • Konfigurasi agent-nya untuk push file log ke CloudWatch Logs.

📌 Syarat Agar Bisa Mengirim ke CloudWatch:

  • EC2 harus memiliki IAM Role dengan policy: CloudWatchAgentServerPolicy

  • Jika belum ada, kamu bisa:

    • Buat IAM Role

    • Attach role ke EC2

    • Tambahkan policy berikut:

      {
        "Effect": "Allow",
        "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
        ],
        "Resource": "*"
      }
      

Question:
Apakah EC2 defaultnya belum memiliki IAM Role CloudWatchAgentServerPolicy sehingga perlu ditambahkan lagi?

Answer: 
Benar, secara default EC2 instance tidak memiliki IAM Role apa pun saat dibuat — termasuk CloudWatchAgentServerPolicy. Jadi:

🔸 Kalau kamu belum secara eksplisit membuat dan meng-attach IAM Role ke EC2, maka:

🚫 EC2 tidak bisa mengirim log ke CloudWatch
🚫 EC2 tidak bisa menjalankan CloudWatch Agent dengan sukses


✅ Solusinya

Kamu perlu:

  1. Membuat IAM Role dengan policy CloudWatchAgentServerPolicy

  2. Attach role tersebut ke EC2 instance kamu

----------------------------------------------------------------------------------------------------------------------------------------------------

🔧 Langkah 1: Buat IAM Role dengan Policy

  1. Masuk ke AWS Console

  2. Buka layanan IAM

  3. Di sidebar kiri, pilih Roles

  4. Klik [Create role]

  5. Di bagian Trusted entity type, pilih: AWS service

  6. Di Use case, pilih: EC2 → Klik Next

  7. Di bagian Permissions, cari dan pilih:

    • ✅ CloudWatchAgentServerPolicy

  8. Klik Next lagi

  9. Beri nama, misalnya: EC2CloudWatchAgentRole

  10. Klik Create role


🔧 Langkah 2: Attach IAM Role ke EC2 Instance

  1. Masuk ke EC2 Console

  2. Pilih instance kamu

  3. Klik tab Actions → pilih:

    • Security → Modify IAM role

  4. Di dropdown IAM Role, pilih:

    • EC2CloudWatchAgentRole (atau nama role yang kamu buat)

  5. Klik Update IAM Role


✅ Hasil

Setelah langkah di atas selesai:

  • Instance kamu sekarang bisa mengakses AWS CloudWatch.

  • Script CloudWatch Agent akan bisa membuat log group, log stream, dan push log dengan sukses.

=======================================================================================

🔧 Install CloudWatch Agent

Setelah syarat agar EC2 bisa mengirimkan data ke cloudwatch terpenuh mari kita lanjut install AWS Agent di EC2 nya

install-cloudwatch-agent.sh yang:

  • Menginstal CloudWatch Agent

  • Mengatur log dari:

    • /var/log/syslog

    • Semua file di /var/log/nginx/*.log

#!/bin/bash

# Update & install CloudWatch Agent
sudo apt update -y
sudo apt install -y amazon-cloudwatch-agent

# Buat direktori config jika belum ada
sudo mkdir -p /opt/aws/amazon-cloudwatch-agent/etc

# Buat file konfigurasi CloudWatch Agent
cat <<EOF | sudo tee /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/syslog",
            "log_group_name": "ec2-syslog",
            "log_stream_name": "{instance_id}-syslog",
            "timestamp_format": "%b %d %H:%M:%S"
          },
          {
            "file_path": "/var/log/nginx/access.log",
            "log_group_name": "ec2-nginx-access",
            "log_stream_name": "{instance_id}-nginx-access",
            "timestamp_format": "%Y-%m-%d %H:%M:%S"
          },
          {
            "file_path": "/var/log/nginx/error.log",
            "log_group_name": "ec2-nginx-error",
            "log_stream_name": "{instance_id}-nginx-error",
            "timestamp_format": "%Y/%m/%d %H:%M:%S"
          }
        ]
      }
    },
    "log_stream_name": "default"
  }
}
EOF

# Jalankan CloudWatch Agent dengan config
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
  -a fetch-config \
  -m ec2 \
  -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json \
  -s

echo "✅ CloudWatch Agent configured and started."

Penjelasan Tambahan:

  • log_group_name: Bisa kamu ubah sesuai kebutuhan project kamu.

  • timestamp_format: Disesuaikan dengan format waktu pada masing-masing log file. Bisa diubah jika ternyata formatnya berbeda.