Aktifkan aplikasi Anda di Kubernetes - Amazon CloudWatch

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

Aktifkan aplikasi Anda di Kubernetes

Aktifkan CloudWatch Application Signals di Kubernetes dengan menggunakan langkah-langkah pengaturan kustom yang dijelaskan di bagian ini.

Untuk aplikasi yang berjalan di Kubernetes, Anda menginstal dan mengkonfigurasi CloudWatch agen dan AWS Distro untuk Anda sendiri. OpenTelemetry Pada arsitektur ini yang diaktifkan dengan pengaturan Sinyal Aplikasi, Sinyal Aplikasi tidak secara otomatis menemukan nama layanan Anda atau klaster atau host tempat berjalannya. Anda harus menentukan nama-nama ini selama melakukan pengaturan kustom, dan nama yang Anda tentukan adalah apa yang akan ditampilkan pada dasbor Sinyal Aplikasi.

Persyaratan

Langkah 1: Mengaktifkan Sinyal Aplikasi di akun Anda

Anda harus terlebih dahulu mengaktifkan Sinyal Aplikasi di akun Anda. Jika belum, lihatAktifkan Sinyal Aplikasi di akun Anda.

Langkah 2: Instal operator CloudWatch agen di cluster Anda

Memasang operator CloudWatch agen akan menginstal operator, CloudWatch agen, dan instrumentasi otomatis lainnya ke dalam klaster Anda. Untuk melakukan hal itu, masukkan perintah berikut. Ganti $REGION dengan AWS wilayah Anda. Ganti $YOUR_CLUSTER_NAME dengan nama yang ingin Anda tampilkan untuk cluster Anda di dasbor Sinyal Aplikasi.

helm repo add aws-observability https://aws-observability.github.io/helm-charts helm install amazon-cloudwatch-operator aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch --create-namespace \ --set region=$REGION \ --set clusterName=$YOUR_CLUSTER_NAME

Untuk informasi lebih lanjut, lihat amazon-cloudwatch-observabilitydi GitHub.

Langkah 3: Siapkan AWS kredensyal untuk klaster Kubernetes Anda

penting

Jika klaster Kubernetes Anda di-host di Amazon EC2, Anda dapat melewati bagian ini dan melanjutkan ke. Langkah 4: Tambahkan anotasi

Jika klaster Kubernetes Anda di-host secara lokal, Anda harus menggunakan instruksi di bagian ini untuk menambahkan AWS kredensil ke lingkungan Kubernetes Anda.

Untuk menyiapkan izin untuk klaster Kubernetes lokal
  1. Buat pengguna IAM yang akan digunakan untuk memberikan izin ke host lokal Anda:

    1. Buka konsol IAM di https://console.aws.amazon.com/iam/.

    2. Pilih Pengguna, Buat Pengguna.

    3. Dalam detail Pengguna, untuk Nama pengguna, masukkan nama untuk pengguna IAM baru. Ini adalah nama masuk untuk AWS yang akan digunakan untuk mengautentikasi host Anda. Lalu pilih Selanjutnya

    4. Pada halaman Setel izin, di bawah opsi Izin, pilih Lampirkan kebijakan secara langsung.

    5. Dari daftar Kebijakan izin, pilih CloudWatchAgentServerPolicykebijakan yang akan ditambahkan ke pengguna Anda. Lalu pilih Selanjutnya.

    6. Pada halaman Tinjau dan buat, pastikan bahwa Anda puas dengan nama pengguna dan CloudWatchAgentServerPolicykebijakan tersebut ada di ringkasan Izin.

    7. Pilih Buat pengguna

  2. Buat dan ambil kunci AWS akses dan kunci rahasia Anda:

    1. Di panel navigasi di konsol IAM, pilih Pengguna dan kemudian pilih nama pengguna pengguna yang Anda buat di langkah sebelumnya.

    2. Pada halaman pengguna, pilih tab Security credentials. Kemudian, di bagian Kunci akses, pilih Buat kunci akses.

    3. Untuk Buat tombol akses Langkah 1, pilih Antarmuka Baris Perintah (CLI).

    4. Untuk Buat kunci akses Langkah 2, secara opsional masukkan tag dan kemudian pilih Berikutnya.

    5. Untuk Buat kunci akses Langkah 3, pilih Unduh file.csv untuk menyimpan file.csv dengan kunci akses pengguna IAM dan kunci akses rahasia Anda. Anda memerlukan informasi ini untuk langkah selanjutnya.

    6. Pilih Selesai.

  3. Konfigurasikan AWS kredensyal Anda di host lokal Anda dengan memasukkan perintah berikut. Ganti ACCESS_KEY_ID dan SECRET_ACCESS_ID dengan kunci akses yang baru dibuat dan kunci akses rahasia dari file.csv yang Anda unduh di langkah sebelumnya. Secara default, file kredensi disimpan di /home/user/.aws/credentials.

    $ aws configure --profile AmazonCloudWatchAgent AWS Access Key ID [None]: ACCESS_KEY_ID AWS Secret Access Key [None]: SECRET_ACCESS_ID Default region name [None]: MY_REGION Default output format [None]: json
  4. Edit sumber daya kustom yang diinstal CloudWatch agen menggunakan bagan Helm untuk menambahkan rahasia AWS kredensil yang baru dibuat.

    kubectl edit amazoncloudwatchagent cloudwatch-agent -n amazon-cloudwatch
  5. Saat editor file Anda terbuka, pasang AWS kredensil ke wadah CloudWatch agen dengan menambahkan konfigurasi berikut ke bagian atas penerapan. Ganti jalur /home/user/.aws/credentials dengan lokasi file AWS kredensyal lokal Anda.

    apiVersion: cloudwatch.aws.amazon.com/v1alpha1 kind: AmazonCloudWatchAgent metadata: name: cloudwatch-agent namespace: amazon-cloudwatch spec: volumeMounts: - mountPath: /rootfs volumeMounts: - name: aws-credentials mountPath: /root/.aws readOnly: true volumes: - hostPath: path: /home/user/.aws/credentials name: aws-credentials ---

Langkah 4: Tambahkan anotasi

catatan

Jika Anda mengaktifkan Sinyal Aplikasi untuk aplikasi Node.js dengan ESM, lewati langkah-langkah di bagian ini dan lihat Menyiapkan aplikasi Node.js dengan format modul ESM saja.

Langkah selanjutnya adalah instrumen aplikasi Anda untuk Sinyal CloudWatch Aplikasi dengan menambahkan anotasi khusus bahasa ke beban kerja atau namespace Kubernetes Anda. Anotasi ini menginstruksikan aplikasi Anda secara otomatis untuk mengirim metrik, jejak, dan log ke Sinyal Aplikasi.

Untuk menambahkan anotasi untuk Sinyal Aplikasi
  1. Anda memiliki dua pilihan untuk keterangan:

    • Beri anotasi pada instrumen otomatis Beban Kerja satu beban kerja dalam sebuah klaster.

    • Beri Keterangan Namespace secara otomatis melengkapi semua beban kerja yang di-deploy di namespace yang dipilih.

    Pilih salah satu opsi tersebut, dan ikuti langkah-langkah yang sesuai.

  2. Untuk membuat anotasi satu beban kerja, masukkan salah satu perintah berikut. Ganti $WORKLOAD_TYPE dan $WORKLOAD_NAME dengan nilai untuk beban kerja Anda.

    • Untuk beban kerja Java:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-java": "true"}}}}}'
    • Untuk beban kerja Python:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-python": "true"}}}}}'

      Untuk aplikasi Python, ada konfigurasi tambahan yang diperlukan. Untuk informasi selengkapnya, lihat Aplikasi Python tidak dimulai setelah Sinyal Aplikasi diaktifkan.

    • Untuk beban kerja.NET:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-dotnet": "true"}}}}}'
      catatan

      Untuk mengaktifkan Sinyal Aplikasi untuk beban kerja.NET pada gambar berbasis Alpine Linux (linux-musl-x64), tambahkan anotasi tambahan berikut.

      instrumentation.opentelemetry.io/otel-dotnet-auto-runtime: "linux-musl-x64"
    • Untuk beban kerja Node.js:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-nodejs": "true"}}}}}'
  3. Untuk membuat anotasi semua beban kerja di namespace, masukkan masukkan salah satu perintah berikut. Ganti $NAMESPACE dengan nama namespace Anda.

    Jika namespace menyertakan beban kerja Java, Python, dan .NET, tambahkan semua anotasi ke namespace.

    • Untuk beban kerja Java di namespace:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-java=true
    • Untuk beban kerja Python di namespace:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-python=true

      Untuk aplikasi Python, ada konfigurasi tambahan yang diperlukan. Untuk informasi selengkapnya, lihat Aplikasi Python tidak dimulai setelah Sinyal Aplikasi diaktifkan.

    • Untuk beban kerja.NET di namespace:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-dotnet=true
    • Untuk beban kerja Node.js di namespace:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-nodejs=true

    Setelah menambahkan anotasi, restart semua pod di namespace dengan memasukkan perintah berikut:

    kubectl rollout restart
  4. Ketika langkah-langkah sebelumnya selesai, di CloudWatch konsol, pilih Sinyal Aplikasi, Layanan. Ini membuka dasbor tempat Anda dapat melihat data yang dikumpulkan oleh Sinyal Aplikasi. Mungkin diperlukan waktu beberapa menit hingga akhirnya data muncul.

    Untuk informasi selengkapnya tentang tampilan Layanan, silakan lihat Memantau kondisi kesehatan operasional aplikasi Anda dengan Sinyal Aplikasi.

Menyiapkan aplikasi Node.js dengan format modul ESM

Kami menyediakan dukungan terbatas untuk aplikasi Node.js dengan format modul ESM. Lihat perinciannya di Keterbatasan yang diketahui tentang Node.js dengan ESM.

Untuk format modul ESM, mengaktifkan Sinyal Aplikasi dengan membuat anotasi file manifes tidak berfungsi. Lewati 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. Tambahkan variabel lingkungan berikut ke Dockerfile untuk aplikasi Anda dan buat gambar.

    ... ENV OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true ENV OTEL_TRACES_SAMPLER_ARG='endpoint=http://cloudwatch-agent.amazon-cloudwatch:2000' ENV OTEL_TRACES_SAMPLER='xray' ENV OTEL_EXPORTER_OTLP_PROTOCOL='http/protobuf' ENV OTEL_EXPORTER_OTLP_TRACES_ENDPOINT='http://cloudwatch-agent.amazon-cloudwatch:4316/v1/traces' ENV OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT='http://cloudwatch-agent.amazon-cloudwatch:4316/v1/metrics' ENV OTEL_METRICS_EXPORTER='none' ENV OTEL_LOGS_EXPORTER='none' ENV NODE_OPTIONS='--import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs' ENV OTEL_SERVICE_NAME='YOUR_SERVICE_NAME' #replace with a proper service name ENV OTEL_PROPAGATORS='tracecontext,baggage,b3,xray' ... # command to start the application # for example # CMD ["node", "index.mjs"]
  3. Tambahkan variabel lingkunganOTEL_RESOURCE_ATTRIBUTES_POD_NAME,OTEL_RESOURCE_ATTRIBUTES_NODE_NAME,OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME, POD_NAMESPACE dan OTEL_RESOURCE_ATTRIBUTES ke file yaml penerapan untuk aplikasi. Misalnya:

    apiVersion: apps/v1 kind: Deployment metadata: name: nodejs-app labels: app: nodejs-app spec: replicas: 2 selector: matchLabels: app: nodejs-app template: metadata: labels: app: nodejs-app # annotations: # make sure this annotation doesn't exit # instrumentation.opentelemetry.io/inject-nodejs: 'true' spec: containers: - name: nodejs-app image:your-nodejs-application-image #replace it with a proper image uri imagePullPolicy: Always ports: - containerPort: 8000 env: - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME valueFrom: fieldRef: fieldPath: metadata.labels['app'] # Assuming 'app' label is set to the deployment name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: OTEL_RESOURCE_ATTRIBUTES value: "k8s.deployment.name=$(OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME),k8s.namespace.name=$(POD_NAMESPACE),k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME)"
  4. Menerapkan aplikasi Node.js ke cluster Kubernetes.

(Opsional) Langkah 5: Pantau kesehatan aplikasi Anda

Setelah Anda mengaktifkan aplikasi Anda di Kubernetes, Anda dapat memantau kesehatan aplikasi Anda. Lihat informasi yang lebih lengkap di Memantau kondisi kesehatan operasional aplikasi Anda dengan Sinyal Aplikasi.