Dokumen ini menjelaskan cara menggunakan eventer untuk mengumpulkan event dari Kubernetes dan mengirimkannya ke Simple Log Service.
Arsitektur Kubernetes didasarkan pada mesin keadaan. Transisi antar keadaan menghasilkan event yang sesuai: transisi antar keadaan normal menghasilkan event tingkat Normal, sedangkan transisi antara keadaan normal dan tidak normal menghasilkan event tingkat Warning.
Container Service for Kubernetes (ACK) menyediakan solusi pemantauan event siap pakai untuk skenario kontainer. Solusi ini menggunakan NPD yang dikelola oleh ACK dan kube-eventer bawaan untuk menyediakan pemantauan event kontainer.
Node Problem Detector (NPD) adalah tool diagnostik untuk node Kubernetes. Tool ini mengonversi anomali node—seperti hang Docker Engine, hang kernel Linux, masalah egress jaringan, atau anomali deskriptor file—menjadi event node. Ketika dikombinasikan dengan kube-eventer, NPD memungkinkan sistem loop tertutup untuk peringatan event node.
kube-eventer adalah tool open source yang dikelola oleh ACK untuk pemrosesan offline event Kubernetes. Tool ini mendorong event kluster ke sistem eksternal seperti DingTalk, SLS, dan EventBridge, serta menyediakan kondisi filter untuk berbagai tingkat event guna mengaktifkan pengumpulan real-time, peringatan terarah, dan pengarsipan asinkron.
Node Problem Detector (NPD) adalah tool diagnostik untuk node Kubernetes. Tool ini mengonversi anomali node—seperti hang Docker Engine, hang kernel Linux, masalah egress jaringan, atau anomali deskriptor file—menjadi event node. Ketika dikombinasikan dengan kube-eventer, NPD memungkinkan sistem loop tertutup untuk peringatan event node.
kube-eventer adalah tool open source yang dikelola oleh ACK untuk pemrosesan offline event Kubernetes. Tool ini mendorong event kluster ke sistem eksternal seperti DingTalk, SLS, dan EventBridge, serta menyediakan kondisi filter untuk berbagai tingkat event guna mengaktifkan pengumpulan real-time, peringatan terarah, dan pengarsipan asinkron.
Prasyarat
Kluster Kubernetes telah dibuat, seperti kluster ACK Alibaba Cloud atau kluster ACK serverless.
Penagihan
Pusat event K8s gratis jika memenuhi kondisi berikut:
Periode retensi data untuk Logstore yang terkait dengan pusat event K8s adalah 90 hari (nilai default).
Volume data yang ditulis ke pusat event K8s kurang dari 256 MB per hari, yaitu sekitar 250.000 event.
Contoh:
Jika Anda menggunakan periode retensi data default 90 hari dan kluster Kubernetes Anda menghasilkan 1.000 event per hari, pusat event K8s gratis.
Jika Anda mengatur periode retensi data menjadi 105 hari dan kluster Kubernetes Anda menghasilkan 1.000 event per hari, Anda akan dikenai biaya penyimpanan Logstore setelah 90 hari. Item yang dapat ditagih adalah Penyimpanan Log. Untuk informasi lebih lanjut tentang item Penyimpanan Log, lihat Item yang dapat ditagih dalam mode bayar-per-fitur.
Langkah 1: Deploy kube-eventer dan node-problem-detector
ACK
Untuk kluster ACK, komponen ack-node-problem-detector mengintegrasikan fitur kube-eventer dan node-problem-detector. Anda hanya perlu mendeploy komponen ini. Untuk kluster ACK serverless, Anda perlu mendeploy komponen kube-eventer.
NPD mendeteksi masalah atau titik kegagalan node berdasarkan konfigurasi dan plugin pihak ketiga, lalu menghasilkan event kluster yang sesuai. Kluster Kubernetes juga menghasilkan berbagai event akibat transisi keadaan, seperti eviction Pod dan kegagalan pull image. Kubernetes Event Center dari Simple Log Service (SLS) mengagregasi semua event Kubernetes secara real-time serta menyediakan kemampuan penyimpanan, kueri, analisis, visualisasi, dan peringatan. Langkah-langkah berikut menjelaskan cara mengirim event kluster ke Kubernetes Event Center SLS:
Jika Anda memilih Install Node-problem-detector (NPD) and create an Event Center saat membuat kluster, lanjutkan ke Langkah 2 untuk melihat Kubernetes Event Center.
Jika Anda tidak memilih Install Node-problem-detector and Create an Event Center saat membuat kluster, Anda dapat menginstalnya secara manual.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih .
Di tab Log and Monitoring, temukan dan instal ack-node-problem-detector.
Kluster Kubernetes yang dikelola sendiri
Deploy
kube-eventer.Instal kubectl. Untuk informasi selengkapnya, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
Buat file konfigurasi bernama eventer.yaml berdasarkan templat berikut.
apiVersion: apps/v1 kind: Deployment metadata: labels: name: kube-eventer name: kube-eventer namespace: kube-system spec: replicas: 1 selector: matchLabels: app: kube-eventer template: metadata: labels: app: kube-eventer annotations: scheduler.alpha.kubernetes.io/critical-pod: '' spec: dnsPolicy: ClusterFirstWithHostNet serviceAccount: kube-eventer containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/kube-eventer:v1.2.5-cc7ec54-aliyun name: kube-eventer command: - "/kube-eventer" - "--source=kubernetes:https://kubernetes.default" ## .send to sls ## --sink=sls:https://{endpoint}?project={project}&logStore=k8s-event®ionId={region-id}&internal=false&accessKeyId={accessKeyId}&accessKeySecret={accessKeySecret} - --sink=sls:https://cn-beijing.log.aliyuncs.com?project=k8s-xxxx&logStore=k8s-event®ionId=cn-beijing&internal=false&accessKeyId=xxx&accessKeySecret=xxx env: # If TZ is assigned, set the TZ value as the time zone - name: TZ value: "Asia/Shanghai" volumeMounts: - name: localtime mountPath: /etc/localtime readOnly: true - name: zoneinfo mountPath: /usr/share/zoneinfo readOnly: true resources: requests: cpu: 10m memory: 50Mi limits: cpu: 500m memory: 250Mi volumes: - name: localtime hostPath: path: /etc/localtime - name: zoneinfo hostPath: path: /usr/share/zoneinfo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kube-eventer rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kube-eventer roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kube-eventer subjects: - kind: ServiceAccount name: kube-eventer namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: kube-eventer namespace: kube-systemParameter
Type
Wajib
Deskripsi
endpoint
string
Ya
Titik akhir Simple Log Service. Untuk informasi selengkapnya, lihat Endpoints.
project
string
Ya
Proyek Simple Log Service.
logStore
string
Ya
Simple Log Service Logstore.
internal
string
Wajib untuk kluster Kubernetes yang dikelola sendiri.
Untuk kluster Kubernetes yang dikelola sendiri, Anda harus mengatur parameter ini ke false.
regionId
string
Wajib untuk kluster Kubernetes yang dikelola sendiri.
ID wilayah tempat Simple Log Service berada. Untuk informasi selengkapnya, lihat Endpoints.
accessKeyId
string
Wajib untuk kluster Kubernetes yang dikelola sendiri.
ID AccessKey. Kami menyarankan Anda menggunakan pasangan Kunci Akses Pengguna Resource Access Management (RAM). Untuk informasi selengkapnya, lihat Pasangan Kunci Akses.
accessKeySecret
string
Wajib untuk kluster Kubernetes yang dikelola sendiri.
Rahasia AccessKey. Kami menyarankan Anda menggunakan pasangan Kunci Akses Pengguna Resource Access Management (RAM). Untuk informasi selengkapnya, lihat Pasangan Kunci Akses.
Jalankan perintah berikut untuk menerapkan konfigurasi
eventer.yamlke kluster.kubectl apply -f eventer.yamlOutput yang diharapkan:
deployment.apps/kube-eventer created clusterrole.rbac.authorization.k8s.io/kube-eventer created clusterrolebinding.rbac.authorization.k8s.io/kube-eventer created serviceaccount/kube-eventer created
Deploy
node-problem-detector.
Langkah 2: Buat instans K8s event center
Setelah Anda membuat instans K8s event center, Simple Log Service secara otomatis membuat Logstore bernama k8s-event dan dasbor terkait di proyek tujuan.
Masuk ke konsol Simple Log Service.
Di bagian Log Application, klik tab Intelligent O&M, lalu klik K8s Event Center.
Di halaman Event Center Management, klik Add di pojok kanan atas.
Di panel Create Event Center, konfigurasikan parameter dan klik Next.
Jika Anda memilih Select Existing Project, pilih proyek yang sudah ada dari daftar drop-down Project untuk mengelola resource instans K8s event center, seperti Logstore dan dasbor.
Jika Anda memilih Select Kubernetes Cluster from Container Service for Kubernetes, pilih kluster K8s yang sudah ada dari daftar drop-down K8s Cluster. Jika menggunakan metode ini, Simple Log Service secara otomatis membuat proyek bernama
k8s-log-{cluster-id}untuk mengelola resource instans K8s event center, seperti Logstore dan dasbor.
Langkah 3: Gunakan instans K8s event center
Setelah Anda membuat instans K8s event center dan mendeploy kube-eventer serta node-problem-detector, Anda dapat mulai menggunakan pusat event tersebut. Anda dapat melihat ikhtisar event, mengkueri detail event, melihat siklus hidup pod, melihat event node, melihat event komponen inti, mengonfigurasi peringatan, menjalankan kueri kustom, dan memperbarui versi.
Di halaman K8s Event Center, temukan instans K8s event center target dan klik ikon
untuk melakukan operasi berikut.
Aksi | Deskripsi |
Lihat ikhtisar event | Halaman Event Overview menampilkan statistik ringkasan event inti. Statistik tersebut mencakup jumlah total event, perbandingan event error antara hari ini dan kemarin, statistik peringatan, tren event error, serta detail OOM pod. Catatan Informasi OOM pod tidak mengidentifikasi pod spesifik. Anda hanya dapat menemukan node, nama proses, dan ID proses tempat event tersebut terjadi. Anda dapat menjalankan kueri kustom untuk menemukan event restart pod yang terjadi sekitar waktu OOM pod guna membantu mengidentifikasi pod spesifik tersebut. |
Kueri detail event | Halaman Event Detail Query menampilkan detail event yang difilter berdasarkan berbagai dimensi, seperti tipe event, objek event, host, namespace, dan nama. |
Lihat siklus hidup pod | Halaman Pod Lifecycle menampilkan garis waktu grafis event dalam siklus hidup pod. Anda juga dapat memfilter event pod penting berdasarkan tingkat event. |
Lihat event node | Halaman Node Events menampilkan detail event node, seperti siklus hidup node dan daftar event. |
Lihat event komponen inti | Halaman Core Component Events menampilkan detail event komponen inti, seperti kegagalan restart ECS dan mode URL yang tidak diimplementasikan. |
Atur peringatan | Di halaman Alert Configuration, Anda dapat mengonfigurasi peringatan untuk K8s event center. Untuk informasi selengkapnya, lihat Atur peringatan. |
Jalankan kueri kustom | Di halaman Custom Query, Anda dapat menyesuaikan pernyataan kueri dan pernyataan analitik. Semua event di K8s event center disimpan dalam Logstore, sehingga Anda dapat menggunakan semua fitur Logstore, seperti kueri kustom, konsumsi event, laporan kustom, dan peringatan kustom. Untuk informasi selengkapnya, lihat Memulai cepat untuk kueri dan analisis. Untuk mengakses proyek yang terkait dengan instans K8s event center, Anda dapat menemukan nama proyek dengan salah satu cara berikut:
|
Perbarui versi | Di halaman Version Update, Anda dapat meningkatkan K8s event center. |
Contoh log
Kode berikut menunjukkan contoh log.
hostname: cn-hangzhou.i-***********"
level: Normal
pod_id: 2a360760-****
pod_name: logtail-ds-blkkr
event_id: {
"metadata":{
"name":"logtail-ds-blkkr.157b7cc90de7e192",
"namespace":"kube-system",
"selfLink":"/api/v1/namespaces/kube-system/events/logtail-ds-blkkr.157b7cc90de7e192",
"uid":"2aaf75ab-****",
"resourceVersion":"6129169",
"creationTimestamp":"2019-01-20T07:08:19Z"
},
"involvedObject":{
"kind":"Pod",
"namespace":"kube-system",
"name":"logtail-ds-blkkr",
"uid":"2a360760-****",
"apiVersion":"v1",
"resourceVersion":"6129161",
"fieldPath":"spec.containers{logtail}"
},
"reason":"Started",
"message":"Started container",
"source":{
"component":"kubelet",
"host":"cn-hangzhou.i-***********"
},
"firstTimestamp":"2019-01-20T07:08:19Z",
"lastTimestamp":"2019-01-20T07:08:19Z",
"count":1,
"type":"Normal",
"eventTime":null,
"reportingComponent":"",
"reportingInstance":""
}field log | Tipe | Deskripsi |
hostname | string | Hostname host tempat event terjadi. |
level | string | Tingkat log. Nilai yang valid: Normal dan Warning. |
pod_id | string | ID unik pod. Field ini hanya disertakan jika event terkait dengan pod. |
pod_name | string | Nama pod. Field ini hanya disertakan jika event terkait dengan pod. |
event_id | json | Detail event. Nilai field ini adalah string JSON. |
FAQ
Instans K8s event center tidak memiliki data
Setelah Anda mendeploy instans K8s event center, event baru akan dikumpulkan secara otomatis. Anda dapat mencarinya di halaman Custom Query. Kami menyarankan Anda mengatur rentang waktu di pojok kanan atas menjadi 1 Hari. Jika tidak ditemukan data, biasanya ada dua penyebab:
Tidak ada event baru yang dihasilkan di kluster Kubernetes sejak Anda mendeploy K8s event center.
Anda dapat menjalankan perintah
kubectl get events --all-namespacesuntuk memeriksa apakah ada event baru yang dihasilkan di kluster.Parameter dikonfigurasi secara salah dalam deployment
kube-eventerdannode-problem-detector.Jika Anda menggunakan kluster Container Service for Kubernetes (ACK), lakukan langkah-langkah berikut:
Masuk ke Konsol ACK.
Di halaman Clusters, klik nama kluster target.
Di panel navigasi kiri, pilih .
Di halaman Helm, temukan ack-node-problem-detector dan klik Update.
Periksa dan modifikasi pengaturan parameter.
Jika Anda menggunakan kluster Kubernetes yang dikelola sendiri, lihat Kumpulkan event Kubernetes untuk pengaturan parameternya.
Bagaimana cara melihat log kontainer untuk suatu event?
Jika Anda menggunakan kluster Container Service for Kubernetes (ACK), lakukan langkah-langkah berikut:
Masuk ke Konsol ACK.
Di halaman Clusters, klik nama kluster target.
Di panel navigasi kiri, pilih .
Atur Namespace ke kube-system.
Di daftar Pods, temukan pod target dan klik Log.
Jika Anda menggunakan kluster Kubernetes yang dikelola sendiri, periksa log Pod dengan awalan nama file
eventer-slsdi namespace kube-system.