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

Giới thiệu :

ELK là từ viết tắt của ba dự án mã nguồn mở: Elasticsearch, Logstash và Kibana, phục vụ cho công việc logging. Các phần mềm có chức năng lần lượt như :

  • Elasticsearch: Cơ sở dữ liệu để 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, cho phép người dùng trực quan hóa dữ liệu bằng bảng và đồ thị trong 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 một lượng dữ liệu cực lớn.

1. ELK stack

1.1 Hoạt động

Đầu tiên, log sẽ được đưa đến Logstash. (Thông qua nhiều con đường, ví dụ 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 Elasticsearch.

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

Tuy nhiên, cần thêm một thành phần nữa hoặc Data collection gọi là Beats. Điều này kiến ta gọi nó là Elastic Stack

Trong khi xử lý một lượng rất lớn dữ liệu, bạn có thể cần Kafka, RabbitMQ để tạo bộ đệm và khả năng phục hồi. Để bảo mật, có thể sử dụng nginx.

1.2 Ưu điểm

  • ELK hoạt động tốt nhất khi nhật ký từ các ứng dụng khác nhau của doanh nghiệp hội tụ thành một phiên bản ELK duy nhất
  • Nó cung cấp thông tin chi tiết đáng kinh ngạc cho trường hợp duy nhất này và cũng loại bỏ nhu cầu đăng nhập vào hàng trăm nguồn dữ liệu nhật ký khác nhau
  • Elastic cung cấp một loạt các ứng dụng khách ngôn ngữ bao gồm Ruby, Python, PHP, Perl, .NET, Java và JavaScript, v.v.
  • Sự sẵn có của các thư viện cho các ngôn ngữ lập trình và kịch bản khác nhau

1.3 Nhược điểm

  • Các thành phần khác nhau trong ngăn xếp có thể trở nên khó xử lý khi bạn chuyển sang thiết lập trên nhiều node
  • Elasticsearch không có hỗ trợ đa ngôn ngữ về xử lý dữ liệu yêu cầu và phản hồi (chỉ có thể trong JSON) không giống như trong Apache Solr, nơi có thể ở các định dạng CSV, XML và JSON.
  • Elasticsearch cũng có vấn đề với các tình huống Split-brain nhưng trong một số trường hợp hiếm hoi.

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

2.1 Elasticsearch

  • Elasticsearch là một RESTful distributed search engine. Hiểu đơn giản 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 NoSQL database (cơ sở dữ liệu không có cấu trúc).
  • Elasticsearch cho phép bạn 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 một lượng ít dữ liệu rất dễ dàng, nhưng nếu có 1 tỷ dòng dữ liệu thì thế nào? 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ự rất nhanh. Bạn có câu trả lời ngay tức thì với các dữ liệu thay đổi.
  • Bạn có thể chạy nó trên hàng trăm server với hàng petabyte dữ liệu.
  • Vận hành dễ dàng:
    • Khả năng co giãn, độ sẵn sàng cao.
    • Dự đoán trước, tin cậy
    • Đơn giản, trong suốt.
  • Elasticsearch sử dụng chuẩn RESTful APIs và JSON.

Như thế nào là một RESTful distributed search engine ?

  • Distributed and Highly Available Search Engine
    • Mỗi index là full shard với một số cấu hình của shard
    • Mỗi shard có một 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 một index
    • Hỗ trợ nhiều loại trên một 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 tuỳ vào quá trình indexing.
  • Tin cậy
  • Tìm kiếm (gần) theo thời gian thực
  • Xây dựng dựa trên Lucene
    • Mỗi shard là một 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
  • Open Source under the Apache License, version 2 (ALv2).

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 ở một dạng khó đọc, chưa có nhãn thành một 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.

2.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 điểm của Kinbana:

  • Bảng điều khiển phía trước mạnh mẽ có khả năng hiển thị thông tin được lập chỉ mục từ elastic cluster
  • Cho phép tìm kiếm thông tin đã lập chỉ mục trong thời gian thực
  • Bạn có thể tìm kiếm, xem và tương tác với dữ liệu được lưu trữ trong Elasticsearch
  • Thực hiện các truy vấn trên dữ liệu và trực quan hóa kết quả trong biểu đồ, bảng và bản đồ
  • Bảng điều khiển có thể định cấu hình để cắt và chia các bản ghi logstash trong đàn hồi
  • Có khả năng cung cấp dữ liệu lịch sử dưới dạng đồ thị, biểu đồ, v.v.
  • Bảng điều khiển thời gian thực có thể dễ dàng định cấu hình
  • Cho phép tìm kiếm thông tin đã lập chỉ mục trong thời gian thực

3. ELK stack sử dụng trong trường hợp nào ?

  • Với các hệ thống hoặc ứng dụng nhỏ, ta không cần sử dụng ELK stack làm gì, 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 không 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 một chỗ khiến chúng ta có thể dễ dàng quản lý log trên toàn hệ thống.4

4. 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ù bạn có dùng Nginx hay Apache, dùng MSSQL, MongoDB hay Redis, 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.
  • Free: Chỉ cần tải về, setup và dùng, không tốn một đồ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, bạ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 noSQL, hỗ trợ luôn Full-Text Search nên việc query rất dễ dàng và mạnh mẽ.
  • Cộng đồng mạnh => tutorial nhiều => dễ dàng tiếp cận

5. Tóm lược

ELK stack rất hữu ích để giải quyết các vấn đề liên quan đến hệ thống ghi log tập trung. Trong ELK stack, tốc độ xử lý bị giới hạn nghiêm ngặt trong khi Splunk cung cấp các quy trình chính xác và nhanh chóng. Các doanh nghiệp như Netfix, Linkedln, Tripware, Medium đều đang sử dụng ELk stack vì vậy nó thực sự là 1 giải pháp tốt để ghi và phân tích log tập trung.

Add a Comment

Your email address will not be published. Required fields are marked *