Apache SkyWalking: Công cụ APM mã nguồn mở hiện đại

Nếu bạn đang gặp khó khăn trong việc giám sát hiệu suất ứng dụng trong hệ thống phân tán, hãy tận dụng công cụ Apache SkyWalking để nắm bắt và tối ưu hóa hoạt động của hệ thống một cách trực quan và hiệu quả hơn.

Skywalking poster

Giới thiệu

Hiện nay, khi việc phát triển phần mềm ngày càng phức tạp thì việc giám sát hiệu suất ứng dụng (APM - Application Performance Monitoring) cũng trở nên quan trọng hơn, đặc biệt là đối với các hệ thống có kiến trúc phân tán. Việc giám sát hệ thống một cách đầy đủ giúp cho đội vận hành và đội phát triển có thể đảm bảo năng suất cũng như khả năng đáp ứng của hệ thống phần mềm và phần cứng, đồng thời sớm phát hiện và xử lý các hành vi bất thường một cách hiệu quả.

Trên thị trường hiện nay đang có nhiều công cụ APM như Sentry.io, New Relic, DataDog,... Tuy nhiên, đa phần đều là các dịch vụ có trả phí. Trong bài viết này, chúng ta sẽ tìm hiểu về Apache SkyWalking, một hệ thống APM mã nguồn mở hiện đại của Apache, được thiết kế chuyên dùng cho các hệ thống đám mây riêng và hệ thống phân tán dựa trên nền tảng ảo hoá (container-based).

SkyWalking bắt đầu được phát triển từ năm 2015 bởi nhóm của Wu Sheng (吴晟 - Ngô Thành) và đã trở thành dự án cấp cao nhất của cộng đồng Apache từ năm 2019. Apache SkyWalking có phiên bản mới nhất là 9.5.0 và được viết chủ yếu bằng ngôn ngữ Java. SkyWalking hiện đang được hàng trăm công ty lớn nhỏ sử dụng và hầu hết các công ty này đều đến từ Trung Quốc, trong đó có thể kể đến Alibaba Cloud, Baidu, Huawei, Tencent, Tuya, PingAn,...

Kiến trúc của SkyWalking

Thành phần kiến trúc của SkyWalking

Thành phần kiến trúc của SkyWalking

Apache SkyWalking được chia thành 4 thành phần dựa trên chức năng như sau: Probe, Platform backend, Storage và UI.

  • Probe: Có nhiệm vụ thu thập dữ liệu từ xa, bao gồm các số liệu, dấu vết, nhật ký và sự kiện ở nhiều định dạng, nhiều nguồn khác nhau như: Skywalking, Zipkin, OpenTelemetry, Prometheus, Zabbix,... Máy dò có thể lấy dữ liệu thông qua cơ chế tác tử (agent) hoặc nhúng trực tiếp vào mã nguồn thông qua SDK.
  • Platform Backend: Cho phép dữ liệu được tổng hợp, phân tích và truyền liên tục bao gồm các thông tin về dấu vết, số liệu, nhật ký và sự kiện. Ngoài ra, nó còn có thể đóng vai trò tổng hợp hoặc/và nhận dữ liệu.
  • Storage: Là nơi lưu trữ dữ liệu của SkyWalking bằng cách tích hợp với các hệ thống dữ liệu có sẵn như ElasticSearch, H2, MySQL, TiDB, BanyanDB,... hoặc một hệ thống dữ liệu tự xây dựng riêng.
  • UI: Hiển thị thông tin được thu thập bởi SkyWalking cho người dùng.

Lợi ích của SkyWalking

Với vai trò là một hệ thống APM mã nguồn mở hiện đại, SkyWalking có nhiều ưu điểm như:

  • Được phát hành dưới giấy phép Apache License 2.0, đồng nghĩa với việc người dùng có thể tự do thay đổi, chỉnh sửa SkyWalking tuỳ theo nhu cầu sử dụng thực tế.
  • kiến trúc mở, cho phép dễ dàng tích hợp với các hệ thống khác thông qua cơ chế plugin cũng như hỗ trợ nhiều ngôn ngữ lập trình phổ biến như Java, .NET, Python, NodeJS, Golang,...
  • Tích hợp sẵn nhiều tính năng hỗ trợ cho một hệ thống APM như log monitoring, distributed tracing và metrics dashboard.

Tuy nhiên, ở SkyWalking vẫn tồn tại một số hạn chế như:

  • Cộng đồng sử dụng chủ yếu ở Trung Quốc nên tài liệu tiếng Anh còn ít và chậm cập nhật.
  • Thiết lập phức tạp, phần UI tương đối khó sử dụng.
  • Chưa có bản trả tiền dành cho doanh nghiệp.

Bắt đầu sử dụng SkyWalking

Trong phần này ta sẽ tìm hiều kỹ hơn cách sử dụng SkyWalking thông qua một ứng dụng thực tế. Phần này sẽ bao gồm hai bước: Cài đặt SkyWalking và Xây dựng một dịch vụ web bằng Golang để truyền dữ liệu vào SkyWalking thông qua cơ chế tác tử.

Cài đặt SkyWalking

  • Yêu cầu: Môi trường lập trình đã thiết lập Docker
  • Bước 1: Khởi tạo hệ nền và hệ UI với Docker
    docker network create Skywalking
    docker run -d -p 12800:12800 -p 11800:11800 --name oap --restart always --net Skywalking apache/Skywalking-oap-server:9.5.0
    docker run -d -p 8080:8080 --name oap-ui --restart always --net Skywalking -e SW_OAP_ADDRESS=http://oap:12800 -e SW_ZIPKIN_ADDRESS=http://oap:9412 apache/Skywalking-ui:9.5.0
  • Bước 2: Kiểm tra lại bằng cách dùng trình duyệt truy cập vào địa chỉ http://localhost:8080

Giao diện mặc định của SkyWalking

Giao diện mặc định của SkyWalking

Tuy nhiên, trang này hiện đang trống rỗng, chưa có thông tin gì hữu ích. Vậy nên ở bước kế tiếp, ta sẽ giả lập một dịch vụ web bằng Golang và truyền dữ liệu đo đạc về SkyWalking.

Tạo dịch vụ web

  • Yêu cầu: Môi trường lập trình có cài đặt Golang từ 1.18 trở lên

  • Bước 1: Thiết lập dự án Golang như sau: go mod init và thêm file main.go vào dự án

        package main
    
        import (
            "net/http"
    
            // This is an important step. DON'T MISS IT.
            _ "github.com/apache/Skywalking-go"
        )
    
        func main() {
            http.HandleFunc("/hello", func(writer http.ResponseWriter, request *http.Request) {
                writer.Write([]byte("Hello World"))
            })
            err := http.ListenAndServe(":8000", nil)
            if err != nil {
                panic(err)
            }
        }
    

    Các bạn chú ý không bỏ dòng code import _ "github.com/apache/Skywalking-go" và chạy lệnh go get github.com/apache/Skywalking-go để cài gói Skywalking-go.

  • Bước 2: Tải về và cài đặt gói Golang tại đây.

  • Bước 3: Biên dịch ứng dụng bằng lệnh go build với tham số -toolexec="/path/to/go-agent" -a và khởi chạy ứng dụng:

        go build -toolexec="/path/to/go-agent" -a -o agent-demo .
        ./agent-demo
    
  • Bước 4: Kiểm tra lại bằng cách gởi một yêu cầu đến dịch vụ agent-demo vừa tạo

  curl http://localhost:8000/hello
  • Bước 5: Vào trang SkyWalking bạn sẽ thấy dịch vụ vừa tạo như sau:

Thông tin agent trên SkyWalking

Thông tin agent trên SkyWalking

Bên cạnh đó, ta cũng có thể xem được thông tin chi tiết:

Thông tin chi tiết của agent

Thông tin chi tiết của agent

Thông tin thêm

Do việc thiết lập hệ thống khá phức tạp nên cộng đồng SkyWalking đã xây dựng sẵn một trang web mẫu để các bạn có thể tìm hiểu thêm các chức năng của SkyWalking. Tham khảo tại đây.

Kết luận

Apache SkyWalking là một hệ thống APM mã nguồn mở mạnh mẽ với nhiều tính năng phong phú cho phép các nhóm vận hành và phát triển có thể theo dõi, giám sát và quản lý các hệ thống phần mềm một cách trực quan. Nền tảng này cũng đang được cộng đồng phát triển quan tâm, hỗ trợ nhiệt tình với hơn 7,000 lượt cam kết và hơn 22,000 lượt đánh giá sao trên trang GitHub. Tuy nhiên, do chỉ được hỗ trợ bởi cộng đồng nên để sử dụng SkyWalking thì ta cũng cần phải phân tích kỹ nhu cầu của dự án cũng như khả năng thích nghi của các nhóm vận hành trước khi áp dụng vào một dự án thực tế.

Tài liệu tham khảo

Trang chủ của dự án SkyWalking

Trang tài liệu hướng dẫn SkyWalking

Trang web mẫu SkyWalking

Trang mã nguồn SkyWalking tại GitHub

Atekco - Home for Authentic Technical Consultants