Siapkan Fluent Bit sebagai a DaemonSet untuk mengirim log ke CloudWatch Log - Amazon CloudWatch

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

Siapkan Fluent Bit sebagai a DaemonSet untuk mengirim log ke CloudWatch Log

Bagian berikut membantu Anda menerapkan Fluent Bit untuk mengirim log dari kontainer ke CloudWatch Log.

Perbedaan-perbedaan jika Anda sudah menggunakan Fluentd

Jika Anda sudah menggunakan Fluentd untuk mengirim log dari kontainer ke CloudWatch Log, baca bagian ini untuk melihat perbedaan antara Fluentd dan Fluent Bit. Jika Anda belum menggunakan Fluentd dengan Wawasan Kontainer, maka Anda dapat melewatinya dan lihat Menyiapkan Fluent Bit.

Kami menyediakan untuk Anda dua konfigurasi bawaan untuk Fluent Bit:

  • Konfigurasi Fluent Bit dioptimalkan— Sebuah konfigurasi yang diselaraskan dengan praktik terbaik Fluent Bit.

  • Konfigurasi kompatibel dengan Fluentd— Sebuah konfigurasi yang sebisa mungkin diselaraskan dengan perilaku Fluentd.

Daftar berikut ini akan menjelaskan kepada Anda perbedaan-perbedaan antara Fluentd dan masing-masing konfigurasi Fluent Bit secara detail.

  • Perbedaan dalam nama log stream— Jika Anda menggunakan konfigurasi Fluent Bit yang dioptimalkan, maka nama log stream akan berbeda.

    Pada /aws/containerinsights/Cluster_Name/application

    • Konfigurasi Fluent Bit yang dioptimalkan akan mengirimkan log ke kubernetes-nodeName-application.var.log.containers.kubernetes-podName_kubernetes-namespace_kubernetes-container-name-kubernetes-containerID

    • Fluentd mengirimkan log ke kubernetes-podName_kubernetes-namespace_kubernetes-containerName_kubernetes-containerID

    Pada /aws/containerinsights/Cluster_Name/host

    • Konfigurasi Fluent Bit yang dioptimalkan akan mengirimkan log ke kubernetes-nodeName.host-log-file

    • Fluentd mengirimkan log ke host-log-file-Kubernetes-NodePrivateIp

    Pada /aws/containerinsights/Cluster_Name/dataplane

    • Konfigurasi Fluent Bit yang dioptimalkan akan mengirimkan log ke kubernetes-nodeName.dataplaneServiceLog

    • Fluentd mengirimkan log ke dataplaneServiceLog-Kubernetes-nodeName

  • File log kube-proxy dan aws-node yang ditulis oleh Wawasan Kontainer berada di lokasi yang berbeda. Dalam konfigurasi Fluentd, file-file itu berada di /aws/containerinsights/Cluster_Name/application. Dalam konfigurasi Fluent Bit yang dioptimalkan, file-file itu berada di /aws/containerinsights/Cluster_Name/dataplane.

  • Sebagian besar metadata seperti pod_name dan namespace_name adalah sama, baik di Fluent Bit maupun di Fluentd, tetapi yang berikut ini berbeda.

    • Konfigurasi Fluent Bit yang dioptimalkan menggunakan docker_id, sedangkan Fluentd menggunakan Docker.container_id.

    • Kedua konfigurasi Fluent Bit tidak menggunakan metadata berikut ini. Mereka hanya ada dalam Fluentd: container_image_id, master_url, namespace_id, dan namespace_labels.

Menyiapkan Fluent Bit

Untuk menyiapkan Fluent Bit untuk mengumpulkan log dari kontainer-kontainer Anda, Anda dapat mengikuti langkah-langkah yang diuraikan dalam Pengaturan Mulai Cepat untuk Wawasan Kontainer di Amazon EKS dan Kubernetes atau Anda dapat mengikuti langkah-langkah yang dijelaskan di bagian ini.

Dengan metode mana pun, peran IAM yang dilampirkan ke simpul klaster harus memiliki izin yang memadai. Untuk informasi selengkapnya tentang izin-izin yang diperlukan untuk menjalankan sebuah klaster Amazon EKS, silakan lihat Kebijakan IAM, Peran, dan Izin Amazon EKS dalam Panduan Pengguna Amazon EKS .

Pada langkah-langkah berikut, Anda mengatur Fluent Bit sebagai DaemonSet untuk mengirim log ke Log. CloudWatch Setelah Anda menyelesaikan langkah ini, Fluent Bit akan membuat grup log berikut jika belum ada.

penting

Jika Anda sudah memiliki FluentD yang dikonfigurasi di Container Insights dan DaemonSet fluentD tidak berjalan seperti yang diharapkan (ini dapat terjadi jika Anda containerd menggunakan runtime), Anda harus menghapus instalannya sebelum menginstal Fluent Bit untuk mencegah Fluent Bit memproses pesan log kesalahan FluentD. Jika tidak, maka Anda harus menghapus instalasi FluentD segera setelah Anda berhasil melakukan instalasi Fluent Bit. Menghapus instalasi Fluentd setelah menyelesaikan instalasi Fluent Bit akan memastikan keberlanjutan pencatatan log selama proses migrasi ini. Hanya satu dari Fluent Bit atau FluentD yang diperlukan untuk mengirim log ke Log. CloudWatch

Nama grup log Sumber log

/aws/containerinsights/Cluster_Name/application

Semua file log yang ada di /var/log/containers

/aws/containerinsights/Cluster_Name/host

Log dari /var/log/dmesg, /var/log/secure, dan /var/log/messages

/aws/containerinsights/Cluster_Name/dataplane

Log yang ada di /var/log/journal untuk kubelet.service, kubeproxy.service, dan docker.service.

Untuk menginstal Fluent Bit untuk mengirim log dari kontainer ke CloudWatch Log
  1. Jika Anda belum memiliki sebuah namespace yang mempunyai nama amazon-cloudwatch, maka Anda harus membuatnya dengan memasukkan perintah berikut:

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
  2. Jalankan perintah berikut untuk membuat ConfigMap nama cluster-info dengan nama cluster dan Region untuk mengirim log ke. Ganti cluster-name dan cluster-region dengan nama dan Wilayah klaster Anda.

    ClusterName=cluster-name RegionName=cluster-region FluentBitHttpPort='2020' FluentBitReadFromHead='Off' [[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On' [[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On' kubectl create configmap fluent-bit-cluster-info \ --from-literal=cluster.name=${ClusterName} \ --from-literal=http.server=${FluentBitHttpServer} \ --from-literal=http.port=${FluentBitHttpPort} \ --from-literal=read.head=${FluentBitReadFromHead} \ --from-literal=read.tail=${FluentBitReadFromTail} \ --from-literal=logs.region=${RegionName} -n amazon-cloudwatch

    Dalam perintah ini, FluentBitHttpServer untuk memantau metrik plugin akan aktif secara bawaan. Untuk menonaktifkannya, Anda harus mengubah baris ketiga dalam perintah tersebut menjadi FluentBitHttpPort='' (string kosong) dalam perintah tersebut.

    Secara bawaan, Fluent Bit juga akan membaca file log dari ekor, dan akan menangkap hanya log baru saja, setelah di-deploy. Jika Anda ingin sebaliknya, maka Anda harus mengatur FluentBitReadFromHead='On' dan itu akan mengumpulkan semua log di sistem file.

  3. Mengunduh dan menerapkan daemonset Fluent Bit ke klaster dengan menjalankan perintah-perintah berikut.

    • Jika Anda ingin konfigurasi Fluent Bit dioptimalkan untuk komputer Linux, jalankan perintah ini.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit.yaml
    • Jika Anda ingin konfigurasi Fluent Bit dioptimalkan untuk komputer Windows, jalankan perintah ini.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-windows.yaml
    • Jika Anda menggunakan komputer Linux dan menginginkan konfigurasi Fluent Bit yang lebih mirip dengan Fluentd, jalankan perintah ini.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-compatible.yaml
    penting

    Konfigurasi daemonset Fluent Bit secara default menyetel level log ke INFO, yang dapat menghasilkan biaya konsumsi CloudWatch Log yang lebih tinggi. Jika Anda ingin mengurangi volume dan biaya penyerapan log, Anda dapat mengubah level log menjadi ERROR.

    Untuk informasi selengkapnya tentang cara mengurangi volume log ini, silakan lihat (Opsional) Mengurangi volume log dari Fluent Bit

  4. Lakukan validasi atas deployment dengan memasukkan perintah berikut. Masing-masing simpul harus memiliki satu pod yang diberi nama fluent-bit-*.

    kubectl get pods -n amazon-cloudwatch

Langkah-langkah di atas akan membuat sumber daya berikut di klaster:

  • Sebuah akun layanan yang bernama Fluent-Bit dalam namespace amazon-cloudwatch. Akun layanan ini digunakan untuk menjalankan daemonSet Fluent Bit. Untuk informasi selengkapnya, silakan lihat Mengelola Akun Layanan dalam Referensi Kubernetes.

  • Sebuah peran klaster yang diberi nama Fluent-Bit-role dalam namespace amazon-cloudwatch. Peran klaster ini akan memberikan izin get, list, dan watch pada log pod ke akun layanan Fluent-Bit. Untuk informasi selengkapnya, silakan lihat Gambaran umum API di Referensi Kubernetes.

  • A ConfigMap bernama Fluent-Bit-config di amazon-cloudwatch namespace. Ini ConfigMap berisi konfigurasi yang akan digunakan oleh Fluent Bit. Untuk informasi selengkapnya, lihat Mengonfigurasi Pod untuk Digunakan ConfigMap dalam dokumentasi Tugas Kubernetes.

Jika Anda ingin melakukan verifikasi terhadap pengaturan Fluent Bit Anda, ikuti langkah-langkah berikut.

Melakukan verifikasi terhadap pengaturan Fluent Bit
  1. Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/.

  2. Pada panel navigasi, silakan pilih Grup log.

  3. Anda harus memastikan bahwa Anda berada di Wilayah tempat menerapkan Fluent Bit Anda.

  4. Memeriksa daftar grup log di Wilayah. Anda akan melihat yang berikut ini:

    • /aws/containerinsights/Cluster_Name/application

    • /aws/containerinsights/Cluster_Name/host

    • /aws/containerinsights/Cluster_Name/dataplane

  5. Navigasikan ke salah satu grup log ini dan periksa Waktu Peristiwa Terakhir untuk log stream. Jika ini relatif baru saat Anda menerapkan Fluent Bit, maka penyiapannya diverifikasi.

    Mungkin akan ada sedikit penundaan dalam membuat grup log /dataplane. Hal ini normal karena grup log ini hanya bisa dibuat ketika Fluent Bit mulai mengirim log untuk grup log tersebut.

Dukungan log multi-baris

Untuk informasi tentang cara menggunakan Fluent Bit dengan log multi-baris, silakan lihat bagian dokumentasi Fluent Bit berikut ini:

(Opsional) Mengurangi volume log dari Fluent Bit

Secara default, kami mengirim log aplikasi Fluent Bit dan metadata Kubernetes ke. CloudWatch Jika Anda ingin mengurangi volume data yang dikirim CloudWatch, Anda dapat menghentikan salah satu atau kedua sumber data ini agar tidak dikirim CloudWatch. Jika Anda telah mengikuti langkah-langkah di halaman ini untuk menyiapkan Fluent Bit, unduh file YAMB manifes Kubernetes dari apply perintah kubectl yang sebelumnya Anda jalankan dan modifikasi dengan perubahan Anda, yang kemudian dapat Anda terapkan kembali ke klaster Anda. Atau, jika Anda menggunakan add-on Amazon CloudWatch Observability EKS atau bagan Helm, lihat (Opsional) Konfigurasi tambahan informasi tentang mengelola konfigurasi Bit Lancar dengan menggunakan konfigurasi lanjutan add-on atau bagan Helm.

Untuk menghentikan log aplikasi Fluent Bit, Anda harus menghapus bagian berikut dari file Fluent Bit configuration.

[INPUT] Name tail Tag application.* Path /var/log/containers/fluent-bit* Parser docker DB /fluent-bit/state/flb_log.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10

Untuk menghapus metadata Kubernetes agar tidak ditambahkan ke peristiwa log yang dikirim CloudWatch, tambahkan filter berikut ke application-log.conf bagian dalam konfigurasi Fluent Bit. Ganti <Metadata_1>dan bidang serupa dengan pengidentifikasi metadata yang sebenarnya.

application-log.conf: | [FILTER] Name nest Match application.* Operation lift Nested_under kubernetes Add_prefix Kube. [FILTER] Name modify Match application.* Remove Kube.<Metadata_1> Remove Kube.<Metadata_2> Remove Kube.<Metadata_3> [FILTER] Name nest Match application.* Operation nest Wildcard Kube.* Nested_under kubernetes Remove_prefix Kube.

Pemecahan Masalah

Jika Anda tidak melihat grup log ini dan mencarinya di Wilayah yang benar, Anda perlu memeriksa log untuk pod daemonSet Fluent Bit untuk mencari kesalahan.

Jalankan perintah berikut dan pastikan bahwa statusnya Running.

kubectl get pods -n amazon-cloudwatch

Jika log memiliki kesalahan terkait izin IAM, Anda perlu memeriksa peran IAM yang dilampirkan ke klaster simpul. Untuk informasi selengkapnya tentang izin-izin yang diperlukan untuk menjalankan sebuah klaster Amazon EKS, silakan lihat Kebijakan IAM, Peran, dan Izin Amazon EKS dalam Panduan Pengguna Amazon EKS .

Jika status pod tersebut adalah CreateContainerConfigError, dapatkan kesalahan yang tepat dengan menjalankan perintah berikut.

kubectl describe pod pod_name -n amazon-cloudwatch

Dasbor

Anda dapat membuat sebuah dasbor untuk memantau metrik-metrik dari masing-masing plugin yang sedang berjalan. Anda dapat melihat data untuk input dan output byte dan data untuk tingkat pemrosesan catatan serta kesalahan output dan data untuk tingkat coba lagi/gagal. Untuk melihat metrik ini, Anda harus menginstal CloudWatch agen dengan koleksi metrik Prometheus untuk klaster Amazon EKS dan Kubernetes. Untuk informasi selengkapnya tentang cara menyiapkan dasbor, silakan lihat Instal CloudWatch agen dengan koleksi metrik Prometheus di klaster Amazon EKS dan Kubernetes.

catatan

Sebelum Anda dapat menyiapkan dasbor ini, Anda harus menyiapkan Wawasan Kontainer untuk metrik Prometheus. Untuk informasi selengkapnya, lihat Pemantauan metrik-metrik Prometheus Wawasan Kontainer.

Cara membuat sebuah dasbor untuk metrik-metrik Fluent Bit Prometheus
  1. Membuat variabel lingkungan, yang mengganti nilai yang ada di sebelah kanan di baris-baris berikut agar sesuai dengan deployment Anda.

    DASHBOARD_NAME=your_cw_dashboard_name REGION_NAME=your_metric_region_such_as_us-west-1 CLUSTER_NAME=your_kubernetes_cluster_name
  2. Membuat dasbor dengan menjalankan perintah berikut.

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/fluent-bit/cw_dashboard_fluent_bit.json \ | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \ | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \ | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --dashboard-body