ELK Stack ra đời nhằm đáp ứng nhu cầu ngày càng cấp thiết trong việc quản lý và phân tích log hiệu quả. Khi hệ thống ngày càng phức tạp và lượng dữ liệu tăng nhanh chóng, các doanh nghiệp cần một giải pháp mạnh mẽ để kiểm soát và hiểu rõ hơn về dữ liệu của mình.
Trong bài viết này mình sẽ giới thiệu với các bạn về ELK, bộ công cụ không thể thiếu với các bạn DevOps, đi sâu vào những điểm mạnh, điểm yếu của ELK và PLG, giúp bạn xác định giải pháp phù hợp cho nhu cầu giám sát và quản lý log của mình.
1. ELK là gì?
ELK (ELK Stack) là bộ công cụ bao gồm ba thành phần chính: Elasticsearch, Logstash và Kibana, thường được sử dụng cùng với nhau để thu thập, xử lý, lưu trữ, tìm kiếm và trực quan hóa dữ liệu một cách hiệu quả.
- Elasticsearch: Công cụ tìm kiếm và phân tích phân tán (distributed), mã nguồn mở, dùng để lưu trữ và tìm kiếm dữ liệu.
- Logstash: Công cụ xử lý và truyền tải dữ liệu, có nhiệm vụ thu thập dữ liệu từ nhiều nguồn, chuyển đổi chúng thành định dạng chuẩn và gửi đến Elasticsearch.
- Kibana: Công cụ trực quan hóa dữ liệu, cho phép người dùng tạo biểu đồ, dashboard và phân tích dữ liệu một cách trực quan từ dữ liệu được lưu trữ trong Elasticsearch.
Bây giờ hãy cùng mình đi vào chi tiết từng công cụ trong bộ ELK Stack này nha
1.1 Elasticsearch là gì?
Elasticsearch là một công cụ mã nguồn mở có khả năng tìm kiếm toàn văn (full-text search) và phân tích dữ liệu với hiệu suất cao, được xây dựng trên nền tảng Apache Lucene. Elasticsearch giúp chúng ta lưu trữ, tìm kiếm, và phân tích dữ liệu với quy mô lớn theo thời gian thực, truy xuất thông tin nhanh chóng và hiệu quả.
Elasticsearch nổi bật nhờ vào kiến trúc phân tán của mình, nghĩa là nó có thể tự động phân phối dữ liệu và phân chia công việc cho nhiều máy chủ (node). Điều này giúp hệ thống có khả năng xử lý một lượng lớn dữ liệu và mở rộng dễ dàng bằng cách thêm vào các node mới.
Mỗi cụm (cluster) Elasticsearch tự động chia nhỏ dữ liệu thành các mảnh (shard) và sao lưu (replication), giúp hệ thống chịu lỗi tốt hơn và duy trì hoạt động ngay cả khi một số node trong số chúng bị lỗi. Elasticsearch hỗ trợ nhiều loại tìm kiếm khác nhau như Full-text search, Structured search, Geospatial search.
Tuy nhiên, nếu có sự cố về kết nối mạng giữa các node, có thể xảy ra tình huống nhiều node cùng nghĩ rằng chúng là master node. Tình huống này được gọi là split-brain và có thể làm mất tính toàn vẹn dữ liệu cũng như gây ảnh hưởng đến hiệu suất. Để tránh vấn đề này, Elasticsearch thường được cấu hình thêm các biện pháp bảo vệ nhằm đảm bảo chỉ một node duy nhất đóng vai trò master trong một cụm.
1.2 Logstash
Logstash là một công cụ giúp thu thập, xử lý và chuyển tiếp dữ liệu từ nhiều nguồn khác nhau. Đơn giản hơn, bạn có thể hình dung Logstash giống như một "trạm trung chuyển" dữ liệu: nhận dữ liệu từ nhiều nguồn (source), biến đổi chúng theo yêu cầu, và gửi đến nơi lưu trữ (destination) như Elasticsearch, Amazon S3, MongoDB, ...
Logstash hoạt động theo ba giai đoạn chính:
- Input (Đầu vào): Kết nối với các nguồn dữ liệu, như file log, dịch vụ giám sát hệ thống, hoặc messaging system như Kafka.
- Filter (Bộ lọc): Chuyển đổi dữ liệu, sử dụng các bộ lọc như
grok
,json
, vàmutate
để chuẩn hóa và tạo cấu trúc dữ liệu. - Output (Đầu ra): Gửi dữ liệu đã qua xử lý tới các đích lưu trữ, phổ biến nhất là Elasticsearch, nhưng cũng hỗ trợ lưu trữ trên Amazon S3, MongoDB, và các dịch vụ khác.
Ví dụ cụ thể:
// Cấu hình Logstash để lấy dữ liệu từ file log của ứng dụng
input {
file {
path => "/var/logs/app/application.log"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
// Logstash sử dụng các bộ lọc để chuyển đổi dữ liệu thành dạng có cấu trúc.
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{WORD:action} user_id=%{NUMBER:user_id} session_id=%{DATA:session_id}" }
}
date {
match => [ "timestamp", "ISO8601" ]
target => "@timestamp"
}
mutate {
remove_field => ["message"]
}
}
// Dữ liệu đã qua xử lý sẽ được gửi tới Elasticsearch để lưu trữ và phân tích.
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "app-logs-%{+YYYY.MM.dd}"
}
}
Logstash hỗ trợ nhiều bộ lọc như grok, json, mutate, v.v. Thông qua việc sử dụng các bộ lọc, Logstash có thể phân tích và chuyển đổi dữ liệu thành các định dạng có cấu trúc để chúng ta dễ dàng truy vấn hơn.
1.3 Kibana là gì?
Kibana là một công cụ trực quan hóa dữ liệu mã nguồn mở, hoạt động như giao diện chính cho Elasticsearch. Kibana cho phép người dùng dễ dàng tạo biểu đồ, bảng và các dashboard để phân tích dữ liệu được lưu trữ trong Elasticsearch. Thông qua Kibana, người dùng có thể thực hiện các tìm kiếm và phân tích theo thời gian thực trên dữ liệu, giúp việc giám sát, báo cáo và quản lý dữ liệu trở nên hiệu quả hơn.
2. So sánh hiệu suất giữa ELK và PGL
Mình nghĩ khi bắt đầu tìm kiếm một giải pháp phục vụ cho nhu cầu của công ty hay cá nhân, bạn sẽ luôn đặt ra câu hỏi, liệu giải pháp này có phù hợp với mình hay không? Tại sao mình lại nên chọn bộ giải pháp này thay vì giải pháp khác? Vậy hãy cùng mình đi tìm câu trả lời nhé.
Tiêu chí | ELK Stack | PLG Stack |
---|---|---|
Thành phần | Elasticsearch, Logstash, Kibana | Promtail, Loki, Grafana |
Chức năng chính | Thu thập, lưu trữ và phân tích log, có khả năng tìm kiếm toàn văn bản | Thu thập và lưu trữ log, lập chỉ mục metadata (label), tích hợp với Grafana để hiển thị |
Khả năng mở rộng | Có thể mở rộng ngang, nhưng yêu cầu tài nguyên lớn cho Elasticsearch | Mở rộng ngang hiệu quả, yêu cầu tài nguyên ít hơn do chỉ lập chỉ mục metadata |
Ngôn ngữ truy vấn | Query DSL của Elasticsearch, có khả năng tìm kiếm toàn văn bản | LogQL của Loki, tập trung vào lọc theo label và thời gian, không hỗ trợ tìm kiếm toàn văn bản |
Chi phí | Cao hơn do yêu cầu tài nguyên lớn và lưu trữ dữ liệu đầy đủ | Thấp hơn do chỉ lập chỉ mục metadata và sử dụng lưu trữ đối tượng như S3 |
Tính năng bổ sung | Hỗ trợ phân tích dữ liệu nâng cao, machine learning và alert | Tích hợp tốt với hệ sinh thái Prometheus, phù hợp cho giám sát và quan sát hệ thống |
Độ phức tạp triển khai | Phức tạp hơn do yêu cầu cấu hình và quản lý nhiều thành phần | Đơn giản hơn, đặc biệt trong môi trường Kubernetes |
Use case phù hợp | 1. Phân tích giao dịch tài chính. 2. Tìm kiếm log bảo mật nhạy cảm. 3. Lưu trữ log dài hạn theo quy định pháp lý. 4. Xử lý dữ liệu bán cấu trúc. 5. Phân tích hành vi khách hàng thương mại điện tử. |
1. Giám sát log container trong Kubernetes. 2. Theo dõi log hệ thống IoT. 3. Giám sát pipeline CI/CD. 4. Theo dõi hiệu suất website. 5. Giám sát cơ sở hạ tầng cloud. |
Chọn PLG nếu bạn ưu tiên mục tiêu giám sát theo thời gian thực với chi phí thấp, cần theo dõi log từ hệ thống phân tán như Kubernetes, không cần tìm kiếm toàn văn bản phức tạp.
Hình bên dưới có thấy mức tiêu tốn tài nguyên để ingest dữ liệu giữa ELK và PLG, các bạn có tham khảo để dự trù hạ tầng cho phù hợp khi lựa chọn giải pháp, đọc full bài nghiên cứu so sánh 2 stack này tại đây.
Bài nghiên cứu này không đề cập đến dung lượng lưu trữ giữa 2 stack, các bạn cũng có thể tham khảo thêm thêm một số bài thảo luận trên reddit, có nhiều Developer đã lấy dẫn chứng rằng khi chuyển từ ELK sang PLG họ đã có thể tiết kiệm dung lượng lưu trữ gấp 6-12 lần, rõ ràng là index tất cả các trường dữ liệu tiêu tốn rất nhiều tài nguyên nên nếu bạn không có ý định phân tích log thì nên dùng PLG.
3. Kết luận
Khi lựa chọn giữa ELK và PLG, các tổ chức cần cân nhắc kỹ lưỡng yêu cầu về hiệu suất, chi phí, và độ phức tạp trong việc triển khai và bảo trì hệ thống logging. Sử dụng đúng công cụ không chỉ giúp tối ưu hóa tài nguyên mà còn tăng cường hiệu quả giám sát và bảo trì hệ thống, đảm bảo rằng mọi log đều được xử lý chính xác và kịp thời.
Các bài viết liên quan:
Bài viết liên quan
Vercel là gì? Hướng dẫn deploy dự án Next.js bằng Vercel
Dec 07, 2024 • 14 min read
Grafana Loki là gì? So sánh Loki và Elasticsearch
Nov 16, 2024 • 6 min read
Webhook là gì? So sánh Webhook và API
Nov 15, 2024 • 8 min read
Two-Factor Authentication (2FA) là gì? Vì sao chỉ Mật khẩu thôi là chưa đủ?
Nov 13, 2024 • 7 min read
Docker Best Practices: Tối ưu Dung lượng Docker Image
Oct 30, 2024 • 8 min read
SQL Injection là gì? Những cách phòng ngừa SQL Injection
Oct 25, 2024 • 10 min read