Terapkan menggunakan AWS Cloud Development Kit (AWS CDK) - Amazon CloudWatch

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Terapkan menggunakan AWS Cloud Development Kit (AWS CDK)

Langkah 1: Mengaktifkan Sinyal Aplikasi di akun Anda

Jika Anda belum mengaktifkan Sinyal Aplikasi di akun ini, Anda harus memberikan izin yang diperlukan Sinyal Aplikasi untuk menemukan layanan Anda. Untuk melakukan hal itu, lakukan hal berikut. Anda perlu melakukan ini sekali untuk akun Anda.

Untuk mengaktifkan Sinyal Aplikasi untuk aplikasi-aplikasi Anda
  1. Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/.

  2. Pada panel navigasi, silakan pilih Layanan.

  3. Pilih Mulai menemukan Layanan Anda.

  4. Pilih kotak centang kemudian pilih Mulai menemukan Layanan.

    Menyelesaikan langkah ini untuk pertama kalinya di akun Anda akan membuat peran AWSServiceRoleForCloudWatchApplicationSignalsterkait layanan. Peran ini akan memberi Sinyal Aplikasi izin-izin berikut:

    • xray:GetServiceGraph

    • logs:StartQuery

    • logs:GetQueryResults

    • cloudwatch:GetMetricData

    • cloudwatch:ListMetrics

    • tag:GetResources

    Untuk informasi selengkapnya tentang peran ini, silakan lihat Izin peran terkait layanan untuk Sinyal Aplikasi CloudWatch .

Langkah 2: Buat IAM peran

Anda harus membuat IAM peran. Jika Anda sudah membuat peran ini, Anda mungkin perlu menambahkan izin untuk itu.

  • ECSperan tugas- Kontainer menggunakan peran ini untuk menjalankan. Izin harus apa pun yang dibutuhkan aplikasi Anda, plus CloudWatchAgentServerPolicy.

Untuk informasi selengkapnya tentang membuat IAM peran, lihat Membuat IAM Peran.

Langkah 3: Instrumentasikan aplikasi Anda dengan CloudWatch agen di AWS CDK

Untuk mengaktifkan Sinyal Aplikasi untuk Amazon ECS menggunakan AWS CDK, ikuti langkah-langkah yang diuraikan di bawah ini. Cuplikan kode dalam dokumen ini disediakan di. TypeScript Untuk alternatif khusus bahasa lainnya, lihat Bahasa pemrograman yang didukung untuk agen cloudwatch AWS CDK

catatan

Dokumen ini memberikan ikhtisar proses penyiapan Sinyal Aplikasi menggunakan AWS CDK, lihat Langkah 4: Instrumentasikan aplikasi Anda dengan CloudWatch agen instruksi penyiapan khusus bahasa yang menentukan nilai untuk MOUNT_VOLUME >, >, MOUNT_CONTAINER_PATH INIT_CONTAINER_COMMAND >, dan ENVIRONMENT_VARIABLES

Untuk instrumen aplikasi Anda dengan CloudWatch agen
  1. Dalam definisi tugas aplikasi Anda, tentukan bind mount. Ganti MOUNT_VOLUME sesuai dengan bahasa yang digunakan aplikasi Anda. Misalnya digunakan opentelemetry-auto-instrumentation di Jawa. Volume akan digunakan untuk berbagi file di seluruh kontainer pada langkah-langkah selanjutnya. Anda akan menggunakan bind mount ini nanti dalam prosedur ini:

    const taskDefinition = new ecs.FargateTaskDefinition(this, 'MyTaskDefinition', { ... volumes: [{ name: MOUNT_VOLUME, }] );
  2. Selanjutnya, Anda menambahkan CloudWatch agen. Ada dua metode yang mungkin untuk menggunakan CloudWatch agen tambahan: strategi sespan dan strategi daemon. Untuk informasi tentang pro dan kontra untuk setiap metode, lihat Gunakan pengaturan khusus untuk mengaktifkan Sinyal Aplikasi di Amazon ECS dan pilih metode terbaik untuk lingkungan Anda.

    • Strategi Sidecar - Tambahkan wadah baru yang dipanggil ecs-cwagent ke definisi tugas aplikasi Anda. Ganti $IMAGE dengan jalur ke gambar CloudWatch kontainer terbaru di Amazon Elastic Container Registry. Untuk informasi selengkapnya, lihat cloudwatch-agent di Amazon. ECR

      const cwAgentContainer = taskDefinition.addContainer('ecs-cwagent', { image: ecs.ContainerImage.fromRegistry("$IMAGE"), environment: { CW_CONFIG_CONTENT: '{"agent": {"debug": true}, "traces": {"traces_collected": {"application_signals": {"enabled": true}}}, "logs": {"metrics_collected": {"application_signals": {"enabled": true}}}}', }, logging: new ecs.AwsLogDriver({ streamPrefix: 'ecs', logGroup: new logs.LogGroup(this, 'CwAgentLogGroup', { logGroupName: '/ecs/ecs-cwagent', }), }), });
    • Strategi Daemon — Buat layanan baru yang disebut ecs-cwagent di tumpukan Anda. Ganti $TASK_ROLE_ARN and $EXECUTION_ROLE_ARN dengan IAM peran yang Anda persiapkanLangkah 2: Buat IAM peran. Ganti $IMAGE dengan jalur ke gambar CloudWatch kontainer terbaru di Amazon Elastic Container Registry. Untuk informasi selengkapnya, lihat cloudwatch-agent di Amazon. ECR

      catatan

      Layanan daemon mengekspos dua port pada host, dengan 4316 digunakan sebagai titik akhir untuk menerima metrik dan jejak dan 2000 sebagai titik akhir trace sampler. CloudWatch Pengaturan ini memungkinkan agen untuk mengumpulkan dan mengirimkan data telemetri dari semua tugas aplikasi yang berjalan di host. Pastikan port ini tidak digunakan oleh layanan lain di host untuk menghindari konflik.

      const cwAgentTaskDefinition = new ecs.Ec2TaskDefinition(this, 'CwAgentDaemonTaskDef', { taskRole: "$TASK_ROLE_ARN", executionRole: "$EXECUTION_ROLE_ARN", }); // Add the CloudWatch agent container const cwAgentContainer = cwAgentTaskDefinition.addContainer('ecs-cwagent', { image: ecs.ContainerImage.fromRegistry("$IMAGE"), cpu: 128, memoryLimitMiB: 64, portMappings: [ { containerPort: 4316, hostPort: 4316, }, { containerPort: 2000, hostPort: 2000, }, ], logging: new ecs.AwsLogDriver({ streamPrefix: 'ecs', logGroup: new logs.LogGroup(this, 'CwAgentLogGroup', { logGroupName: '/ecs/ecs-cwagent-daemon', }), }), environment: { CW_CONFIG_CONTENT: '{"agent": {"debug": true}, "traces": {"traces_collected": {"application_signals": {"enabled": true}}}, "logs": {"metrics_collected": {"application_signals": {"enabled": true}}}}', }, }); // Add the CloudWatch agent service running as a daemon const cwAgentService = new ecs.Ec2Service(this, 'CwAgentDaemonService', { cluster, taskDefinition: cwAgentTaskDefinition, daemon: true, });
  3. Tambahkan init container baru ke definisi tugas aplikasi Anda. Ganti $IMAGE dengan gambar terbaru dari repositori ECR gambar AWS Distro untuk OpenTelemetry Amazon. Ganti MOUNT_CONTAINER_PATH and INIT_CONTAINER_COMMAND sesuai dengan bahasa yang digunakan aplikasi Anda.

    Misalnya, dalam penggunaan Java INIT_CONTAINER_COMMAND=["cp", "/javaagent.jar", "/otel-auto-instrumentation/javaagent.jar"], MOUNT_CONTAINER_PATH='/otel-auto-instrumentation'

    const initContainer = taskDefinition.addContainer('init', { image: ecs.ContainerImage.fromRegistry("$IMAGE"), essential: false, command: INIT_CONTAINER_COMMAND }); initContainer.addMountPoints({ sourceVolume: MOUNT_VOLUME, containerPath: MOUNT_CONTAINER_PATH, readOnly: false });
  4. Tambahkan variabel lingkungan ENVIRONMENT_VARIABLES ke wadah aplikasi Anda sesuai dengan bahasa yang digunakan aplikasi Anda. Dan pasang volumenya MOUNT_VOLUME dalam wadah aplikasi.

    catatan

    Untuk instruksi penyiapan khusus bahasa yang menentukan nilai untuk MOUNT_VOLUME >, >, MOUNT_CONTAINER_PATH INIT_CONTAINER_COMMAND >, danENVIRONMENT_VARIABLES, lihat. Langkah 4: Instrumentasikan aplikasi Anda dengan CloudWatch agen

    Berikut adalah contohnya:

    const appContainer = taskDefinition.addContainer('my-app', { ... environment: { ... ENVIRONMENT_VARIABLES }, }); appContainer.addMountPoints({ sourceVolume: MOUNT_VOLUME, containerPath: MOUNT_CONTAINER_PATH, readOnly: false });

Menyiapkan aplikasi Node.js dengan format ESM modul

Kami menyediakan dukungan terbatas untuk aplikasi Node.js dengan format ESM modul. Untuk detailnya, lihat Keterbatasan yang diketahui tentang Node.js dengan ESM.

Untuk format ESM modul, mengaktifkan Sinyal Aplikasi dengan menggunakan init wadah untuk menyuntikkan instrumentasi Node.js SDK tidak berlaku. Lewati langkah 1 dan 3 dari prosedur sebelumnya, dan lakukan hal berikut sebagai gantinya.

Untuk mengaktifkan Sinyal Aplikasi untuk aplikasi Node.js dengan ESM
  1. Instal dependensi yang relevan ke aplikasi Node.js Anda untuk autoinstrumentasi:

    npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0
  2. Pada langkah 4 pada prosedur sebelumnya, lepaskan pemasangan volume:

    appContainer.addMountPoints({ sourceVolume: MOUNT_VOLUME, containerPath: MOUNT_CONTAINER_PATH, readOnly: false });

    Dan atur variabel lingkungan NODE_OPTIONS menjadi --import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs

Langkah 4: Menyebarkan tumpukan yang diperbarui

Jalankan cdk synth perintah di direktori utama aplikasi Anda. Untuk menyebarkan layanan di AWS akun Anda, jalankan cdk deploy perintah di direktori utama aplikasi Anda.

Jika Anda menggunakan strategi sespan, Anda akan melihat satu layanan dibuat:

  • APPLICATION_SERVICE adalah layanan aplikasi Anda. Ini mencakup tiga wadah berikut:

    • init— Wadah yang diperlukan untuk menginisialisasi Sinyal Aplikasi.

    • ecs-cwagent— Sebuah wadah yang menjalankan CloudWatch agen

    • my-app— Ini adalah contoh wadah aplikasi dalam dokumentasi kami. Dalam beban kerja Anda yang sebenarnya, penampung khusus ini mungkin tidak ada atau mungkin diganti dengan kontainer layanan Anda sendiri.

Jika Anda menggunakan strategi daemon, Anda akan melihat dua layanan yang dibuat:

  • CWAgentDaemonService adalah layanan CloudWatch agen daemon.

  • APPLICATION_SERVICE adalah layanan aplikasi Anda. Ini mencakup dua wadah berikut:

    • init— Wadah yang diperlukan untuk menginisialisasi Sinyal Aplikasi.

    • my-app— Ini adalah contoh wadah aplikasi dalam dokumentasi kami. Dalam beban kerja Anda yang sebenarnya, penampung khusus ini mungkin tidak ada atau mungkin diganti dengan kontainer layanan Anda sendiri.