Elasticsearch là gì? Elasticsearch hoạt động như thế nào?
12 Oct, 2023
Khiem.
AuthorElasticsearch là một công cụ dựa trên phần mềm Lucene. Nó cung cấp một bộ máy tìm kiếm dạng phân tán, có đầy đủ công cụ với một giao diện web HTTP có hỗ trợ dữ liệu JSON.
Mục Lục
Nếu bạn đang tìm kiếm một giải pháp tìm kiếm mạnh mẽ và linh hoạt cho dự án, hoặc một bộ công cụ hỗ trợ việc logging hệ thống có nhiều service khác nhau? Với Elasticsearch - một hệ thống tìm kiếm và phân tích dữ liệu mã nguồn mở, được thiết kế đặc biệt để xử lý, tìm kiếm và hiển thị dữ liệu lớn, tốc độ nhanh chóng.
1. Tổng quan về Elasticsearch
1.1. Elasticsearch là gì?
Elasticsearch là một công cụ dựa trên phần mềm Lucene. Nó cung cấp một bộ máy tìm kiếm dạng phân tán, có đầy đủ công cụ với một giao diện web HTTP có hỗ trợ dữ liệu JSON. Elasticsearch được phát triển bằng Java và được phát hành dạng mã nguồn mở theo giấy phép Apache.
Elasticsearch is a distributed, RESTful search and analytics engine capable of addressing a growing number of use cases. As the heart of the Elastic Stack, it centrally stores your data for lightning fast search, fine‑tuned relevancy, and powerful analytics that scale with ease.
Cre: https://www.elastic.co/elasticsearch/
Ngoài ra, ES cũng được xem là một document oriented database. Nhiệm vụ của nó chính là store và retrieve document. Trong ES, tất cả các document được hiển thị trong JSON format. Nó được xây dựng trên Lucene – phần mềm tìm kiếm và trả về thông tin với hơn 15 năm kinh nghiệm về full text indexing and searching.
Khi nhắc đến Elasticsearch, chúng ta có thể nhớ các đặc điểm cơ bản sau:
- JSON based data: hệ thống sử dụng cơ sở dữ liệu noSQL để lưu trữ và truy vấn dữ liệu, tập trung vào việc tối ưu hóa hiệu suất tìm kiếm. Điều này đảm bảo rằng Elasticsearch có thể cung cấp kết quả tìm kiếm chính xác trong thời gian gần như thời gian thực, ngay cả trên tập dữ liệu lớn.
- RESTful APIs: Elasticsearch cũng cung cấp một giao diện RESTful API, cho phép các ứng dụng và dịch vụ khác có thể tương tác với nó một cách dễ dàng. Điều này làm cho việc tích hợp Elasticsearch vào các ứng dụng hiện có trở nên rất linh hoạt và thuận tiện.
- Multi data resources: Dữ liệu có thể lấy từ nhiều nguồn khác nhau. Đó có thể là Logs từ ứng dụng, Metrics hệ thống hoặc bất nguồn kỳ dữ liệu với bất kỳ loại dữ liệu nào đến từ bất kỳ ứng dụng khác nhau.
1.2. Tại sao cần sử dụng Elasticsearch?
Hiện nay Elasticsearch được sử dụng phổ biến và chủ yếu cho 2 loại yêu cầu tác vụ khác nhau nhưng cũng không kém phần quan trọng trong các hệ thống:
1.2.1. Tìm kiếm
Hiện nay các hệ thống website hoặc phần mềm thì tác vụ tìm kiếm là một tác vụ cực kỳ quan trọng đặc biệt là trong các ứng dụng thương mại điện tử. Việc tìm kiếm các sản phẩm với độ chính xác và tốc độ cao dường như được chú trọng và quan tâm hơn đến trải nghiệm người dùng.
Khi mà trước đây các lập trình viên có thể sử dụng cách truyền thống bằng cách query trực tiếp vào cơ sở dữ liệu tuy nhiên hiện nay công việc này dường như trở nên chậm chạp và kém hiệu quả.
Đặc biệt là khi thực hiện việc tìm kiếm với các kiểu ngôn ngữ có dấu như tiếng Việt hoặc tìm kiếm theo keyword thì Elasticsearch nổi lên như một giải pháp tối ưu.
Nếu search bằng truy vấn SQL như LIKE %one%
thì kết quả sẽ chỉ cần chứa one
là ra. Ví dụ: phone
, zone
, money
, alone
… nói chung sẽ là 1 list kết quả không mong muốn.
Khi search bằng ES thì gõ one
sẽ chỉ có one
được trả về mà thôi. Truy vấn LIKE không thể truy vấn từ có dấu. Ví dụ: từ khoá có dấu là có
, nếu truy vấn LIKE chỉ gõ co
thì sẽ không trả về được chính xác kết quả.
Về perfomance thì ES sẽ là tốt hơn, truy vấn LIKE sẽ tìm kiếm đơn thuần toàn văn bản không sử dụng index, nghĩa là tập dữ liệu càng lớn thì tìm kiếm càng lâu, trong khi ES lại “đánh index” cho các trường được chọn để tìm kiếm.
1.2.2. Ghi nhật ký
ELK Stack đáp ứng một nhu cầu trong lĩnh vực phân tích bản ghi. Khi ngày càng nhiều cơ sở hạ tầng CNTT của bạn chuyển sang các đám mây công cộng, bạn cần một giải pháp quản lý và phân tích nhật ký để giám sát cơ sở hạ tầng này cũng như xử lý mọi nhật ký máy chủ, nhật ký ứng dụng và đường dẫn nhấp chuột.
ELK Stack cung cấp một giải pháp phân tích bản ghi tuy đơn giản nhưng lại vô cùng hiệu quả cho các nhà phát triển và kỹ sư DevOps để giúp họ thu thập những thông tin chi tiết giá trị về chẩn đoán lỗi, hiệu suất ứng dụng và giám sát cơ sở hạ tầng - với mức giá vô cùng phải chăng.
1.3. Đặc điểm của Elasticsearch
1.3.1. Dữ liệu đầu vào: ghi tài liệu và chỉ mục
Elaticsearch lưu trữ các cấu trúc dữ liệu phức tạp đã được tuần tự hóa dưới dạng tài liệu JSON. Khi một tài liệu được lưu trữ, nó sẽ được lập chỉ mục và có thể tìm kiếm đầy đủ trong thời gian gần như thực trong vòng ~1 giây
.
Elasticsearch sử dụng một cấu trúc dữ liệu gọi là inverted index, hỗ trợ tìm kiếm full-text nhanh chóng. Inverted index liệt kê mọi từ duy nhất xuất hiện trong bất kỳ tài liệu nào và xác định tất cả các tài liệu có chứa từng từ đó.
1.3.2. Dữ liệu đầu ra: tìm kiếm và phân tích
- Tìm kiếm
Ngoài việc tìm kiếm các cụm từ riêng lẻ, bạn có thể thực hiện tìm kiếm cụm từ, tìm kiếm tương tự và tìm kiếm tiền tố cũng như nhận các đề xuất hoàn toàn tự động.
Khi có dữ liệu không gian địa lý hoặc dữ liệu số khác mà bạn muốn tìm kiếm, Elaticsearch lập chỉ mục dữ liệu phi văn bản trong các cấu trúc dữ liệu được tối ưu hóa hỗ trợ các truy vấn dạng số và địa lý hiệu suất cao.
- Phân tích
Tính năng tổng hợp của Elaticsearch cho phép bạn xây dựng các bản tóm tắt ngắn gọn về nguồn dữ liệu phức tạp của mình và để hiểu rõ hơn về ý nghĩa của các số liệu, cũng như xu hướng chính mà dữ liệu nói lên. Thay vì chỉ tìm câu tục ngữ “mò kim đáy bể”, việc tổng hợp cho phép bạn trả lời các câu hỏi như:
- Có bao nhiêu cây kim trong đống cỏ khô?
- Chiều dài trung bình của kim là bao nhiêu?
- Chiều dài trung bình của kim được chia theo nhà sản xuất là bao nhiêu?
- Có bao nhiêu cây kim được thêm vào đống cỏ khô trong sáu tháng vừa qua?
Bạn cũng có thể sử dụng phép tổng hợp để trả lời các câu hỏi tinh tế hơn, chẳng hạn như:
- Nhà sản xuất kim phổ biến nhất của bạn là gì?
- Có bất kỳ cụm kim bất thường hoặc không bất thường nào không?
Điều này cho phép bạn phân tích và trực quan hóa dữ liệu của mình trong thời gian thực. Dashboard sẽ cập nhật báo cáo khi dữ liệu của bạn thay đổi để có thể thực hiện hành động cần thiết dựa trên thông tin mới nhất.
1.3.3. Mở rộng và khả năng chịu lỗi: cụm, nút và phân đoạn
Chỉ mục Elaticsearch thực sự chỉ là một nhóm tập hợp của một hoặc nhiều phân đoạn, trong đó mỗi phân đoạn (shard) là một chỉ mục độc lập. Bằng cách phân phối tài liệu (document) trong một chỉ mục (index) trên nhiều phân đoạn và phân phối các phân đoạn đó trên nhiều nút (nodes) như hình dưới.
Nhờ đó, Elaticsearch có thể đảm bảo tính dự phòng, vừa tránh khỏi lỗi xảy ra về phần cứng vừa tăng khả năng truy vấn khi các nút được thêm vào một cụm (cluster). Khi cụm mở rộng hơn (hoặc co giảm lại), Elaticsearch sẽ tự động di chuyển các phân đoạn (shard) để cân bằng lại cụm.
2. Cách Elasticsearch hoạt động
2.1. Cách Elasticsearch tổ chức lưu trữ dữ liệu
2.1.1. Tổ chức Logic hoá - Logical
Cấu trúc lưu trữ dữ liệu được tổ chức logic hoá có nét tương đồng với hệ cơ sở dữ liệu quan hệ RDMS với các thành phần như sau:
RDMS | Elasticsearch |
---|---|
DB | Indexes/Indicies |
Tables | Patterns/Types |
Row | Documents |
Columns | Fields |
Indexes
- Index trong Elasticsearch là một tập hợp các tài liệu có tính chất tương tự (có cùng các trường hoặc field).
- Mỗi index có thể được coi như một cơ sở dữ liệu nhỏ trong hệ thống Elasticsearch.
- Index được sử dụng để tìm kiếm, lọc và lưu trữ dữ liệu. Một cơ sở dữ liệu có thể bao gồm nhiều index.
Types
- Trước Elasticsearch phiên bản
7.x
, một index có thể chứa nhiều loại (type) khác nhau. Mỗi loại định nghĩa cấu trúc của các document trong index. - Mỗi loại chứa các field (trường) khác nhau. Ví dụ, một index có thể có loại "user" và loại "blog", mỗi loại sẽ có cấu trúc dữ liệu riêng.
Documents
- Document là dữ liệu cơ bản mà Elasticsearch lưu trữ và tìm kiếm.
- Document thường được biểu diễn dưới dạng JSON (JavaScript Object Notation).
- Ví dụ: Trong một index chứa thông tin người dùng, mỗi người dùng sẽ được biểu diễn bằng một document.
Fields
- Field là các thành phần cơ bản của một document. Chúng là các thuộc tính hoặc trường thông tin về một document.
- Mỗi field có thể chứa một loạt các giá trị như chuỗi ký tự, số, ngày tháng, v.v.
- Ví dụ: Trong một document người dùng, các field có thể bao gồm "name", "age", "email", v.v.
2.1.2. Tổ chức vật lý - Physical
Về mặt vật lý, dữ liệu thực sự được Elasticsearch tổ chức theo mô hình phân tán cho một Index với các thành phần như Cluster, Node, Shard.
Cụm Elaticsearch là một nhóm gồm một hoặc nhiều nút Elaticsearch được kết nối với nhau. Trước tiên chúng ta hãy phác thảo cách nó được trình bày, như thể hiện trong sơ đồ sau:
Mặc dù mỗi nút có mục đích và trách nhiệm riêng nhưng mỗi nút có thể chuyển tiếp các yêu cầu (điều phối) của máy khách đến các nút thích hợp. Sau đây là các nút được sử dụng trong cụm Elaticsearch:
- Master-eligible node:
Nhiệm vụ của nút Master chủ yếu được sử dụng cho các hoạt động nhẹ trên toàn cụm, bao gồm tạo hoặc xóa chỉ mục, theo dõi các nút cụm và xác định vị trí của các phân đoạn được phân bổ.
Theo mặc định, vai trò Master-eligible được bật. Nút Master-eligible có thể được bầu để trở thành nút chính Master theo quy trình bầu cử chính. Bạn có thể vô hiệu hóa loại vai trò này cho một nút bằng cách đặt node.master thành false trong tệp elasticsearch.yml.
- Data node: Nút dữ liệu chứa dữ liệu chứa các tài liệu được lập chỉ mục. Nó xử lý các hoạt động liên quan như CRUD, tìm kiếm và tổng hợp. Theo mặc định, vai trò nút dữ liệu được bật và bạn có thể vô hiệu hóa vai trò đó cho một nút bằng cách đặt node.data thành false trong tệp elasticsearch.yml.
- Ingest node: Sử dụng Ingest node là một cách để xử lý tài liệu ở chế độ đường dẫn trước khi lập chỉ mục tài liệu. Theo mặc định, vai trò Ingest node được bật—bạn có thể tắt vai trò đó cho một nút bằng cách đặt node.ingest thành false trong tệp elasticsearch.yml.
- Coordinating-only node: Nếu cả ba vai trò (master eligible, data, và ingest) đều bị tắt, nút sẽ chỉ hoạt động như một nút phối hợp thực hiện các yêu cầu định tuyến, xử lý giai đoạn giảm tìm kiếm và phân phối công việc thông qua lập chỉ mục hàng loạt.
2.2. Cách Elasticserach thực hiện đánh index
2.2.1. Quản lý Index
Trong Elaticsearch, chỉ mục tương tự như cơ sở dữ liệu trong thế giới cơ sở dữ liệu quan hệ. Đó là nơi dữ liệu của bạn được lưu trữ. Bạn có thể tạo, xóa và quản lý chỉ mục thông qua RESTful API Elaticsearch. Ví dụ:
- Create Index:
PUT /my_index
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
- Delete Index:
DELETE /my_index
2.2.2. Mappers - động (dynamic) và tĩnh (static)
- Push data to index
PUT my-index-000001/_doc/1
{
"@timestamp": "2099-11-15T13:12:00",
"message": "GET /search HTTP/1.1 200 1070000",
"user": {
"id": "kimchy"
}
}
Khi đó, Elaticsearch sử dụng cơ chế gọi là "Mappers" để ánh xạ dữ liệu trong tài liệu tới các trường có liên quan trong chỉ mục. Có hai loại ánh xạ:
- Dynamic Mapping: Elaticsearch có thể tự động phát hiện loại dữ liệu của các trường và tạo ánh xạ cho chúng. Điều này rất hữu ích để nhanh chóng lập chỉ mục dữ liệu mới, nhưng điều quan trọng là phải thận trọng vì nó có thể không phải lúc nào cũng ánh xạ chính xác các trường.
- Static Mapping: Điều này liên quan đến việc xác định rõ ràng các ánh xạ trước khi lập chỉ mục bất kỳ tài liệu nào. Điều này cho phép bạn kiểm soát nhiều hơn các loại dữ liệu và cài đặt cho từng trường.
2.2.3. Phân tích & trình mã thông báo
Trình phân tích (Analyzer) được sử dụng trong quá trình lập chỉ mục để chia văn bản thành các thuật ngữ hoặc mã thông báo riêng lẻ. Trình mã thông báo (Tokenizer) là một loại trình phân tích cụ thể giúp phân chia văn bản thành các thuật ngữ dựa trên một bộ quy tắc đã xác định.
- Standard Analyzer (default): Token hóa văn bản thành các thuật ngữ viết thường và xóa dấu câu. Ví dụ: "Quick Brown Fox!" sẽ được tách thành "quick", "brown", and "fox".
- Whitespace Analyzer: Tách văn bản thành các thuật ngữ bất cứ khi nào nó gặp khoảng trắng.
- Custom Analyzers: Bạn cũng có thể tạo bộ phân tích tùy chỉnh bằng cách sử dụng kết hợp bộ mã thông báo và bộ lọc để đáp ứng các yêu cầu cụ thể.
2.2.4. Querying với DSL
Elaticsearch sử dụng truy vấn mạnh mẽ tuỳ chỉnh theo miền với DSL (Domain Specific Language) giúp truy vấn và tìm kiếm các chỉ mục của nó. Đó là ngôn ngữ dựa trên JSON cho phép bạn chỉ định nhiều loại truy vấn. Ví dụ:
- Match Query:
{
"query": {
"match": {
"title": "quick brown"
}
}
}
- Bool Query:
{
"query": {
"bool": {
"must": { "match": { "title": "quick" }},
"must_not": { "match": { "title": "lazy" }}
}
}
}
- Filter Query:
{
"query": {
"bool": {
"filter": {
"term": { "status": "published" }
}
}
}
}
- Range Query:
{
"query": {
"range": {
"age": { "gte": 18, "lt": 30 }
}
}
}
Đây chỉ là vài ví dụ. DSL rất linh hoạt và cho phép thực hiện các truy vấn, tổng hợp phức tạp,... Hãy nhớ điều chỉnh những ví dụ này cho phù hợp với cấu trúc và yêu cầu chỉ mục cụ thể của bạn.
3. Hệ sinh thái ELK stack
ELK Stack là từ viết tắt được sử dụng để mô tả bộ dịch vụ bao gồm 3 dự án phổ biến: Elasticsearch, Logstash và Kibana. Thường được gọi là Elasticsearch, ELK Stack mang tới cho bạn khả năng tổng hợp nhật ký từ tất cả các hệ thống và ứng dụng của bạn, phân tích những nhật ký này, hiển thị dữ liệu để giám sát ứng dụng và cơ sở hạ tầng, khắc phục sự cố nhanh hơn, phân tích bảo mật, v.v.
- Elasticsearch - máy chủ lưu trữ và tìm kiếm dữ liệu log
- Logstash - thành phần xử lý dữ liệu, sau đó nó gửi dữ liệu nhận được cho Elasticsearch để lưu trữ
- Kibana - ứng dụng web để tìm kiếm và xem trực quan các logs
- Beats - thành phần gửi dữ liệu thu thập từ log của máy đến Logstash
3.1. Các thành phần của Hệ sinh thái ELK stack
3.1.1. Elasticsearch
Elasticsearch là công cụ tìm kiếm và phân tích phân tán được xây dựng trên Apache Lucene. Khả năng hỗ trợ đa dạng ngôn ngữ, hiệu suất cao và tài liệu JSON không lược đồ khiến Elasticsearch trở thành một lựa chọn lý tưởng cho nhiều trường hợp sử dụng tìm kiếm và phân tích nhật ký khác nhau.
3.1.2. Beats
Beats là những thành phần gửi dữ liệu nguồn mở mà bạn cài đặt làm đại lý trên máy chủ của mình để gửi dữ liệu vận hành tới Elaticsearch. Các nguồn dữ liệu mà Beats có thể thu thập bao gồm:
- Audit data (Auditbeat)
- Log files and journals (Filebeat)
- Cloud data (Functionbeat)
- Availability (Heartbeat)
- Metrics (Metricbeat)
- Network traffic (Packetbeat)
- Windows event logs (Winlogbeat)
Ngoài ra người dùng cũng có thể tự custom các Beat tuỳ chỉnh dựa vào mã nguồn mở cộng đồng viết bằng ngôn ngữ Golang.
3.1.3. Logstash
Logstash là một công cụ thu nạp dữ liệu nguồn mở cho phép bạn thu thập dữ liệu từ các nguồn khác nhau, chuyển đổi dữ liệu và gửi dữ liệu tới điểm đích bạn muốn. Với các bộ lọc được tạo sẵn và hỗ trợ hơn 200 phần bổ trợ, Logstash cho phép người dùng dễ dàng thu nạp bất kỳ dữ liệu đến từ nguồn hay thuộc loại dữ liệu nào.
3.1.4. Kibana
Kibana là một công cụ hiển thị trực quan và khám phá dữ liệu dành cho hoạt động đánh giá nhật ký và sự kiện. Kibana cung cấp các biểu đồ tương tác dễ sử dụng, những bộ lọc và tập hợp được tạo sẵn cũng như hỗ trợ không gian địa lý, khiến cho công cụ này trở thành lựa chọn ưa thích cho hoạt động hiển thị trực quan dữ liệu được lưu trữ trong Elasticsearch.
3.2. Mô hình hoạt động ELK stack
- Đầu tiên, file log định dạng JSON sẽ được gửi đến Logstash. (Thông qua nhiều con đường khác nhau, ví dụ như server gửi UDP request chứa log tới URL của Logstash, hoặc cài đặt Beat vào các server cần log, đọ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 Elasticsearch để tiến hành lập chỉ mục.
- 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 tiến hành query và xử lý thông tin.
3.3. Tutorials thu thập log trên máy chủ NodeJS
Bước 1: Cài đặt các thư viện yêu cầu cơ bản
- NodeJS - ứng dụng web NodeJS đơn giản
- winston - thư viện ghi nhật ký với NodeJS
- Elastic Common Schema (ECS) formatter - thư viện hỗ trợ parse dữ liệu log JSON phù hợp chuẩn ECS
- Got - thư viện gửi yêu cầu HTTP mạnh mẽ và thân thiện với Node.js
npm install winston
npm install @elastic/ecs-winston-format
npm install got
Bước 2: Thiết lập dịch vụ ELK Stack
Có 2 cách thiết lập và sử dụng ELK stack:
- Tiến hành cài đặt ELK stack tự host theo hướng dẫn
- Đăng ký dịch vụ Elasticsearch Cloud và thiết lập theo hướng dẫn
Bước 3: Khởi tạo ứng dụng NodeJS server ghi nhật ký
Bước 4: Khởi tạo ứng dụng client gửi request
Bước 5: Khởi chạy và thu thập log
node webserver.js
node webrequests.js
Khi đó, dữ liệu log được ghi vào file logs/log.json
có định dạng JSON như sau
Bước 6: Cấu hình Filebeat
- Tải và khởi chạy Filebeat theo hướng dẫn trên máy chủ NodeJS
- Chỉnh sửa cấu hình Filebeat kết nối ELK cloud
- Chỉnh sửa cấu hình Filebeat thu thập dữ liệu log đầu vào
- Thiết lập cấu hình Filebeat
./filebeat setup -e
Bước 7: Khởi chạy Filebeat
./filebeat -e -c filebeat.yml
Bước 8: Trực quan hoá dữ liệu log trên Kibana
Bây giờ là lúc tạo trực quan hóa dựa trên dữ liệu nhật ký ứng dụng.
- Mở menu chính Kibana và chọn Dashboard, sau đó click Create dashboard
- Tạo và thiết lập 2 biểu đồ mô hình hoá tương ứng theo hướng dẫn bao gồm:
- Tiến hành kết hợp các biểu đồ trực quan hoá dữ liệu log trên Dashboard
4. Nhận xét về Elasticsearch
4.1. Ưu điểm của Elasticsearch
- Tích hợp dễ dàng: Elasticsearch được thiết kế để tích hợp với các ứng dụng hiện có một cách dễ dàng. Nó hỗ trợ nhiều ngôn ngữ lập trình và cung cấp các API RESTful linh hoạt.
- Hiệu suất tìm kiếm nhanh chóng: Elasticsearch được tối ưu hóa để tìm kiếm dữ liệu một cách nhanh chóng. Nó sử dụng cấu trúc dữ liệu đặc biệt như inverted index để cung cấp tốc độ truy vấn cao.
- Phân tán và mở rộng dễ dàng: Nó được thiết kế để hoạt động trong môi trường phân tán. Bạn có thể mở rộng cụm Elasticsearch bằng cách thêm các nút vào cụm để tăng khả năng xử lý và lưu trữ.
- Xử lý dữ liệu có cấu trúc và không có cấu trúc: Elasticsearch hỗ trợ nhiều loại dữ liệu khác nhau, bao gồm văn bản, số, ngày tháng và nhiều kiểu dữ liệu khác.
- Hỗ trợ đầy đủ cho tìm kiếm đa trường và tìm kiếm văn bản đầy đủ: Elasticsearch hỗ trợ các loại tìm kiếm phức tạp như tìm kiếm đa trường, tìm kiếm văn bản đầy đủ và nhiều loại tìm kiếm phức tạp khác.
- Hệ sinh thái mở rộng: Elastic Stack, bao gồm các thành phần như Logstash, Kibana và Beats, cung cấp một hệ sinh thái hoàn chỉnh cho việc thu thập, xử lý, trực quan hóa và quản lý dữ liệu.
4.2. Nhược điểm của Elasticsearch
- Yêu cầu tài nguyên: Elasticsearch yêu cầu tài nguyên phần cứng khá cao, đặc biệt khi bạn xử lý một lượng lớn dữ liệu. Điều này có thể tạo áp lực lên hạ tầng của bạn.
- Khó khăn trong việc cấu hình và tối ưu hóa: Để đạt được hiệu suất tối ưu, bạn cần cấu hình Elasticsearch đúng cách. Việc thiết lập và tối ưu hóa các chỉ số và cụm có thể đòi hỏi kỹ thuật và hiểu biết sâu về hệ thống.
- Khó khăn trong việc xử lý dữ liệu liên quan: Elasticsearch không phải lúc nào cũng là lựa chọn tốt cho các trường hợp sử dụng liên quan đến các mối quan hệ phức tạp hoặc các thao tác chuyên sâu trên dữ liệu.
- Khả năng mở rộng theo nguồn tài nguyên hạn chế: Việc mở rộng Elasticsearch có thể trở nên tốn kém khi bạn cần mua thêm tài nguyên phần cứng hoặc sử dụng các dịch vụ đi kèm của Elastic.
- Độ phức tạp của truy vấn: Mặc dù Elasticsearch mạnh mẽ, việc viết các truy vấn phức tạp có thể đòi hỏi một sự hiểu biết sâu về ngôn ngữ truy vấn của nó.
5. Best practice cho Elasticsearch
Dưới đây là một số "best practice" được khuyến nghị khi sử dụng Elasticsearch:
- Thiết kế mapping chính xác: Định rõ cấu trúc dữ liệu của mình và định nghĩa mapping một cách cẩn thận. Điều này giúp Elasticsearch hiểu và xử lý dữ liệu của bạn một cách chính xác.
- Tối ưu hóa index: Chọn các thiết lập index phù hợp như số shard và replica, và cân nhắc về cách chia index để đảm bảo sự tận dụng tối đa tài nguyên của cluster.
- Cập nhật phiên bản Elasticsearch: Luôn nên sử dụng phiên bản mới nhất của Elasticsearch để nhận được các cải tiến hiệu suất và sửa lỗi bảo mật.
- Sử dụng multiple indices cho time-based data: Đối với dữ liệu theo thời gian (ví dụ: logs), hãy sử dụng multiple indices và cân nhắc về roll-over policies để quản lý và tối ưu hóa dữ liệu.
- Optimize queries: Sử dụng tối ưu các truy vấn Elasticsearch bằng cách sử dụng các query DSL, filter, và các tối ưu hóa khác nhau.
- Mở rộng Elasticsearch cluster: Nếu dự án của bạn phát triển, cân nhắc mở rộng cluster bằng cách thêm node hoặc tăng phần cứng.
- Tối ưu hóa dữ liệu trước khi lưu vào Elasticsearch: Trước khi lưu dữ liệu vào Elasticsearch, hãy tối ưu hóa nó sao cho phù hợp với tìm kiếm và truy vấn mong muốn.
- Sử dụng caching và filtering: Elasticsearch hỗ trợ caching, nên bạn có thể sử dụng nó để tối ưu hóa truy vấn tìm kiếm thường xuyên được thực hiện.
- Monitoring và logging: Theo dõi sự hoạt động của cluster bằng các công cụ như Kibana và Logstash. Kiểm tra log để xác định và giải quyết các vấn đề nhanh chóng.
- Backup và Recovery: Thực hiện định kỳ các bản sao lưu (backups) của dữ liệu Elasticsearch để đảm bảo an toàn dữ liệu trong trường hợp xảy ra sự cố.
- Bảo mật: Đảm bảo rằng Elasticsearch cluster của bạn được cấu hình và quản lý một cách an toàn. Sử dụng HTTPS, xác thực, và cấu hình firewall đúng cách.
- Tài liệu và hỗ trợ cộng đồng: Đọc tài liệu chính thức và tham gia các diễn đàn hoặc cộng đồng để học hỏi từ những người sử dụng Elasticsearch khác.
6. Tổng kết về Elasticsearch
Tóm lại, Elasticsearch không chỉ đơn thuần là một cơ sở dữ liệu, mà còn là một nền tảng phân tán mạnh mẽ cho việc tìm kiếm và phân tích dữ liệu lớn. Khả năng tìm kiếm nhanh chóng và khả năng phân tích đa dạng giúp Elasticsearch trở thành công cụ quan trọng trong việc khai thác thông tin từ các tập dữ liệu phức tạp.
Bên cạnh đó, ELK Stack (Elasticsearch, Logstash và Kibana) cung cấp một giải pháp toàn diện cho việc thu thập, xử lý và trực quan hóa dữ liệu. Với khả năng kết hợp mạnh mẽ giữa các thành phần, ELK Stack mang lại khả năng theo dõi, phân tích và quản lý dữ liệu một cách dễ dàng và hiệu quả hơn bao giờ hết.
Tài liệu tham khảo:
- https://www.elastic.co/guide/en/elasticsearch/reference/8.10/elasticsearch-intro.html
- https://aws.amazon.com/vi/what-is/elk-stack/
- https://subscription.packtpub.com/book/data/9781789957754/2/ch02lvl1sec06/elasticsearch-architectural-overview
- https://www.youtube.com/watch?v=ZP0NmfyfsoM
- https://www.elastic.co/guide/en/cloud/current/ec-getting-started-search-use-cases-node-logs.html
Nhìn chung, Elasticsearch thực sự là một công cụ mạnh mẽ với nhiều tính năng vượt trội dựa vào khả năng tích hợp của các nhà phát triển. Thậm chí, Elasticsearch cũng có thể thay thế một cho Database độc lập trong hệ thống, một dịch vụ dành riêng cho tính năng tìm kiếm hoặc môt bộ công cụ mạnh mẽ trong quản lý log.
Bạn hãy thường xuyên theo dõi các bài viết hay về Lập Trình & Dữ Liệu trên 200Lab Blog nhé. Cũng đừng bỏ qua những khoá học Lập Trình tuyệt vời trên 200Lab nè.
Một vài bài viết bạn sẽ thích:
RabbitMQ là gì? RabbitMQ hoạt động như nào?
Jira là gì? Giải mã phần mềm đa năng Jira Software
OpenTelemetry: Công cụ giám sát và tối ưu hóa ứng dụng
Giải pháp scale WebSocket với Socket.IO
Axios là gì? Tìm hiểu về thư viện Axios