1. Phân tích yêu cầu business và xác định chỉ số SLI/SLO
Trước khi triển khai bất kỳ công cụ nào, chúng ta cần định nghĩa rõ ràng những gì hệ thống cần đo lường để đảm bảo tính ổn định và hiệu năng trong môi trường Hybrid Cloud.
Mục tiêu là xác định các chỉ số cốt lõi (Core Metrics) phản ánh trực tiếp trải nghiệm người dùng cuối (End-user experience) và độ tin cậy của hệ thống.
- SLI (Service Level Indicator): Các chỉ số kỹ thuật đo lường được. Ví dụ: Tỷ lệ lỗi HTTP 5xx, độ trễ (Latency) p99, thông lượng (Throughput) request/giây.
- SLO (Service Level Objective): Mục tiêu cụ thể của SLI. Ví dụ: Tỷ lệ lỗi < 0.1%, độ trễ p99 < 200ms.
- SLA (Service Level Agreement): Cam kết pháp lý với khách hàng dựa trên SLO.
Chúng ta sẽ tập trung vào 3 nhóm chỉ số chính cho môi trường Hybrid:
- Availability (Độ sẵn sàng): Theo dõi trạng thái Up/Down của các service trên cả On-prem và Cloud.
- Latency (Độ trễ): Đo lường thời gian xử lý request, đặc biệt chú ý đến độ trễ mạng giữa On-prem và Cloud.
- Error Rate (Tỷ lệ lỗi): Theo dõi lỗi hệ thống (System errors) và lỗi ứng dụng (Application errors).
Kết quả mong đợi: Có một tài liệu kỹ thuật (Design Doc) liệt kê rõ ràng các SLI/SLO cần theo dõi cho từng microservice trong kiến trúc Hybrid.
2. Lựa chọn công nghệ stack cho kiến trúc Hybrid
Dựa trên yêu cầu môi trường Hybrid Cloud (kết hợp giữa Kubernetes On-prem và Cloud Public), chúng ta chọn stack công nghệ tối ưu về chi phí, hiệu năng và khả năng mở rộng.
Quyết định công nghệ cụ thể như sau:
- Metric Collection: Prometheus. Lý do: Chuẩn de-facto trong K8s, hỗ trợ tốt cho scraping metrics từ các node On-prem và Cloud, mô hình Pull-based phù hợp với mạng nội bộ.
- Visualization & Alerting: Grafana. Lý do: Hỗ trợ kết nối đa nguồn dữ liệu (Prometheus, Loki, Tempo/Jaeger), giao diện trực quan, plugin hệ sinh thái phong phú.
- Distributed Tracing & Instrumentation: OpenTelemetry (OTel). Lý do: Chuẩn mở (Open Standard), không bị vendor lock-in, hỗ trợ tự động hóa instrumentation (Auto-instrumentation) cho nhiều ngôn ngữ lập trình.
- Data Aggregation: OpenTelemetry Collector. Lý do: Đóng vai trò là "Gateway" tập trung, nhận dữ liệu từ On-prem và Cloud, thực hiện routing, batching trước khi gửi về backend storage.
Kiến trúc tổng quan sẽ là: Các ứng dụng (On-prem/Cloud) -> OpenTelemetry SDK -> OpenTelemetry Collector -> Prometheus (Metrics) & Grafana (Visualization).
Kết quả mong đợi: Đã chốt danh sách công nghệ và hiểu rõ luồng dữ liệu (Data Flow) trong kiến trúc Hybrid.
3. Chuẩn bị hạ tầng: Cluster Kubernetes và môi trường Cloud
Bước này yêu cầu thiết lập môi trường vật lý hoặc ảo để chứa các thành phần của hệ thống Observability. Chúng ta cần 2 thành phần chính: Cluster K8s On-prem và tài nguyên Cloud.
3.1. Thiết lập Cluster Kubernetes On-prem
Giả định bạn đã có một máy chủ Linux (Ubuntu 22.04 LTS hoặc CentOS 7+) với tài nguyên tối thiểu 4 CPU, 16GB RAM để chạy Control Plane và Worker Node.
Chúng ta sẽ sử dụng kubeadm để khởi tạo cluster đơn giản (Single Node hoặc Multi-Node tùy tài nguyên, ở đây hướng dẫn cho 1 node để test nhanh, sau đó scale ra).
Trước tiên, cài đặt container runtime và Kubernetes components.
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni
sudo crictl config set runtime-endpoint unix:///var/run/containerd/containerd.sock
Kết quả mong đợi: Các package kubectl, kubeadm, kubelet đã được cài đặt thành công và sẵn sàng sử dụng.
Khởi tạo Control Plane với CIDR Pod phù hợp cho môi trường Hybrid (tránh xung đột với mạng Cloud).
sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.1.10
Cấu hình quyền truy cập kubectl cho user hiện tại.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Kết quả mong đợi: Command kubectl get nodes trả về trạng thái NotReady (chưa có CNI).
Cài đặt CNI (Calico) để kết nối mạng giữa các Pod.
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml
Chờ 2-3 phút và kiểm tra lại trạng thái node.
kubectl get nodes
Kết quả mong đợi: Trạng thái node chuyển sang Ready.
3.2. Thiết lập tài nguyên Cloud (AWS/GCP/Azure)
Giả định bạn đã có tài khoản Cloud và cấu hình sẵn môi trường Cloud (EC2 trên AWS hoặc GKE trên GCP). Ở đây chúng ta chuẩn bị môi trường để deploy OpenTelemetry Collector và Grafana (vì chúng cần tài nguyên lớn và luôn online).
Trên Cloud Console, tạo một instance VM (hoặc Node Pool nếu dùng Managed K8s) với các yêu cầu sau:
- Region: Chọn region gần nhất với On-prem để giảm latency.
- OS: Ubuntu 22.04 LTS (để đồng bộ với On-prem).
- Security Group / Firewall: Mở port 9090 (Prometheus), 3000 (Grafana), 4317 (OTel gRPC), 4318 (OTel HTTP).
- SSH Access: Cấu hình SSH Key pair để truy cập.
Trên Cloud VM, cài đặt Docker và kubectl tương tự như phần On-prem để đồng bộ môi trường.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
Kết quả mong đợi: Cloud VM đã sẵn sàng để deploy các thành phần quan trọng của hệ thống Observability.
Verify kết quả: Đảm bảo bạn có thể SSH vào Cloud VM và chạy docker --version cùng kubectl version thành công.
4. Cài đặt các công cụ CLI cần thiết
Để quản lý hệ thống Hybrid, kỹ sư cần trang bị các công cụ dòng lệnh (CLI) trên máy làm việc (Laptop) của mình. Các công cụ này sẽ được dùng để điều khiển cả On-prem và Cloud.
4.1. Cài đặt Docker
Docker là nền tảng để chạy các container, bao gồm cả OpenTelemetry Collector và các service khác nếu không dùng K8s.
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Kết quả mong đợi: Command docker info trả về thông tin Docker Engine đang chạy.
4.2. Cài đặt Helm (Package Manager cho Kubernetes)
Helm là công cụ không thể thiếu để deploy các chart phức tạp như Prometheus, Grafana, và OpenTelemetry Collector một cách chuẩn hóa.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | sudo bash
Verify kết quả:
helm version
Kết quả mong đợi: Hiển thị phiên bản Helm Client (ví dụ: v3.13.x).
4.3. Cấu hình kubeconfig cho môi trường Hybrid
Chúng ta cần cấu hình kubectl để chuyển đổi giữa On-prem và Cloud. Đây là bước quan trọng để quản lý 2 cluster riêng biệt từ một máy.
Giả định bạn đã có file config từ On-prem (đã copy ở bước 3.1) và file config từ Cloud (xuất từ Cloud Console hoặc tạo cluster mới trên Cloud).
Tạo file kubeconfig mới để merge 2 context.
mkdir -p ~/.kube
# Copy config on-prem
sudo cp /etc/kubernetes/admin.conf ~/.kube/config-onprem
# Copy config cloud (giả định bạn đã có file cloud.conf)
cp ~/cloud.conf ~/.kube/config-cloud
# Sử dụng kubectl để merge (cách đơn giản là append context)
kubectl config use-context kubernetes-onprem
kubectl config rename-context kubernetes-onprem onprem-cluster
# Sau đó thêm context cloud vào file config chính
kubectl config import-context --merge --kubeconfig=~/.kube/config-cloud --name cloud-cluster
Kiểm tra danh sách context:
kubectl config get-contexts
Kết quả mong đợi: Xuất hiện 2 context: onprem-cluster và cloud-cluster.
Chuyển đổi context:
kubectl config use-context cloud-cluster
kubectl get nodes
Kết quả mong đợi: Command kubectl get nodes trả về danh sách node của Cloud, không phải On-prem.
4.4. Cài đặt OpenTelemetry Collector CLI
Mặc dù Collector thường chạy dưới dạng DaemonSet, việc có sẵn binary để test cấu hình (config) là rất cần thiết trước khi deploy.
curl -sL https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.90.0/otelcol-contrib_0.90.0_linux_amd64.tar.gz | sudo tar -xz -C /tmp
sudo mv /tmp/otelcol-contrib /usr/local/bin/otelcol
Verify kết quả:
otelcol --version
Kết quả mong đợi: Hiển thị phiên bản OpenTelemetry Collector (ví dụ: 0.90.0).
5. Verify tổng thể môi trường đã sẵn sàng
Sau khi hoàn thành các bước trên, chúng ta cần thực hiện một bài kiểm tra tổng hợp để đảm bảo môi trường Hybrid Cloud đã sẵn sàng cho Phần 2 (Triển khai Prometheus).
Thực hiện các kiểm tra sau:
- Connectivity Test: Kiểm tra đường truyền mạng giữa On-prem và Cloud.
ping -c 4
- K8s Health Check: Đảm bảo cả 2 cluster đều hoạt động.
kubectl config use-context onprem-cluster && kubectl get nodes
kubectl config use-context cloud-cluster && kubectl get nodes
- Tool Availability: Đảm bảo các công cụ CLI chạy đúng phiên bản.
helm version && kubectl version --client && docker --version && otelcol --version
Kết quả mong đợi: Tất cả các command trên đều trả về kết quả thành công (Exit code 0) và hiển thị thông tin hợp lệ. Hệ thống đã sẵn sàng để bắt đầu triển khai nền tảng Metrics.
Điều hướng series:
Mục lục: Series: Series: Xây dựng hệ thống observability toàn diện (Logging, Metrics, Tracing) cho môi trường Hybrid Cloud với Prometheus, Grafana và OpenTelemetry
Phần 2: Triển khai nền tảng Metrics: Cài đặt Prometheus trong môi trường Hybrid »