

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

# Kirim log ke CloudWatch Log
<a name="Container-Insights-EKS-logs"></a>

Untuk mengirim log dari kontainer Anda ke Amazon CloudWatch Logs, Anda dapat menggunakan Fluent Bit. Untuk informasi lebih lanjut, lihat [Fluent Bit](https://fluentbit.io/).

**catatan**  
Pada 10 Februari 2025, AWS telah menghentikan dukungan untuk FluentD sebagai penerusan log ke Log. CloudWatch Kami menyarankan Anda menggunakan Fluent Bit, yang merupakan alternatif yang ringan dan hemat sumber daya. Penerapan FluentD yang ada akan terus berfungsi. Migrasikan pipeline logging Anda ke Fluent Bit untuk memastikan dukungan berkelanjutan dan kinerja optimal.   
Container Insights sebelumnya juga didukung menggunakan FluentD untuk mengirim log dari kontainer Anda. FluentD telah usang dan sekarang tidak didukung untuk Wawasan Kontainer. Gunakan Fluent Bit sebagai gantinya.

**Topics**
+ [Siapkan Fluent Bit sebagai a DaemonSet untuk mengirim log ke CloudWatch Log](Container-Insights-setup-logs-FluentBit.md)
+ [(Opsional) Menyiapkan pencatatan log bidang kontrol Amazon EKS](Container-Insights-setup-control-plane-logging.md)
+ [(Opsional) Mengaktifkan fitur Use\$1Kubelet untuk klaster besar](ContainerInsights-use-kubelet.md)

# Siapkan Fluent Bit sebagai a DaemonSet untuk mengirim log ke CloudWatch Log
<a name="Container-Insights-setup-logs-FluentBit"></a>

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

**Topics**
+ [Menyiapkan Fluent Bit](#Container-Insights-FluentBit-setup)
+ [Dukungan log multi-baris](#ContainerInsights-fluentbit-multiline)
+ [(Opsional) Mengurangi volume log dari Fluent Bit](#ContainerInsights-fluentbit-volume)
+ [Pemecahan masalah](#Container-Insights-FluentBit-troubleshoot)
+ [Dasbor](#Container-Insights-FluentBit-dashboard)

## Menyiapkan Fluent Bit
<a name="Container-Insights-FluentBit-setup"></a>

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](Container-Insights-setup-EKS-quickstart.md) 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](https://docs.aws.amazon.com/eks/latest/userguide/IAM_policies.html) 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 menginstal Fluent Bit memastikan kontinuitas dalam logging 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
   ```

1. 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 cluster dan Region 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.

1. 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](#ContainerInsights-fluentbit-volume)

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

   ```
   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](https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/) 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](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#api-overview/) 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](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-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/](https://console.aws.amazon.com/cloudwatch/).

1. Pada panel navigasi, silakan pilih **Grup log**.

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

1. 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`

1. 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
<a name="ContainerInsights-fluentbit-multiline"></a>

Untuk informasi tentang cara menggunakan Fluent Bit dengan log multi-baris, silakan lihat bagian dokumentasi Fluent Bit berikut ini:
+ [Penguraian Multi-baris](https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/multiline-parsing)
+ [Multi-baris dan Kontainer (v1.8)](https://docs.fluentbit.io/manual/pipeline/inputs/tail#multiline-and-containers-v1.8)
+ [Inti Multi-baris (v1.8)](https://docs.fluentbit.io/manual/pipeline/inputs/tail#multiline-core-v1.8)
+ [Selalu gunakan multi-baris di input ekor](https://github.com/aws/aws-for-fluent-bit/blob/mainline/troubleshooting/debugging.md#always-use-multiline-the-tail-input)

## (Opsional) Mengurangi volume log dari Fluent Bit
<a name="ContainerInsights-fluentbit-volume"></a>

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 YAMM 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](install-CloudWatch-Observability-EKS-addon.md#install-CloudWatch-Observability-EKS-addon-configuration) 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\$11>* 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
<a name="Container-Insights-FluentBit-troubleshoot"></a>

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](https://docs.aws.amazon.com/eks/latest/userguide/IAM_policies.html) 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
<a name="Container-Insights-FluentBit-dashboard"></a>

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 untuk tingkat pemrosesan rekaman serta kesalahan dan retry/failed tingkat output. 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 KubernetesInstal CloudWatch agen dengan koleksi metrik Prometheus di klaster Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Setup.md).

**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](ContainerInsights-Prometheus.md).

**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
   ```

1. 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
   ```

# (Opsional) Menyiapkan pencatatan log bidang kontrol Amazon EKS
<a name="Container-Insights-setup-control-plane-logging"></a>

Jika Anda menggunakan Amazon EKS, Anda dapat mengaktifkan pencatatan pesawat kontrol Amazon EKS secara opsional, untuk menyediakan log audit dan diagnostik langsung dari bidang kontrol Amazon EKS ke CloudWatch Log. Untuk informasi selengkapnya, silakan lihat [Pencatatan Log Bidang Kontrol Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html).

# (Opsional) Mengaktifkan fitur Use\$1Kubelet untuk klaster besar
<a name="ContainerInsights-use-kubelet"></a>

Secara default, fitur Use\$1Kubelet dinonaktifkan di plugin Kubernetes. FluentBit Dengan mengaktifkan fitur ini, Anda akan dapat mengurangi lalu lintas ke server API dan mengurangi masalah Server API menjadi hambatan. Kami menyarankan agar Anda mengaktifkan fitur ini untuk klaster besar.

Untuk mengaktifkan Use\$1Kubelet, pertama-tama tambahkan node dan nodes/proxy izin ke konfigurasi ClusterRole.

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: fluent-bit-role
rules:
  - nonResourceURLs:
      - /metrics
    verbs:
      - get
  - apiGroups: [""]
    resources:
      - namespaces
      - pods
      - pods/logs
      - nodes
      - nodes/proxy
    verbs: ["get", "list", "watch"]
```

Dalam DaemonSet konfigurasi, fitur ini membutuhkan akses jaringan host. Versi citra untuk `amazon/aws-for-fluent-bit` harus versi 2.12.0 atau versi yang lebih baru, atau versi citra bit fluent harus versi 1.7.2 atau versi yang lebih baru.

```
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluent-bit
  namespace: amazon-cloudwatch
  labels:
    k8s-app: fluent-bit
    version: v1
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    matchLabels:
      k8s-app: fluent-bit
  template:
    metadata:
      labels:
        k8s-app: fluent-bit
        version: v1
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: fluent-bit
        image: amazon/aws-for-fluent-bit:2.19.0
        imagePullPolicy: Always
        env:
            - name: AWS_REGION
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: logs.region
            - name: CLUSTER_NAME
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: cluster.name
            - name: HTTP_SERVER
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: http.server
            - name: HTTP_PORT
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: http.port
            - name: READ_FROM_HEAD
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: read.head
            - name: READ_FROM_TAIL
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: read.tail
            - name: HOST_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: HOSTNAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name      
            - name: CI_VERSION
              value: "k8s/1.3.8"
        resources:
            limits:
              memory: 200Mi
            requests:
              cpu: 500m
              memory: 100Mi
        volumeMounts:
        # Please don't change below read-only permissions
        - name: fluentbitstate
          mountPath: /var/fluent-bit/state
        - name: varlog
          mountPath: /var/log
          readOnly: true
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
        - name: fluent-bit-config
          mountPath: /fluent-bit/etc/
        - name: runlogjournal
          mountPath: /run/log/journal
          readOnly: true
        - name: dmesg
          mountPath: /var/log/dmesg
          readOnly: true
      terminationGracePeriodSeconds: 10
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      volumes:
      - name: fluentbitstate
        hostPath:
          path: /var/fluent-bit/state
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers
      - name: fluent-bit-config
        configMap:
          name: fluent-bit-config
      - name: runlogjournal
        hostPath:
          path: /run/log/journal
      - name: dmesg
        hostPath:
          path: /var/log/dmesg
      serviceAccountName: fluent-bit
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      - operator: "Exists"
        effect: "NoExecute"
      - operator: "Exists"
        effect: "NoSchedule"
```

Konfigurasi Plugin Kubernetes harus serupa dengan konfigurasi berikut ini:

```
[FILTER]
        Name                kubernetes
        Match               application.*
        Kube_URL            https://kubernetes.default.svc:443
        Kube_Tag_Prefix     application.var.log.containers.
        Merge_Log           On
        Merge_Log_Key       log_processed
        K8S-Logging.Parser  On
        K8S-Logging.Exclude Off
        Labels              Off
        Annotations         Off
        Use_Kubelet         On
        Kubelet_Port        10250 
        Buffer_Size         0
```