View a markdown version of this page

Mengirim log ke Amazon CloudWatch - Amazon CloudWatch

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

Mengirim log ke Amazon CloudWatch

OTel Container Insights mengumpulkan dan mengirimkan log kontainer ke Amazon CloudWatch Logs dengan menggunakan pipeline log OpenTelemetry Collector. Add-on Amazon CloudWatch Observability EKS menggunakan OpenTelemetry Collector sebagai DaemonSet penerima filelog untuk mengekor file log kontainer, memperkayanya dengan metadata Kubernetes, dan mengekspornya ke Log melalui eksportir Log. CloudWatch CloudWatch

Tidak diperlukan pengaturan tambahan untuk pengumpulan log dasar. Koleksi log diaktifkan secara default saat Anda mengikutiMulai cepat: OTel Container Insights di Amazon EKS.

Prasyarat

Sebelum Anda mengonfigurasi pengumpulan log, verifikasi bahwa Anda memenuhi persyaratan berikut.

  • OTel Container Insights diinstal dan amazon-cloudwatch-observability add-on aktif di cluster Anda

  • Izin IAM:logs:CreateLogGroup,,logs:CreateLogStream, logs:PutLogEventslogs:DescribeLogGroups, dan logs:DescribeLogStreams (termasuk dalam kebijakan CloudWatchAgentServerPolicy terkelola)

  • Akses node: kolektor membutuhkan akses ke /var/log/pods pada setiap node

Grup log dan sumber

Tabel berikut menjelaskan grup log yang dibuat oleh OTel Container Insights dan sumber yang dikumpulkannya.

Grup log Sumber Daftar Isi
/aws/containerinsights/cluster-name/application /var/log/pods/**/*.log Semua log stdout dan stderr kontainer
catatan

Log host dan dataplane akan tersedia di rilis mendatang.

Cara kerja pipa log OTel

OpenTelemetry Kolektor add-on menjalankan pipeline log dengan komponen-komponen berikut.

  • Penerima - filelog Penerima mengekor file log kontainer dari/var/log/pods/.

  • Prosesork8sattributes Prosesor memperkaya log dengan metadata Kubernetes. batchProsesor mengumpulkan catatan log sebelum diekspor. resourceProsesor menambahkan atribut sumber daya.

  • Eksportirawscloudwatchlogs Eksportir mengirimkan catatan log ke CloudWatch Log.

Pengayaan log

Pipeline memperkaya setiap catatan log dengan atribut berikut.

  • Atribut sumber daya Kubernetesk8s.pod.name,,,k8s.namespace.name, dan k8s.container.name k8s.node.name k8s.deployment.name

  • Label pod — Semua label pod sebagai k8s.pod.label.* atribut

  • Atribut awancloud.region,cloud.account.id, dan cloud.platform

  • Atribut clusterk8s.cluster.name

Menyesuaikan koleksi log

Anda dapat menyesuaikan koleksi log dengan memperbarui nilai konfigurasi add-on. Bagian berikut menjelaskan opsi penyesuaian umum.

Nonaktifkan koleksi log

Untuk menonaktifkan pengumpulan log sepenuhnya, perbarui konfigurasi add-on dengan log kontainer dinonaktifkan.

Untuk menonaktifkan pengumpulan log
  • Jalankan perintah berikut. Ganti cluster-name dengan nama cluster Amazon EKS Anda.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":false}}' \ --resolve-conflicts OVERWRITE

Kecualikan ruang nama dari koleksi log

Untuk mengecualikan ruang nama tertentu dari koleksi log, gunakan opsi excludeNamespaces konfigurasi.

Untuk mengecualikan ruang nama dari koleksi log
  • Jalankan perintah berikut. Ganti cluster-name dengan nama cluster Amazon EKS Anda. Ganti nilai namespace dengan namespace yang ingin Anda kecualikan.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"excludeNamespaces":["kube-system","load-testing","monitoring"]}}' \ --resolve-conflicts OVERWRITE

Sertakan hanya ruang nama tertentu

Untuk mengumpulkan log hanya dari ruang nama tertentu, gunakan opsi includeNamespaces konfigurasi.

Untuk menyertakan hanya ruang nama tertentu
  • Jalankan perintah berikut. Ganti cluster-name dengan nama cluster Amazon EKS Anda. Ganti nilai namespace dengan namespace yang ingin Anda sertakan.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"includeNamespaces":["production","staging"]}}' \ --resolve-conflicts OVERWRITE

Konfigurasikan penguraian log multi-baris

Untuk menggabungkan entri log multi-baris (seperti jejak tumpukan) ke dalam catatan log tunggal, konfigurasikan penguraian multi-baris dengan pola baris pertama.

Untuk mengonfigurasi penguraian log multi-baris
  • Jalankan perintah berikut. Ganti cluster-name dengan nama cluster Amazon EKS Anda. Ganti firstLinePattern nilai dengan pola regex yang cocok dengan baris pertama dari setiap entri log.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"multilineConfig":{"firstLinePattern":"^\\d{4}-\\d{2}-\\d{2}|^\\[\\d{4}","parseFormat":"auto"}}}' \ --resolve-conflicts OVERWRITE

Mengatur retensi log

Secara default, CloudWatch Log menyimpan data log tanpa batas waktu. Untuk mengontrol biaya penyimpanan, Anda dapat menetapkan kebijakan retensi pada grup log.

Untuk mengatur retensi log
  • Jalankan perintah berikut. Ganti cluster-name dengan nama cluster Amazon EKS Anda. Ganti 30 dengan jumlah hari untuk menyimpan log.

    aws logs put-retention-policy \ --log-group-name "/aws/containerinsights/cluster-name/application" \ --retention-in-days 30

Verifikasi

Untuk memverifikasi bahwa pengumpulan log berfungsi, periksa apakah grup log yang diharapkan ada dan berisi data.

Untuk memverifikasi pengumpulan log
  • Jalankan perintah berikut. Ganti cluster-name dengan nama cluster Amazon EKS Anda.

    aws logs describe-log-groups \ --log-group-name-prefix "/aws/containerinsights/cluster-name" \ --query "logGroups[].{Name:logGroupName,StoredBytes:storedBytes}" \ --output table

    Output menampilkan nama grup log dan jumlah byte yang disimpan. Nilai bukan nol untuk StoredBytes mengonfirmasi bahwa pipeline mengirimkan log.

Pemecahan masalah

Gunakan panduan berikut untuk menyelesaikan masalah pengumpulan log umum.

Grup log tidak dibuat setelah 5 menit

Gejala: Grup /aws/containerinsights/cluster-name/application log tidak muncul di CloudWatch Log setelah 5 menit.

Penyebab: Kolektor tidak memiliki izin IAM yang diperlukan untuk membuat grup log dan aliran log.

Solusi: Verifikasi bahwa peran IAM yang terkait dengan kolektor memiliki kebijakan CloudWatchAgentServerPolicy terkelola yang dilampirkan. Kebijakan ini mencakup logs:CreateLogGroup dan logs:CreateLogStream izin.

Grup log aplikasi ada tetapi kosong

Gejala: Grup log aplikasi ada di CloudWatch Log, tetapi tidak berisi aliran log atau peristiwa log.

Penyebab: Masalah ini terjadi ketika container tidak menulis ke stdout atau stderr, atau penerima filelog tidak dapat mengakses pada node. /var/log/pods/

Solusi: Selesaikan langkah-langkah berikut untuk mengatasi masalah ini.

  1. Verifikasi bahwa wadah aplikasi Anda menulis log ke stdout atau stderr.

  2. Periksa apakah DaemonSet pod kolektor memiliki dudukan volume untuk/var/log/pods.

    kubectl get daemonset -n amazon-cloudwatch -o yaml | grep -A 5 "var/log/pods"
  3. Periksa log kolektor untuk kesalahan akses file.

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=50 | grep -i "error\|permission"

Biaya CloudWatch Log Tinggi

Gejala: Biaya konsumsi atau penyimpanan CloudWatch log lebih tinggi dari yang diharapkan.

Penyebab: High-volume ruang nama (seperti pengujian beban atau ruang nama pemantauan) menghasilkan volume log yang besar.

Solusi: Selesaikan langkah-langkah berikut untuk mengurangi biaya.

  1. Kecualikan ruang nama volume tinggi dari koleksi log. Untuk petunjuk, lihat Kecualikan ruang nama dari koleksi log.

  2. Tetapkan kebijakan penyimpanan pada grup log untuk menghapus log lama secara otomatis. Untuk petunjuk, lihat Mengatur retensi log.