Part 2: Các thành phần chính của ELK Stack

LAMP Jan 12, 2021

Trong part 2 này, mình sẽ trình bày cụ thể về các thành phần chính của ELK lần lượt là Elasticsearch, Logstash, Kibana, Beats.

1. Elasticsearch

Đầu tiên cần hiểu Elaticsearch là một công cụ tìm kiếm nguồn mở phân tán dựa trên Apache Lucene và được phát hành theo giấy phép Apache 2.0 (có nghĩa là nó có thể được tải xuống, sử dụng và sửa đổi miễn phí). Nó cung cấp khả năng mở rộng theo chiều ngang, độ tin cậy và khả năng đa nhiệm cho tìm kiếm thời gian thực. Các tính năng tìm kiếm thông tin có sẵn thông qua JSON qua API RESTful. Các khả năng tìm kiếm được hỗ trợ bởi Apache Lucene Engine, không cho phép nó lập chỉ mục động dữ liệu mà không cần biết cấu trúc trước. Elaticsearch có thể đạt được các phản hồi tìm kiếm nhanh vì nó sử dụng lập chỉ mục để tìm kiếm trên các văn bản. Nhiều công ty lớn sử dụng Elasticsearch như GitHub, SoundCloud, NetFlix, LinkedIn,.... và các công ty khác. Các ứng dụng chính của Elasticsearch như:

  • Có thể mở rộng và có tính sẵn sàng cao
  • Nó cung cấp khả năng tìm kiếm và phân tích thời gian thực
  • Nó cung cấp API RESTful để hoạt động để tra cứu, và tính năng khác nhau, chẳng hạn như tìm kiếm đa ngôn ngữ, định vị địa lý, tự động hoàn thành, đề xuất theo ý nghĩa theo ngữ cảnh và đoạn trích kết quả.

Các khái niệm cơ bản của Elasticsearch

Document

Là đơn vị nhỏ nhất để lưu trữ dữ liệu trong Elasticsearch. Đây là một đơn vị lưu trữ thông tin cơ bản trong Elasticsearch, là một JSON object đối với một số dữ liệu.

Index

Trong Elasticsearch có một cấu trúc tìm kiếm gọi là inverted index, nó được thiết kế để cho phép tìm kiếm full-text search. Cách thức khá đơn giản, các văn bản được tách ra thành từng từ có nghĩa sau đó sẽ được map xem thuộc văn bản nào và khi search sẽ ra kết quả cụ thể.

  • Có 2 kiểu đánh index và forward index và inverted index. Bản chất của inverted index là đánh theo keyword: words -> pages còn forward đánh theo nội dung page -> words.
elk-10

Chúng ta có thể thấy việc đánh theo keyword thì việc tìm kiếm sẽ nhanh hơn việc chúng ta phải tìm kiếm theo từng page. Elasticsearch sử dụng Apache lucence để quản lý và tạo inverted index.

Shard
  • Shard à một đối tượng của Lucence, là tập hợp con của một Index. Một index có thể được lưu trên nhiều shard.
  • Một node bao gồm nhiều Shard, shard chính là đối tượng nhỏ nhât hoạt động ở mức thấp nhất, đóng vai trò lưu trữ dữ liệu.
  • Chúng ta sẽ không bao giờ làm việc với các shard vì Elasticsearch sẽ hỗ trợ chúng ta toàn bộ việc giao tiếp cũng như tự động thay đổi các Shard khi cần thiết.
  • Elasticsearch cung cấp 2 cơ chế của shard đó là primary shard và replica shard.
  • Primary shard sẽ lưu trữ dữ liệu và đánh Index, sau khi đánh dữ liệu xong sẽ được vận chuyển đến các replica shard, mặc định của Elasticsearch mỗi index sẽ có 5 Primary shard thì sẽ đi kèm với 1 Replica shard.
  • Replica shard là nơi lưu trữ dữ liệu nhân bản của Elasticsearch, đóng vai trò đảm bảo tính toàn vẹn dữ liệu khi Primary shard xảy ra vấn đề, ngoài ra nó còn giúp tăng tốc độ tìm kiếm vì chúng ta có thể cấu hình lượng Replica shard nhiều hơn cấu hình mặc định của Elasticsearch.

Node
  • Là trung tâm hoạt động của Elasticsearch, là nơi lưu trữ dữ liệu, tham gia thực hiện đánh index của cluster cũng như thực hiện các thao tác tìm kiếm.
  • Mỗi node được xác định bằng một tên riêng và không được phép trùng lặp.

Cluster
elk-11
  • Tập hợp các node hoạt động cùng với nhau, chia sẻ với nhau cùng một thuộc tính cluster name. Chính vì thế cluster sẽ được xác định bằng một tên riêng và không được phép trùng lặp. Việc tên của các cluster elasticsearch mà trùng nhai sẽ gây ra lỗi cho các node vì vậy khi cấu hình chúng ta cần phải chú ý.
  • Mỗi cluster có một node chính gọi là master, node master được lựa chọn một cách tự động và có thể thay đổi nếu như có sự cố xảy ra. Một cluster có thể bao gồm nhiều nodes. Các nodes có thể hoạt động trên cùng một server. Tuy nhiên trên thực tế, một cluster sẽ gồm nhiều nodes hoạt động trên các server khác nhau để đảm bảo nếu một server gặp sự cố thì các node trên các server khác có thể hoạt động đầy đủ chức năng. Các node có thể tìm thấy nhau để hoạt động trên cùng 1 clustẻ thông qua giao thức Unicast.

Chức năng chính của Cluster là quyết định xem shard nào được phân bổ cho node nào và khi nào thì di chuyển các Cluster để cần bằng lại Cluster.

elk-12

2. Logtash

Logstash là một đường ống dữ liệu giúp thu thập, phân tích, xử lý log với một lượng lớn dữ liệu và sự kiện có cấu trúc và không cấu trúc được tạo ra trên các hệ thống khác nhau. Nó cung cấp các plugin để kết nối với nhiều loại nguồn và nền tảng đầu vào khác nhau và được thiết kế để xử lý hiệu quả các bản ghi, sự kiện và nguồn dữ liệu phi cấu trúc để phân phối thành nhiều loại đầu ra với việc sử dụng các plugin đầu ra của nó, cụ thể là tệp, đầu ra (như đầu ra trên bảng điều khiển đang chạy Logstash) hoặc Elaticsearch. Mỗi dòng log của logstash được lưu trữ đưới dạng json.

Nó có các tính năng sau:

  • Xử lý dữ liệu tập trung: Logstash giúp xây dựng một đường ống dữ liệu có thể tập trung xử lý dữ liệu. Với việc sử dụng nhiều plugin cho đầu vào và đầu ra, nó có thể chuyển đổi rất nhiều nguồn đầu vào khác nhau thành một định dạng chung.
  • Hỗ trợ cho các định dạng log tùy chỉnh: Log được viết bởi các ứng dụng khác nhau thường có các định dạng cụ thể dành riêng cho ứng dụng. Logstash giúp phân tích cú pháp và xử lý các định dạng tùy chỉnh trên quy mô lớn. Nó cung cấp hỗ trợ để viết các bộ lọc của riêng bạn cho mã thông báo và cũng cung cấp các bộ lọc sẵn sàng sử dụng.
  • Phát triển plugin: Các plugin tùy chỉnh có thể được phát triển và xuất bản, và có rất nhiều plugin được phát triển tùy chỉnh đã có sẵn.

Logstash giữ nhiệm vụ rất quan trọng bao gồm 3 giai đoạn trong chuỗi xử lý ELK pipeline, tương ứng với 3 module:

INPUT: tiếp nhận/thu thập dữ liệu logs event ở dạng thô từ các nguồn khác nhau như :

  • File : đọc từ một tệp trên hệ thống, giống như lệnh UNIX tail -0F
  • Syslog : nghe trên cổng 514 nổi tiếng cho các thông báo nhật ký hệ thống và phân tích cú pháp theo định dạng RFC3164.
  • Redis : đọc từ máy chủ redis, sử dụng cả kênh redis và danh sách redis. Redis thường được sử dụng như một “broker” trong một mô hình Logstash tập trung, có hàng đợi các sự kiện Logstash từ các “shippers” từ xa.
  • Beats : xử lý các sự kiện do beats gửi.

FILTER: sau khi tiếp nhận dữ liệu sẽ tiến hành thao tác dữ liệu logs event (như thêm, xóa,.. nội dung log) theo cấu hình của quản trị viên để xây dựng lại cấu trúc dữ liệu log event theo ý của mình.

Một số bộ lọc hữu ích bao gồm :

  • Grok : phân tích cú pháp và cấu trúc văn bản tùy ý - chỉnh sửa định dạng log từ client gửi về. Grok hiện là cách tốt nhất trong Logstash để phân tích cú pháp dữ liệu nhật ký không được cấu trúc thành một thứ có cấu trúc và có thể truy vấn được. Với 120 mẫu được tích hợp sẵn trong Logstash, nhiều khả năng chúng ta sẽ tìm thấy một mẫu đáp ứng nhu cầu của mình.
  • Mutate : thực hiện các phép biến đổi chung trên các trường sự kiện. Bạn có thể đổi tên, xóa, thay thế và sửa đổi các trường trong sự kiện của mình.
  • Drop : xóa hoàn toàn sự kiện, ví dụ: debug events.
  • Clone : tạo bản sao của sự kiện, có thể thêm hoặc xóa các trường.
  • Geoip : thêm thông tin về vị trí địa lý của địa chỉ IP (cũng hiển thị biểu đồ tuyệt vời trong Kibana).

OUTPUT: sau cùng sẽ thực hiện chuyển tiếp dữ liệu logs event về các dịch vụ khác như Elasticsearch tiếp nhận và lưu trữ log.

Một số đầu ra thường được sử dụng bao gồm :

  • Elasticsearch : gửi dữ liệu sự kiện tới Elasticsearch. Nếu chúng ta đang có kế hoạch để lưu dữ liệu trong một định dạng hiệu quả và dễ dàng truy vấn thì Elasticsearch là con đường để đi.
  • File : ghi dữ liệu sự kiện vào file trên bộ nhớ.
  • Graphite : gửi dữ liệu sự kiện tới graphite, một công cụ nguồn mở phổ biến để lưu trữ và vẽ đồ thị số liệu.
  • Statsd : gửi dữ liệu sự kiện đến statsd, một dịch vụ lắng nghe và thống kê.

3. Kibana

Kibana là một nền tảng trực quan hóa dữ liệu được cấp phép Apache 2.0, giúp trực quan hóa mọi loại dữ liệu có cấu trúc và không cấu trúc được lưu trữ trong các chỉ mục của Elaticsearch. Kibana hoàn toàn được viết bằng HTML và JavaScript. Nó sử dụng các khả năng tìm kiếm và lập chỉ mục mạnh mẽ của Elaticsearch được thể hiện thông qua API RESTful của nó để hiển thị đồ họa mạnh mẽ cho người dùng cuối. Từ trí tuệ kinh doanh cơ bản đến gỡ lỗi thời gian thực, Kibana đóng vai trò của mình thông qua việc hiển thị dữ liệu thông qua biểu đồ hình tròn,  bảng, v.v.

Kibana giúp dễ dàng hiểu được khối lượng dữ liệu lớn. Giao diện dựa trên trình duyệt đơn giản của nó cho phép bạn nhanh chóng tạo và chia sẻ bảng điều khiển động hiển thị các thay đổi đối với các truy vấn Elaticsearch trong thời gian thực.

Một số chức năng của Kibana:

  • Nó cung cấp một nền tảng trực quan hóa cho doanh nghiệp
  • Nó cung cấp phân tích thời gian thực, tóm tắt, biểu đồ và gỡ lỗi khả năng.
  • Nó cung cấp một giao diện trực quan và thân thiện với người dùng, có thể tùy chỉnh thông qua một số tính năng kéo thả.
  • Nó cho phép lưu bảng điều khiển và quản lý nhiều hơn một bảng điều khiển. Bảng điều khiển có thể dễ dàng chia sẻ và nhúng trong các hệ thống khác nhau.
  • Nó cho phép chia sẻ ảnh chụp nhanh của log.

4. Beats

Beats là một tập hợp các công cụ thu thập thông tin chuyên dụng, được biết đến như là các Shipper (người vận chuyển) giúp thu thập và gửi dữ liệu từ Client tới máy chủ ELK. Ngoài ra, các beat này có thể được gửi thẳng trực tiếp lên Elasticsearch do bản thân các công cụ đã được chuẩn hóa sẵn, việc kết nối các beat đến logstash thường mang ý nghĩa bảo mật đối với các hệ thống tầm lớn khi họ muốn bảo vệ dịch vụ elasticsearch.


Trong Beats có rất nhiều các Beat “con”, cụ thể:

- Filebeat: đây là công cụ chuyên dùng để thu thập log và gửi log về cho hệ thống ELK. Filebeat có một điểm mạnh mà cách thu thập thông thường không thể có được, chính là khả năng theo dõi tình trạng của ELK và điều chỉnh lượng log đẩy về. Nếu hệ thống ELK đang gặp tình trạng quá tải về khối lượng cần xử lý, Filebeat sẽ quan sát và giảm lượng log đổ về bằng cách sử dụng hàng chờ.

- Metricbeat: đây là công cụ chuyên dùng để thu thập hiệu năng của máy chủ. Ngoài hiệu năng phần cứng máy chủ, Metricbeat có thể khai thác thông tin các dịch vụ web (Apache, Nginx) hay của database (MySQL, MongoDB).

- Packetbeat: công cụ này sử dụng để giám sát lưu lượng và băng thông trên các máy chủ. Packetbeat sẽ thu thập thông tin về lưu lượng gói tin vào và ra của máy chủ, từ đó tổng kết và gửi về cho hệ thống ELK.

- Winlogbeat: khác với các hệ điều hành mã nguồn mở Linux, Windows có một cấu trúc hoàn toàn khác, và khó can thiệp vào sâu trong hệ thống để thu thập thông tin. Winlogbeat ra đời nhằm thu thập những sự kiện xảy ra bên trong hệ điều hành Windows.

- Auditbeat: Winlogbeat dành cho hệ điều hành Windows, thì Auditbeat được dành riêng cho hệ điều hành linux. Auditbeat giúp quản lý các folder, các tập tin hệ thống trong hệ điều hành Linux.

- Heartbeat: công vụ Heartbeat được sử dụng nhằm giúp cho hệ thống giám sát có thể biết được trạng thái dịch vụ đó có còn hoạt động hay không.

Tổng kết

Nền tảng ELK là một giải pháp phân tích log hoàn chỉnh, giải quyết tất cả các vấn đề và thách thức mà chúng ta đã đặt ra ví dụ như là làm sao có thể quản lý log của hàng trăm con server một lúc hay truy vấn hàng petabyte dữ liệu trong thời gian thực tức là một cách nhanh chóng và chính xác. Vậy thì nếu có thể tại sao chúng ta không triển khai ngay một hệ thống ELK ?


Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.