Bộ giải pháp quản lý log tập trung EFK

Một phần của tài liệu PHÁT TRIỂN và TÍCH hợp CHỨC NĂNG GIÁM sát TOÀN vẹn tệp TIN vào hệ THỐNG GIÁM sát AN TOÀN MẠNG (Trang 48 - 52)

Chương 2 Giới thiệu về giải pháp giám sát an toàn mạng Wazuh

2.3. Bộ giải pháp quản lý log tập trung EFK

2.3.1. Giới thiệu về hệ thống log tập chung EFK STACK

EFK Stack, một trong các stack mạnh mẽ, phổ biến nhất dùng để ghi log. Rất nhiều hệ thống lớn trên thế giới ( LinkedIn, Netflix, Medium,… ) đang sử dụng stack này.

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

- Elasticsearch: Cơ sở dữ liệu để lưu trữ, tìm kiếm và query log.

- Filebeat: Tiếp nhận log từ nhiều nguồn, sau đó xử lý log và ghi dữ liệu tới Elasticsearch.

Cơ chế hoạt động của EFK Stack:

Hình 2.19 Cơ chế hoạt động của EFK Stack

Đầu tiên, log sẽ được đưa đến Filebeat. ( 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 Filebeat ).

Filebeat 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.

Kibana sẽ đọc thông tin log trong Elasticsearch, hiển thị lên giao diện cho phép xem log và thực hiện tìm kiếm dữ liệu log mong muốn.

2.3.2. Elasticsearch

Elasticsearch là một resful distributed search engine được viết bằng ngôn ngữ Java. Elastichsearch cung cấp khả năng tìm kiếm phân tán qua API, chúng ta có thể thêm/sửa/xóa/tìm kiếm dữ liệu trên Elasticsearch với các api http ( POST, PUT, DELETE, GET ). Elasticsearch lưu trữ dữ liệu theo dạng NoSQL database (cơ sở dữ liệu khơng có cấu trúc), 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. Tất cả dữ liệu được lưu vào Elasticsearch đều được đánh đánh chỉ mục ( index ), điều này giúp tăng hiệu năng tìm kiếm của Elasticsearch.

Các khái niệm cơ bản với Elasticsearch:

- Document: Là một json object với một số dữ liệu. Đây là basic information unit trong ES. Đây là đơn vị nhỏ nhất để lưu trữ dữ liệu trong Elasticsearch.

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

- Shard: Shard là 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 một 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 tồn vẹn dữ liệu khi Primary shard xảy ra vấn đề, ngồi ra 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: 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. 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 một cluster 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.

Ưu điểm:

- Tìm kiếm dữ liệu rất nhanh chóng, mạnh mẽ. - Có khả năng phân tích dữ liệu ( Analysis data ) - Khả năng mở rộng theo chiều ngang.

- Hỗ trợ tìm kiếm mờ ( fuzzy ), tức là từ khóa tìm kiếm có thể bị sai lỗi chính tả hay khơng đúng cú pháp thì vẫn có khả năng Elasticsearch trả về kết quả tốt.

- Hỗ trợ Structured Query DSL ( Domain-Specific Language ), cung cấp việc đặc tả những câu truy vấn phức tạp một cách cụ thể và rõ ràng bằng JSON.

- Hỗ trợ các Elasticsearch client như Java, PHP, JS, Ruby,… Nhược điểm:

- Elasticsearch được thiết kế cho mục đích tìm kiếm dữ liệu, do vậy với những nhiệm vụ khác ngồi tìm kiếm Elasticsearch có hiệu năng kém hơn so với những database khác như Mongodb, Mysql …. Do vậy Elasticsearch khơng được dùng database chính, mà thường kết hợp Elasticsearch với một hệ thống cơ sở dữ liệu khác.

- Trong Elasticsearch khơng có khái niệm database transaction , tức là sẽ khơng đảm bảo được toàn vẹn dữ liệu trong các hoạt động Insert, Update, Delete. Khi thực hiện thay đổi nhiều bản ghi nếu xảy ra lỗi thì sẽ làm cho logic của mình bị sai hay dẫn tới mất mát dữ liệu. Đây cũng là một phần khiến Elasticsearch khơng nên là database chính.

2.3.3. Filebeat

FileBeat là những data shipper mã nguồn mở mà được cài đặt như các agent trên các server cần thu thập các sự kiện để gửi các kiểu dữ liệu khác nhau tới Elasticsearch. FileBeat có thể gửi dữ liệu trực tiếp tới Elasticsearch. EFK cần sử dụng các Filebeat để làm shipper giúp gửi các loại dữ liệu từ client tới Server.

Hình 2.20 Cấu trúc bên trong của Filebeat

Khi khởi động Filebeat, sẽ khởi chạy một hay nhiều prospector, sẽ tìm kiếm các đường dẫn của tập tin tin đã được khai báo. Với mỗi tập tin log mà prospector tìm thấy được, Filebeat sẽ khởi chạy một harvester. Mỗi một harvester đọc một tập tin log, và gửi các bản tin log này khi có dữ liệu mới tới spooler. Spooler là nơi

tổng hợp các sự kiện và gửi dữ liệu đã tổng hợp được tới output đã cấu hình trên Filebeat.

2.3.4. 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.

Ứng dụng của Kibana với EFK stack:

- Tìm kiếm, xem và hiển thị dữ liệu được lập chỉ mục trong Elaticsearch và phân tích dữ liệu thơng qua việc tạo biểu đồ thanh, biểu đồ hình trịn, bảng, biểu đồ và bản đồ.

- Chế độ xem bảng điều khiển kết hợp các yếu tố trực quan này để sau đó được chia sẻ qua trình duyệt để cung cấp chế độ xem phân tích theo thời gian thực thành khối lượng dữ liệu lớn để hỗ trợ các trường hợp sử dụng như: Ghi nhật ký và phân tích nhật ký, giám sát hiệu suất ứng dụng ( APM ), phân tích dữ liệu khơng gian địa lý và trực quan hóa.

- Theo dõi, quản lý và bảo mật một Elasticsearch thông qua giao diện web.

Một phần của tài liệu PHÁT TRIỂN và TÍCH hợp CHỨC NĂNG GIÁM sát TOÀN vẹn tệp TIN vào hệ THỐNG GIÁM sát AN TOÀN MẠNG (Trang 48 - 52)