Up and running trong 5 phút với Docker
Nếu bạn muốn test nhanh SkyWalking mà không muốn loay hoay cấu hình môi trường, Docker Compose là lựa chọn số một. Chỉ với một file config, chúng ta sẽ có ngay OAP Server (bộ não xử lý) và UI (giao diện theo dõi).
# Tạo file docker-compose.yml
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms512m -Xmx512m
ports:
- "9200:9200"
oap:
image: apache/skywalking-oap-server:9.2.0
container_name: oap
depends_on:
- elasticsearch
links:
- elasticsearch
environment:
SW_STORAGE: elasticsearch
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
ports:
- "11800:11800"
- "12800:12800"
ui:
image: apache/skywalking-ui:9.2.0
container_name: ui
depends_on:
- oap
links:
- oap
environment:
SW_OAP_ADDRESS: http://oap:12800
ports:
- "8080:8080"
Gõ lệnh docker-compose up -d và đợi khoảng 60 giây. Truy cập http://localhost:8080, nếu dashboard hiện ra là bạn đã sẵn sàng quẩy rồi đó.
SkyWalking thực chất là gì và tại sao nó lại ‘hot’?
Khi hệ thống phình to thành hàng chục Microservices, việc debug trở thành nỗi ám ảnh. Một request đi qua 20 service, lỗi ở đâu? Tại sao database phản hồi chậm?
Trước đây mình thường dùng cặp bài trùng Prometheus và Grafana. Tuy nhiên, chúng chỉ mạnh về metrics như CPU hay RAM. Để nhìn thấu được hành trình của từng request (flow), chúng ta cần Distributed Tracing. SkyWalking xử lý gọn ghẽ vấn đề này nhờ 3 thành phần chính:
- SkyWalking Agent: “Nằm vùng” trong ứng dụng để thu thập dữ liệu mà không cần bạn phải sửa một dòng code nào.
- OAP Server: Tiếp nhận dữ liệu từ Agent, thực hiện phân tích và đẩy vào database.
- SkyWalking UI: Nơi hiển thị các biểu đồ trực quan và vết (trace) của request.
Điểm cộng lớn nhất là nó hỗ trợ đa ngôn ngữ từ Java, Go, .NET cho đến Python. Thậm chí nó còn chơi tốt với cả Service Mesh như Istio.
Cài đặt SkyWalking trên Linux (Production Ready)
Để chạy thực tế, mình luôn ưu tiên cài trực tiếp trên Linux để tối ưu tài nguyên. Dưới đây là quy trình chuẩn mình thường áp dụng.
Bước 1: Chuẩn bị môi trường
OAP chạy trên JVM, nên bạn cần JDK 11 hoặc 17. Đừng quên chuẩn bị Elasticsearch. Đừng dùng H2 mặc định nếu không muốn hệ thống treo cứng khi dữ liệu bắt đầu lớn dần.
# Kiểm tra Java
java -version
# Tải bản SkyWalking phù hợp (Ví dụ bản 9.2.0)
wget https://archive.apache.org/dist/skywalking/9.2.0/apache-skywalking-apm-9.2.0.tar.gz
tar -xvzf apache-skywalking-apm-9.2.0.tar.gz
cd apache-skywalking-apm-bin
Bước 2: Kết nối Elasticsearch
Bạn mở file config/application.yml. Tìm đến mục storage và trỏ về cụm Elasticsearch của mình:
storage:
selector: ${SW_STORAGE:elasticsearch}
elasticsearch:
nameSpace: ${SW_NAMESPACE:""}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
user: ${SW_ES_USER:""}
password: ${SW_ES_PASSWORD:""}
Bước 3: Khởi động
SkyWalking có sẵn script để kích hoạt cả OAP và UI cùng lúc. Rất tiện lợi!
bin/startup.sh
# Theo dõi log để đảm bảo mọi thứ êm xuôi
tail -f logs/skywalking-oap-server.log
Lưu ý: UI chạy port 8080, còn Agent sẽ đẩy dữ liệu về port 11800 (gRPC).
Gắn Agent vào Spring Boot: Không cần chạm vào code
Đây là phần “ảo thuật” nhất. Bạn chỉ cần thêm tham số JVM khi chạy file jar là xong. Dữ liệu sẽ tự động đổ về dashboard.
java -javaagent:/opt/skywalking/agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=order-service \
-Dskywalking.collector.backend_service=10.0.0.5:11800 \
-jar order-app.jar
Trong đó, service_name là tên hiển thị trên UI, còn backend_service là IP máy cài OAP.
Kinh nghiệm thực tế: Đừng để Alert Fatigue nhấn chìm bạn
Hồi mới setup, mình mắc sai lầm là bật cảnh báo Telegram cho mọi thứ. Kết quả là điện thoại báo liên tục, khiến mình lờ luôn cả những sự cố thật sự. Đó gọi là Alert Fatigue.
Lời khuyên của mình:
- Cấu hình ngưỡng (threshold) thông minh: Thay vì dùng mặc định, hãy theo dõi hệ thống 1 tuần. Nếu latency trung bình là 200ms, hãy set cảnh báo ở mức 400ms (gấp đôi trung bình).
- Phân cấp ưu tiên: Lỗi 5xx tăng vọt thì báo ngay, còn latency tăng nhẹ thì chỉ cần gom vào báo cáo cuối ngày.
- Tối ưu file alarm-settings.yml: Hãy tận dụng file này để lọc nhiễu, tránh những cảnh báo rác không đáng có.
Tối ưu lưu trữ: Đừng để Elasticsearch ‘nuốt’ sạch ổ cứng
Dữ liệu tracing cực kỳ tốn dung lượng. Một hệ thống tầm trung có thể tạo ra vài GB log mỗi ngày. Bạn cần cấu hình TTL (Time To Live) trong file application.yml:
core:
default:
# Chỉ giữ trace trong 3 ngày, metrics trong 7 ngày
recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:3}
metricsDataTTL: ${SW_CORE_METRICS_DATA_TTL:7}
Việc này giúp Elasticsearch luôn nhẹ nhàng, tránh việc bạn phải thức trắng đêm dọn ổ cứng lúc 2 giờ sáng.
Tạm kết
Dù hoàn toàn miễn phí, SkyWalking mang lại giá trị cực lớn cho anh em DevOps và Backend. Nó giúp chúng ta tự tin hơn khi deploy code. Chỉ cần nhìn vào Topology Map, bạn sẽ biết ngay request đang bị nghẽn ở đâu. Chúc anh em cài đặt thành công và sớm làm chủ được ‘mắt thần’ này!

