Việc stream logs từ Amazon Elastic Kubernetes Service (EKS) lên Amazon CloudWatch mang lại những lợi ích không thể phủ nhận trong việc quản lý ứng dụng của bạn một cách mạch lạc. Bằng cách tận dụng tích hợp này, bạn có thể theo dõi hiệu suất và tình trạng của các cụm EKS và ứng dụng của mình trong thời gian thực. CloudWatch cung cấp một nền tảng tập trung để theo dõi logs, giúp bạn dễ dàng phân tích và khắc phục sự cố, tối ưu hóa việc sử dụng tài nguyên và đảm bảo tính ổn định của các tải công việc Kubernetes của bạn. Với khả năng thiết lập cảnh báo và thông báo dựa trên dữ liệu log, bạn có thể tích cực giải quyết các vấn đề tiềm ẩn trước khi chúng ảnh hưởng đến người dùng của bạn. Cuối cùng, việc stream logs lên CloudWatch giúp bạn nâng cao hiệu quả vận hành và mang lại trải nghiệm xuất sắc cho khách hàng của mình.
1./ Cài đặt Fluent Bit ở dạng DaemonSet
0. Thay đổi các variables sauACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=YOUR_AWS_REGION EKS_CLUSTER_NAME=YOUR_EKS_CLUSTER_NAME1. Tạo IAM Policy grant cho Fluent Bit Pod để gửi logs đến Cloudwatch:
curl -fsSL -o fluentbit_policy.json <https://raw.githubusercontent.com/faudeltn/Kubernetes/master/EKS-FluentbitCloudWatch/policy.json> aws iam create-policy \\ --policy-name EKSFluentbitCloudwatchPolicy \\ --policy-document file://fluentbit_policy.json2. Tạo namespace là
logging
kubectl create namespace logging3. Tạo ServiceAccount cho Fluent bit .
eksctl create iamserviceaccount \\ --name fluent-bit \\ --namespace logging \\ --cluster ${EKS_CLUSTER_NAME} \\ --attach-policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/EKSFluentbitCloudwatchPolicy \\ --approve \\ --override-existing-serviceaccountsNếu gặp lỗi OIDC thì follow document này để cài OIDC https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.htmlvà chạy lại command trước là xong4. Tạo ConfigMap có tên
fluent-bit-cluster-info
với cluster name và Region để gửi logsFluentBitHttpPort='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=${EKS_CLUSTER_NAME} \\ --from-literal=http.server=${FluentBitHttpServer} \\ --from-literal=http.port=${FluentBitHttpPort} \\ --from-literal=read.head=${FluentBitReadFromHead} \\ --from-literal=read.tail=${FluentBitReadFromTail} \\ --from-literal=logs.region=${AWS_REGION} -n logging5. Deploy Fluent bit qua daemonset
kubectl create -f https://raw.githubusercontent.com/faudeltn/Kubernetes/master/EKS-FluentbitCloudWatch/fluentbit.yaml -n logging6. Kiểm tra deployment. Mỗi node sẽ có 1 pod tên là
fluent-bit-*
.kubectl get pods -n logging