[ELK] Tổng quan về ELK – Phần 1

Tác giả: 15/03/2023

ELK là một công cụ Logging đơn giản và mạnh mẽ, nó giúp ghi lại toàn bộ những hoạt động của hệ thống.

Nhờ có logging, ta có thể tra cứu lại trạng thái của hệ thống trong quá khứ, những code nào đã được chạy, từ đó tìm ra lỗi và fix dễ dàng hơn

Tuy nhiên việc tập trung phân tích log của hệ thống là vấn đề khó khăn đối với mỗi doanh nghiệp. ELK stack là 1 công cụ mạnh mẽ giúp giải quyết việc quản lý và phân tích log tập trung

I. Technical stack là gì?

Technial Stack, hay Solution Stack là 1 tập hợp những phần mềm/công nghệ phối hợp chung với nhau, tạo thành 1 nền tảng để ứng dụng có thể hoạt động được

Một stack thông thường sẽ được cấu tạo bởi các thành phần:

  • Hệ điều hành
  • Webserver
  • Database
  • Back-end Programming Language

Mỗi thành phần trong stack đảm nhận 1 nhiệm vụ riêng biệt

II. ELK stack

ELK Stack là tập hợp 3 phần mềm mã nguồn mở đi chung với nhau, phục vụ cho công việc logging. 3 phần mềm này lần lượt là:

  • Elasticsearch: CSDL để lưu trữ, tìm kiếm và query log
  • Logstash: tiếp nhận log từ nhiều nguồn, sau đó xử lý log và ghi dữ liệu vào Elasticsearch
  • Kibana: giao diện để quản lý, thống kê log. Kibana đọc thông tin từ Elasticsearch

Điểm mạnh của ELK là khả năng thu thập, hiển thị, truy vấn theo thời gian thực. Có thể đáp ứng truy vấn 1 lượng dữ liệu cực lớn

Hình dưới đây là cơ chế hoạt động của ELK stack

Đầu tiên, log sẽ được đưa đến Logstash (thông qua nhiều con đường, VD như server gửi UDP request chứa log tới URL của Logstash, hoặc Beat đọc file log và gửi lên Logstash)

Logstash sẽ đọc những log này, thêm những thông tin như thời gian, IP, parse dữ liệu từ log (server nào, độ nghiêm trọng, nội dung log) ra, sau đó ghi xuống database là Elasticsearch

Khi muốn xem log, người dùng vào URL của Kibana sẽ đọc thông tin log trong Elasticsearch, hiển thị giao diện cho người dùng query và xử lý

III. Các thành phần trong ELK stack

1. Elasticsearch

Elasticsearch là 1 RESTful distributed search engine. Hiểu nôm na là nó cung cấp khả năng tìm kiếm phân tán qua API. Lưu trữ dữ liệu theo dạng Non-SQL database (CSDL không có cấu trúc)

Elasticsearch cho phép thực thi và kết hợp rất nhiều loại tìm kiếm: có cấu trúc, không cấu trúc, geo, metric theo cách bạn muốn

Việc tìm kiếm trong 1 lượng ít dữ liệu rất dễ dàng, nhưng nếu có 1 tỷ dòng dữ liệu thì lại là chuyện khác. Elasticsearch cho phép bạn có cái nhìn để khai thác khuynh hướng và các mẫu trong dữ liệu

Elasticsearch rất nhanh, thực sự nhanh. Câu phản hồi gần như là ngay lập tức với các dữ liệu thay đổi

Có thể chạy ổn trên hàng trăm server với lượng dữ liệu khổng lồ

Vận hành dễ dàng:

  • Khả năng co giãn, độ sẵn sàng cao
  • Dự đoán trước, đáng tin cậy
  • Đơn giản, trong suốt

Elasticsearch sử dụng RESTful APIs và JSON

Như thế nào là 1 RESTful distributed search engine

  • Distributed and Highly Available Search Engine:
    • Mỗi Index là full shard với 1 số cấu hình của shard
    • Mỗi shard có 1 hoặc nhiều replica
    • Xử lý đọc và tìm kiếm trên mỗi replica shard
  • Multi Tenant with Multi Types:
    • Hỗ trợ nhiều hơn 1 index
    • Hỗ trợ nhiều loại trên 1 index
    • Cấu hình index level (số shard, index storage)
  • Various set of APIs:
    • HTTP RESTful API
    • Native Java API
    • Tất cả API thực hiện thao tác node tự động mỗi khi định tuyến lại
  • Document oriented:
    • Không cần định nghĩa trước schema
    • Schema có thể được định nghĩa cho mỗi loại tùy vào quá trình indexing
  • Tin cậy
  • Tìm kiếm theo thời gian thực
  • Xây dựng dựa trên Lucene
    • Mỗi shard là 1 Lucene index đầy đủ chức năng
    • Tất cả các ưu điểm của Lucene được khai phá thông qua cấu hình/plugin đơn giản
  • Hoạt động nhất quán
  • Mã nguồn mở dưới Apache License version 2

2. Logstash

  • Logstash có chức năng phân tích cú pháp của các dòng dữ liệu. Việc phân tích làm cho dữ liệu đầu vào ở dạng khó đọc, chưa có nhãn thành 1 dạng dữ liệu có cấu trúc, được gán nhãn
  • Khi cấu hình Logstash luôn có 3 phần: Input, Filter, Output
  • Bình thường khi làm việc với Logstash, sẽ phải làm việc với Filter nhiều nhất. Filter hiện tại sử dụng Grok để phân tích dữ liệu

3. Kibana

  • Kibana được phát triển riêng cho ứng dụng ELK, thực hiện chuyển đổi các truy vấn của người dùng thành câu truy vấn mà Elasticsearch có thể thực hiện được. Kết quả hiển thị bằng nhiều cách: theo các dạng biểu đồ

Các trường hợp sử dụng ELK stack

Với các hệ thống hoặc ứng dụng nhỏ, ta không cần ELK stack làm gì cả, cứ dùng thư viện ghi log đi kèm với ngôn ngữ, sau đó ghi log ra file rồi đọc bình thường

Tuy nhiên với những hệ thống lớn nhiều người dùng, có nhiều service phân tán (microservice), có nhiều server chạy cùng lúc… thì việc ghi log xuống file ko còn hiệu quả nữa. Lúc này số lượng máy chủ trên hệ thống là lớn và nhiều, do đó chúng ta không thể dùng cách thủ công là remote vào từng máy rồi đọc log của từng server được, lúc này ELK stack sẽ giải quyết vấn đề đó. ELK stack sẽ ghi log tập trung vào 1 chỗ khiến chúng ta có thể dễ dàng quản lý log trên toàn hệ thống

Vì sao nên sử dụng ELK stack?

Đọc log từ nhiều nguồn: Logstash có thể đọc được log từ rất nhiều nguồn, từ log file cho đến log database cho đến UDP hay REST request

Dễ tích hợp: dù có là Nginx hay Apache, MSSQL, MongoDB hay Redis thì Logstash đều có thể đọc hiểu và xử lý log của bạn nên việc tích hợp rất dễ dàng

Hoàn toàn free: chỉ cần tải về, setup và dùng, ko tốn 1 đồng nào cả. Công ty tạo ra ELK stack kiếm tiền bằng các dịch vụ cloud hoặc các sản phẩm premium phụ thêm

Khả năng scale tốt: Logstash và Elasticsearch chạy trên nhiều node nên hệ thống ELK cực kì dễ scale. Khi có thêm service, thêm người dùng, muốn log nhiều hơn, chỉ việc thêm node cho Logstash và Elasticsearch là xong

Search và filter mạnh mẽ: Elasticsearch cho phép lưu trữ thông tin kiểu Non-SQL, hỗ trợ luôn full-text search nên việc query rất dễ dàng và mạnh mẽ

Cộng đồng đông đảo, tutorial nhiều.

Hãy cùng đón chờ các bài viết tiếp theo của Nhân Hòa về ELK Stack tại Wiki Nhân Hòa.

Chúc các bạn luôn may mắn và thành công trong công việc!

Trả lời