Bạn muốn tìm kiếm dữ liệu siêu tốc, phân tích lượng thông tin khổng lồ và xây dựng ứng dụng mạnh mẽ? Elasticsearch là công cụ sẽ biến dữ liệu của bạn thành sức mạnh, cho phép bạn khám phá thông tin chỉ trong “tích tắc”. Bài viết này sẽ xoay quanh các Elasticsearch tutorial – hướng dẫn chi tiết những bước đầu tiên để làm chủ Elasticsearch, phù hợp với Developer, Data Engineer và IT Administrator muốn tìm hiểu từ cơ bản về Elasticsearch.
Đọc bài viết để nắm rõ:
- Các khái niệm của Elasticsearch
- Cách thiết lập Elasticsearch
- Cách lập chỉ mục và truy vấn dữ liệu trong Elasticsearch
- Cách tìm kiếm dữ liệu Elasticsearch và tính năng tìm kiếm nâng cao
- Giám sát và tối ưu hóa trong Elasticsearch
- Kiểm soát an ninh và truy cập trong Elasticsearch
Hiểu rõ các khái niệm của Elasticsearch
- Elasticsearch là một công cụ tìm kiếm và phân tích phân tán, mã nguồn mở, được xây dựng trên Apache Lucene. Elasticsearch thường là thành phần cốt lõi trong Elastic Stack (trước đây gọi là ELK Stack), kết hợp với Kibana, Logstash và Beats.
- Node: Node là một phiên bản đơn lẻ của Elasticsearch đang chạy. Trong Elasticsearch 8.x, mỗi node có vai trò cụ thể và được cấu hình mặc định để phù hợp với bảo mật. Kể từ phiên bản 7.x, các node phải được xác thực để tham gia vào cluster thông qua các certificates, và Transport Layer Security (TLS) được bật theo mặc định cho giao tiếp giữa các node. Một máy vật lý hoặc máy ảo có thể chạy nhiều node, nhưng thông thường mỗi máy chỉ chạy một node trong môi trường production.
- Cluster: Đây là tập hợp một hoặc nhiều node cùng chia sẻ cùng một cluster name. Cluster cung cấp khả năng lập chỉ mục và tìm kiếm tập thể tất cả các node cho toàn bộ dữ liệu.
- Index: Đây là tập hợp các loại tài liệu khác nhau và thuộc tính của chúng. Index cũng sử dụng khái niệm phân mảnh (shard) để cải thiện hiệu suất. Ví dụ, một tập hợp tài liệu chứa dữ liệu từ một ứng dụng mạng xã hội sẽ được phân chia thành nhiều shard để cho phép xử lý song song và tăng tốc độ truy vấn.
- Document: Đây là một tập hợp các trường cụ thể theo định dạng JSON. Mỗi tài liệu được phân loại theo một kiểu dữ liệu cụ thể và được lưu trữ trong một chỉ mục (index). Từ Elasticsearch 7.0, khái niệm “type” đã bị loại bỏ dần và hoàn toàn biến mất trong Elasticsearch 8.x. Mỗi document có một ID duy nhất và một tập hợp các fields có thể được lập index (đánh chỉ mục) để tìm kiếm. Elasticsearch 8.x hỗ trợ nhiều loại dữ liệu phong phú hơn, bao gồm các loại phức tạp như geo_point, nested objects, và dense_vector cho machine learning.
- Shard: Các index được phân vùng theo chiều ngang thành các đơn vị nhỏ hơn gọi là phân mảnh (shard). Mỗi phân mảnh này giữ nguyên cấu trúc dữ liệu, bao gồm tất cả các thuộc tính của tài liệu, nhưng chỉ ít đối tượng JSON so với index gốc. Sự phân chia này tạo ra các phân mảnh độc lập, cho phép phân phối dữ liệu và xử lý song song trên nhiều node. Primary shard đại diện cho phần dữ liệu gốc được phân chia từ index, và để đảm bảo sẵn sàng và khả năng chịu lỗi, các primary shard này được sao chép thành các phân mảnh bản sao (replica shards).
- Replicas: Elasticsearch cho phép người dùng tạo bản sao của các index và shard của chúng. Điều này không chỉ giúp tăng tính khả dụng của dữ liệu trong trường hợp xảy ra lỗi mà còn cải thiện hiệu suất tìm kiếm bằng cách thực hiện thao tác tìm kiếm song song trong các replicas này.
Đọc thêm: Từ A đến Z về Elasticsearch: “Vũ khí” bí mật cho các ứng dụng dữ liệu lớn
Thiết lập Elasticsearch như thế nào?
Bước 1: Kiểm tra yêu cầu Java
Trước khi cài đặt Elasticsearch, bạn cần đảm bảo hệ thống có phiên bản Java phù hợp:
- Elasticsearch 8.x (phiên bản mới nhất) yêu cầu Java 17 trở lên
- Elasticsearch 7.x yêu cầu Java 11 trở lên
Từ phiên bản 7.0 trở đi, Elasticsearch đã tích hợp sẵn OpenJDK, nên bạn không cần cài Java riêng trừ khi muốn sử dụng một phiên bản cụ thể. Nếu cần, bạn có thể đặt biến môi trường ES_JAVA_HOME để chỉ định JDK mong muốn.
Cách kiểm tra phiên bản Java:
- Trong Hệ điều hành Windows (OS), sử dụng dấu nhắc lệnh:
java -version
- Trong hệ điều hành UNIX, sử dụng Terminal:
java -version echo $JAVA_HOME
Bước 2: Tải xuống Elasticsearch
Hướng dẫn này sử dụng Elasticsearch 8.11.x (phiên bản mới nhất tính đến tháng 3/2025). Các phiên bản trước có thể có một số khác biệt về cú pháp và tính năng. Nếu bạn đang sử dụng phiên bản cũ hơn, hãy tham khảo tài liệu chính thức tại elastic.co/guide.
Lưu ý quan trọng về tương thích:
- Elasticsearch 8.x có thay đổi đáng kể so với 7.x, đặc biệt là về bảo mật (bật mặc định) và API.
- Việc nâng cấp từ 7.x lên 8.x cần được lên kế hoạch kỹ lưỡng và tuân theo hướng dẫn nâng cấp chính thức.
Chọn phiên bản cài đặt phù hợp với hệ điều hành:
- Windows: Tải về tệp .ZIP
- Mac/Linux: Tải về tệp .TAR
- Linux dựa trên Debian (Ubuntu, Debian,…): Tải về tệp .DEB
- Linux dựa trên Red Hat (RHEL, CentOS, Fedora,…): Tải về tệp .RPM
- Ngoài ra, có thể sử dụng tiện ích APT và YUM để cài đặt trên các bản phân phối Linux.
Bước 3: Cài đặt Elasticsearch
Quá trình cài đặt Elasticsearch rất đơn giản và được mô tả như sau cho các hệ điều hành khác nhau:
- Hệ điều hành Windows − Giải nén gói zip và Elasticsearch sẽ được cài đặt.
- Hệ điều hành UNIX − Giải nén tệp tar ở bất kỳ vị trí nào và Elasticsearch sẽ được cài đặt:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.1-linux-x86_64.tar.gz tar -xzf elasticsearch-8.11.1-linux-x86_64.tar.gz
- Sử dụng tiện ích APT cho hệ điều hành Linux − Tải xuống và cài đặt Public Signing Key:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
Lưu định nghĩa kho lưu trữ như sau:
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
Chạy cập nhật bằng lệnh sau:
$ sudo apt-get update
Cài đặt bằng cách sử dụng lệnh sau:
$ sudo apt-get install elasticsearch
- Tải xuống và cài đặt gói Debian theo cách thủ công bằng lệnh sau:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.1-amd64.deb sudo dpkg -i elasticsearch-8.11.1-amd64.deb
- Sử dụng tiện ích YUM cho hệ điều hành Debian Linux: Tải xuống và cài đặt Public Signing Key:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- Thêm văn bản sau vào tệp có hậu tố .repo trong thư mục “/etc/yum.repos.d/” của bạn. Ví dụ: elasticsearch.repo
[elasticsearch-8.x] name=Elasticsearch repository for 8.x packages baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
- Bây giờ bạn có thể cài đặt Elasticsearch bằng cách sử dụng lệnh sau:
sudo yum install elasticsearch
Bước 4: Chạy Elasticsearch Trên Windows/UNIX
Đi đến thư mục gốc của Elasticsearch và bên trong bin folder. Chạy tệp elasticsearch.bat trong trường hợp Windows hoặc bạn có thể thực hiện tương tự bằng command prompt và thông qua terminal trong trường hợp tệp UNIX rum Elasticsearch.
Trong Windows:
cd elasticsearch-8.11.1\bin elasticsearch.bat
Trong Linux:
cd elasticsearch-8.11.1/bin ./elasticsearch
Trong Linux (nếu cài đặt từ package):
sudo systemctl start elasticsearch sudo systemctl enable elasticsearch
Lưu ý: Trong trường hợp sử dụng Windows, bạn có thể gặp lỗi cho biết JAVA_HOME chưa được thiết lập, hãy cài đặt Java 17 (cho ES 8.x) và đặt biến môi trường JAVA_HOME. Từ Elasticsearch 7.x trở đi, ES đã đi kèm với OpenJDK nên thông thường không cần cài đặt Java riêng.
Bước 5: Kiểm tra trạng thái Elasticsearch
Cổng mặc định cho giao diện web Elasticsearch là 9200 hoặc bạn có thể thay đổi bằng cách thay http.port bên trong tệp elasticsearch.yml có trong bin folder. Bạn có thể kiểm tra xem máy chủ có hoạt động không bằng cách duyệt http://localhost:9200. Kết quả sẽ trả về một đối tượng JSON, chứa thông tin về Elasticsearch đã cài đặt theo cách sau:
{ "name" : "Brain-Child", "cluster_name" : "elasticsearch", "version" : { "number" : "2.1.0", "build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87", "build_timestamp" : "2015-11-18T22:40:03Z", "build_snapshot" : false, "lucene_version" : "5.3.1" }, "tagline" : "You Know, for Search" }
Lưu ý: Từ phiên bản 8.x, bảo mật được bật mặc định, nên cần thêm thông tin xác thực:
curl -u elastic:password http://localhost:9200
Bước 6: Cài đặt Kibana
Trong bước này, chúng ta sẽ cài đặt Kibana. Thực hiện theo mã tương ứng được đưa ra bên dưới để cài đặt trên Linux và Windows:
Cài đặt trên Linux
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.11.1-linux-x86_64.tar.gz tar -xzf kibana-8.11.1-linux-x86_64.tar.gz cd kibana-8.11.1-linux-x86_64/ ./bin/kibana
Cài đặt trên Windows
Tải xuống Kibana cho Windows từ https://www.elastic.co/downloads/kibana. Khi bạn nhấp vào liên kết, trang chủ sẽ được hiển thị. Bạn giải nén và chuyển đến thư mục gốc của Kibana rồi chạy nó:
cd c:\kibana-8.11.1-windows-x86_64 .\bin\kibana.bat
Cấu hình cơ bản Kibana (kibana.yml):
elasticsearch.hosts: ["http://localhost:9200"] elasticsearch.username: "kibana_system" elasticsearch.password: "password"
Elasticsearch tutorial: Cách lập chỉ mục và truy vấn dữ liệu trong Elasticsearch
Sau khi thiết lập Elasticsearch xong, bạn có thể bắt đầu lập chỉ mục dữ liệu bằng RESTful API hoặc một trong các trình Elasticsearch clients có sẵn cho nhiều ngôn ngữ lập trình khác nhau như Python, Java hoặc JavaScript.
Sử dụng RESTful API
Để lập chỉ mục một tài liệu bằng RESTful API , bạn gửi yêu cầu PUT hoặc POST đến máy chủ Elasticsearch với dữ liệu tài liệu ở định dạng JSON.
Hãy cùng xem qua một ví dụ sử dụng lệnh curl:
curl -XPOST "localhost:9200/products/_doc/1" -H 'Content-Type: application/json' -d' { "name": "iPhone 13", "description": "The latest iPhone model with advanced features", "price": 999 }
Trong ví dụ này:
- localhost:9200 là địa chỉ máy chủ Elasticsearch của bạn.
- products là tên của chỉ mục mà chúng ta muốn lưu trữ tài liệu.
- _doc là kiểu tài liệu (lưu ý rằng trong các phiên bản gần đây của Elasticsearch, type đã không còn được sử dụng nữa và _doc được sử dụng làm mặc định).
- 1 là ID của tài liệu. Nếu bạn không chỉ định ID, Elasticsearch sẽ tạo một ID cho bạn.
Output: Nếu tài liệu được lập chỉ mục thành công, bạn sẽ nhận được phản hồi từ Elasticsearch cho biết điều đó. Phản hồi bao gồm tên chỉ mục, loại tài liệu và ID. Ví dụ:
{ "_index": "products", "_type": "_doc", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }
Sử dụng Elasticsearch clients
Trong khi RESTful API hữu ích cho việc kiểm tra thủ công và các tác vụ đơn giản, việc sử dụng Elasticsearch client trong ngôn ngữ lập trình ưa thích của bạn mang lại sự linh hoạt và tiện lợi hơn, đặc biệt là đối với các tác vụ lập chỉ mục phức tạp.
Ví dụ về việc lập chỉ mục tài liệu bằng Elasticsearch Python client:
# Connect to Elasticsearch server es = Elasticsearch(['localhost:9200']) # Index a document doc = { "name": "Samsung Galaxy S21", "description": "Flagship smartphone with stunning display and camera", "price": 799 } res = es.index(index="products", doc_type="_doc", id=2, body=doc) print(res)
Output: Output sẽ tương tự như phản hồi của RESTful API , xác nhận việc lập chỉ mục tài liệu thành công.
Để đảm bảo lập chỉ mục và truy vấn hiệu quả trong Elasticsearch, cần phải tuân theo các biện pháp tốt nhất:
- Lập chỉ mục hàng loạt: Sử dụng API hàng loạt của Elasticsearch để lập chỉ mục các tập dữ liệu lớn.
- Tối ưu hóa ánh xạ: Thiết kế ánh xạ phản ánh chính xác cấu trúc dữ liệu của bạn và tối ưu hóa hiệu suất tìm kiếm.
- Phân chia và sao chép chỉ mục: Cấu hình các thiết lập như phân chia và sao chép để quản lý phân phối dữ liệu và dự phòng hiệu quả.
- Theo dõi tình trạng chỉ mục: Thường xuyên theo dõi tình trạng và hiệu suất của chỉ mục bằng các công cụ giám sát Elasticsearch để xác định và giải quyết kịp thời mọi sự cố.
Elasticsearch tutorial: Cách tìm kiếm dữ liệu cơ bản trong Elasticsearch
Hãy bắt đầu bằng cách khám phá một số truy vấn tìm kiếm (query) cơ bản mà bạn có thể sử dụng để tìm kiếm tài liệu trong Elasticsearch.
Match Query
Match Query là một trong những truy vấn đơn giản và phổ biến nhất trong Elasticsearch. Truy vấn này cho phép bạn tìm kiếm các tài liệu có chứa một thuật ngữ hoặc cụm từ cụ thể. Ví dụ dưới đây tìm kiếm tài liệu trong chỉ mục sản phẩm có name field chứa thuật ngữ “iphone”. Elasticsearch sẽ trả về tất cả các tài liệu phù hợp với tiêu chí này cùng với thông tin có liên quan.
GET /products/_search { "query": { "match": { "name": "iphone" } } }
Term Query
Term query được sử dụng để match chính xác các thuật ngữ, hữu ích khi bạn muốn tìm các tài liệu chứa giá trị chính xác trong một trường cụ thể. Ví dụ dưới đây tìm kiếm các tài liệu trong chỉ mục sản phẩm có category field khớp chính xác với “electronics”.
GET /products/_search { "query": { "term": { "category": "electronics" } } }
Elasticsearch tutorial: Cách tìm kiếm nâng cao trong Elasticsearch
Ngoài các truy vấn cơ bản, Elasticsearch còn cung cấp nhiều kỹ thuật tìm kiếm nâng cao để giúp bạn tinh chỉnh tìm kiếm và tìm ra những tài liệu có liên quan nhất.
Fuzzy Query
Fuzzy query được sử dụng để tìm các tài liệu có chứa các thuật ngữ tương tự với một thuật ngữ đã chỉ định. Truy vấn này hữu ích khi xử lý lỗi đánh máy hoặc các biến thể về chính tả. Dưới đây là ví dụ tìm kiếm các tài liệu trong đó name field chứa các thuật ngữ tương tự như “iphon” (ví dụ: “iPhone”).
GET /products/_search { "query": { "fuzzy": { "name": "iphon" } } }
Range Query
Range query cho phép bạn tìm kiếm tài liệu trong phạm vi giá trị được chỉ định. Truy vấn này thường được sử dụng khi xử lý các trường số hoặc ngày tháng. Dưới đây là ví dụ tìm kiếm các tài liệu có giá nằm trong khoảng từ 500 đến 1000.
GET /products/_search { "query": { "range": { "price": { "gte": 500, "lte": 1000 } } } }
Elasticsearch tutorial: Cách kết hợp các truy vấn trong Elasticsearch
Elasticsearch cho phép bạn kết hợp nhiều truy vấn bằng logic boolean để tạo ra tiêu chí tìm kiếm phức tạp hơn.
Bool query được sử dụng để kết hợp nhiều truy vấn bằng các boolean operator như must, should, must_not và filter. Ví dụ dưới đây sử dụng bool query để tìm các tài liệu có name field chứa “iphone” và category là “electronics”. Elasticsearch sẽ trả về các tài liệu đáp ứng cả hai điều kiện.
GET /products/_search { "query": { "bool": { "must": [ { "match": { "name": "iphone" } }, { "term": { "category": "electronics" } } ] } } }
Elasticsearch tutorial: Cách giám sát và tối ưu hóa trong Elasticsearch
Việc theo dõi tình trạng của cluster liên quan đến việc sử dụng các API cụ thể và hiểu các số liệu chính để xác định và giải quyết vấn đề kịp thời. Thông tin dưới đây cung cấp cái nhìn sâu sắc về việc sử dụng API Cluster Health, diễn giải các số liệu về tình trạng và xác định các vấn đề chung về tình trạng của cluster.
Cách sử dụng Cluster Health API
Cluster Health API trong Elasticsearch cung cấp tổng quan toàn diện về tình trạng của cluster, thông tin chi tiết quan trọng về trạng thái hiện tại của cluster. Đây là công cụ quan trọng dành cho quản trị viên để đảm bảo cluster hoạt động trơn tru. Để truy cập Cluster Health API, bạn có thể sử dụng endpoint sau đây:
GET /_cluster/health
API call này này trả về một đối tượng JSON chứa một số trường quan trọng mô tả trạng thái của cluster. Sau đây là một ví dụ về phản hồi.
{ "cluster_name": "my_cluster", "status": "yellow", "timed_out": false, "number_of_nodes": 3, "number_of_data_nodes": 2, "active_primary_shards": 5, "active_shards": 10, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 2, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 83.3 }
Ý nghĩa số liệu do Cluster Health API cung cấp
Trạng thái cluster
- Màu xanh lá cây: Tất cả các primary shard và replica đều đang hoạt động và được phân bổ. Cluster đang hoạt động đầy đủ.
- Vàng: Tất cả các primary shard đều hoạt động, nhưng một số replica chưa được phân bổ. Cluster đang hoạt động, nhưng tính dự phòng bị xâm phạm.
- Đỏ: Một số primary shard chưa được phân bổ. Dữ liệu bị thiếu hoặc không khả dụng và cluster không hoạt động đầy đủ.
Số lượng nút
- number_of_nodes: Tổng số node trong cluster. Số này phải khớp với số lượng node dự kiến.
- number_of_data_nodes: Số lượng node được chỉ định để lưu trữ dữ liệu.
Thống kê Shard
- active_primary_shards: Số lượng primary shard đang hoạt động. Số này phải bằng tổng số primary shard trên tất cả các chỉ mục.
- active_shards: Tổng số shard đang hoạt động (chính và bản sao).
- relocating_shards: Các primary shard đang trong quá trình di chuyển từ node này sang node khác. Số lượng lớn ở đây có thể chỉ ra quá trình cân bằng đang diễn ra.
- initializing_shards: Các shard đang được khởi tạo. Con số cao liên tục có thể chỉ ra sự cố.
- unassigned_shards: Các shard không được gán cho bất kỳ node nào. Đây là số liệu quan trọng cần theo dõi vì các primary shard không được gán có nghĩa là dữ liệu không khả dụng.
Thống kê nhiệm vụ
- number_of_pending_tasks: Các tác vụ đang chờ xử lý. Số lượng tác vụ đang chờ xử lý cao có thể chỉ ra tình trạng tắc nghẽn.
- task_max_waiting_in_queue_millis: Thời gian chờ tối đa của một tác vụ trong hàng đợi. Thời gian chờ dài có thể báo hiệu các vấn đề về hiệu suất.
Tỷ lệ phân bổ shard
- active_shards_percent_as_number: Tỷ lệ phần trăm các shard đang hoạt động so với tổng số các shard, lý tưởng nhất là gần 100%.
Tối ưu hóa Shards và Replicas
Hiệu suất của Elasticsearch cluster phụ thuộc rất nhiều vào mức độ cấu hình các phân đoạn và bản sao. Các vấn đề cần cân nhắc bao gồm:
- Kích thước shard: Kích thước shard tối ưu thường nằm trong khoảng từ 20GB đến 40GB cho dữ liệu time-based. Giữ kích thước shard trong phạm vi này đảm bảo hiệu suất truy vấn hiệu quả và thời gian cân bằng lại có thể quản lý được.
- Số lượng shard: Tránh các shard quá nhiều để giảm chi phí. Một nguyên tắc chung là giữ số lượng mảnh trên mỗi GB heap space dưới 20.
- Cấu hình replica: Điều chỉnh số lượng replica có thể tăng cường hiệu suất đọc và khả năng phục hồi. Tăng số lượng replica cải thiện khả năng chịu lỗi nhưng cũng đòi hỏi nhiều năng lượng lưu trữ và xử lý hơn.
Elasticsearch tutorial: Cách kiểm soát an ninh và truy cập
Bảo mật Elasticsearch bằng cấu hình mã hóa SSL/TLS nâng cao
Bảo mật Elasticsearch là điều quan trọng để bảo vệ dữ liệu của bạn và đảm bảo giao tiếp an toàn trong Elasticsearch cluster và giữa các client. Một trong những cách hiệu quả nhất là cấu hình mã hóa SSL/TLS. SSL (Secure Sockets Layer) và TLS (Transport Layer Security) là các giao thức mật mã được thiết kế để cung cấp giao tiếp an toàn qua mạng máy tính. TLS là giao thức kế thừa SSL và an toàn hơn.
Trong Elasticsearch, việc cấu hình mã hóa SSL/TLS giúp:
- Mã hóa dữ liệu khi truyền giữa các node.
- Mã hóa dữ liệu khi truyền giữa client và node.
- Đảm bảo tính toàn vẹn của dữ liệu và ngăn chặn sự giả mạo.
- Xác thực các node và client.
Trước khi bắt đầu, hãy đảm bảo bạn có những điều sau:
- Elasticsearch đã được cài đặt và đang chạy.
- Hiểu biết cơ bản về các tệp cấu hình Elasticsearch .
- OpenSSL được cài đặt để tạo chứng chỉ.
Tạo chứng chỉ
Elasticsearch yêu cầu chứng chỉ cho mã hóa SSL/TLS. Bạn có thể tạo chứng chỉ này bằng OpenSSL hoặc công cụ Elasticsearch Certutil. Dưới đây là ví dụ sử dụng công cụ Elasticsearch Certutil:
- Bước 1: Tạo Certificate Authority (CA)
Đầu tiên, hãy tạo một Certificate Authority (CA) sẽ ký chứng chỉ cho các node của bạn.
bin/elasticsearch-certutil ca
Lệnh này sẽ nhắc bạn nhập tên tệp cho CA. Ví dụ:
elastic-stack-ca.p12
- Bước 2: Tạo Node Certificate
Tiếp theo, tạo chứng chỉ cho các Elasticsearch node bằng CA đã tạo ở bước trước.
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
Lệnh này sẽ nhắc bạn nhập tên tệp cho Node Certificate. Ví dụ:
elastic-certificates.p12
- Bước 3: Phân phối chứng chỉ
Phân phối tệp elastic-certificates.p12 đã tạo cho tất cả các Elasticsearch node của bạn. Tệp này chứa các chứng chỉ cần thiết để bật SSL/TLS.
Cấu hình Elasticsearch cho SSL/TLS
- Bước 1: Cập nhật cấu hình Elasticsearch
Mở tệp cấu hình elasticsearch.yml trên mỗi node và thêm các thiết lập sau để bật SSL/TLS:
xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: /path/to/elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: /path/to/elastic-certificates.p12 xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: /path/to/elastic-certificates.p12 xpack.security.http.ssl.truststore.path: /path/to/elastic-certificates.p12 Replace /path/to/elastic-certificates.p12 with the actual path to your certificate file.
- Bước 2: Khởi động lại Elasticsearch
Khởi động lại từng nút Elasticsearch để áp dụng cấu hình mới:
bin/elasticsearch
Xác minh cấu hình SSL/TLS
Để xác minh rằng SSL/TLS được cấu hình đúng, bạn có thể sử dụng curl để gửi yêu cầu HTTPS tới cụm Elasticsearch của mình. Ví dụ
curl --cacert /path/to/elastic-stack-ca.crt -u elastic:password https://localhost:9200
Nếu SSL/TLS được cấu hình đúng, bạn sẽ thấy phản hồi từ Elasticsearch như sau:
{ "name" : "node-1", "cluster_name" : "my-cluster", "cluster_uuid" : "abcd1234", "version" : { "number" : "7.10.0", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "abcdefg", "build_date" : "2020-11-10T22:14:56.825533Z", "build_snapshot" : false, "lucene_version" : "8.7.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
Cấu hình xác thực client
Để bảo mật Elasticsearch cluster hơn nữa, bạn có thể cấu hình xác thực client certificate. Điều này đảm bảo chỉ những client có chứng chỉ hợp lệ mới có thể truy cập cluster.
- Bước 1: Tạo client certificate
Sử dụng công cụ Elasticsearch Certutil để tạo client certificate. Lệnh dưới đây sẽ nhắc bạn nhập tên tệp cho client certificate. Ví dụ: client-certificates.p12 .
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
- Bước 2: Cấu hình xác thực client
Mở tệp cấu hình elasticsearch.yml và thêm các thiết lập sau:
xpack.security.http.ssl.client_authentication: required xpack.security.http.ssl.certificate_authorities: ["/path/to/elastic-stack-ca.crt"]
Khởi động lại Elasticsearch để áp dụng các thay đổi:
bin/elasticsearch
- Bước 3: Sử dụng client certificate với Curl
Để thực hiện yêu cầu xác thực bằng client certificate, hãy sử dụng lệnh curl sau:
curl --cert /path/to/client.crt --key /path/to/client.key --cacert /path/to/elastic-stack-ca.crt https://localhost:9200
Định cấu hình Kibana cho SSL/TLS
Nếu bạn đang sử dụng Kibana với Elasticsearch, bạn cần cấu hình Kibana để giao tiếp với Elasticsearch qua HTTPS.
- Bước 1: Cập nhật cấu hình Kibana
Mở tệp cấu hình kibana.yml và thêm các thiết lập sau:
elasticsearch.hosts: ["https://localhost:9200"] elasticsearch.ssl.certificateAuthorities: ["/path/to/elastic-stack-ca.crt"] elasticsearch.username: "kibana_system" elasticsearch.password: "password" server.ssl.enabled: true server.ssl.certificate: /path/to/kibana.crt server.ssl.key: /path/to/kibana.key
- Bước 2: Khởi động lại Kibana
Khởi động lại Kibana để áp dụng cấu hình mới:
bin/kibana
Cài đặt SSL/TLS nâng cao
Mutual TLS (mTLS) bổ sung thêm một lớp bảo mật bằng cách yêu cầu cả máy chủ và máy khách xác thực lẫn nhau bằng chứng chỉ.
- Bước 1: Cấu hình Elasticsearch cho mTLS
Trong tệp elasticsearch.yml, hãy bật xác thực máy khách:
xpack.security.http.ssl.client_authentication: required xpack.security.http.ssl.certificate_authorities: ["/path/to/elastic-stack-ca.crt"]
- Bước 2: Cấu hình máy khách cho mTLS
Khi thực hiện yêu cầu, hãy đảm bảo máy khách sử dụng chứng chỉ do CA ký:
curl --cert /path/to/client.crt --key /path/to/client.key --cacert /path/to/elastic-stack-ca.crt https://localhost:9200
Điều chỉnh hiệu suất SSL/TLS
- Bước 1: Bật Session Caching
Bật Session Caching để cải thiện hiệu suất cho các kết nối lặp lại:
xpack.security.transport.ssl.session_cache_size: 1000 xpack.security.transport.ssl.session_cache_timeout: 5m
- Bước 2: Sử dụng Bộ mã hóa mạnh
Đảm bảo bạn sử dụng bộ mã hóa mạnh và an toàn:
xpack.security.transport.ssl.supported_protocols: [ "TLSv1.2", "TLSv1.3" ] xpack.security.http.ssl.supported_protocols: [ "TLSv1.2", "TLSv1.3" ]
Quản lý kiểm soát truy cập
RBAC là phương pháp điều chỉnh quyền truy cập vào hệ thống hoặc mạng dựa trên vai trò của từng người dùng trong một tổ chức. Các vai trò xác định hành động nào người dùng có thể thực hiện và dữ liệu nào họ có thể truy cập. Trong bối cảnh của Elasticsearch và Kibana, RBAC có thể được sử dụng để hạn chế quyền truy cập vào các tài liệu hoặc trường cụ thể trong một chỉ mục.
Điều kiện tiên quyết:
- Elasticsearch và Kibana đã được cài đặt và chạy tốt.
- Hiểu kiến thức cơ bản về chỉ mục, tài liệu và REST API của Elasticsearch .
- Tính năng bảo mật X-Pack được bật trong thiết lập Elasticsearch của bạn.
Bật tính năng bảo mật X-Pack
Các tính năng bảo mật của X-Pack phải được bật để sử dụng RBAC trong Elasticsearch và Kibana. Nếu bạn chưa bật, hãy thực hiện bằng cách thêm cấu hình sau vào tệp elasticsearch.yml của mình:
xpack.security.enabled: true
Tính năng bảo mật (security features) được bật trong thiết lập Elasticsearch của bạn.
Thiết lập kiểm soát truy cập dựa trên vai trò
Để quản lý RBAC dựa trên giá trị trường, bạn thực hiện các bước sau:
- Xác định vai trò với bảo mật cấp độ tài liệu và cấp độ trường.
- Tạo người dùng và chỉ định vai trò cho họ.
- Sử dụng các vai trò và người dùng này để kiểm soát quyền truy cập trong Kibana.
Bước 1: Xác định vai trò với bảo mật cấp độ tài liệu và cấp độ trường
Bạn có thể xác định vai trò trong Elasticsearch bằng Kibana UI hoặc REST API. Hãy bắt đầu bằng cách tạo các vai trò hạn chế quyền truy cập dựa trên giá trị trường.
Sử dụng Kibana:
- Elasticsearch 7.x: Management > Security > Roles
- Elasticsearch 8.x: Stack Management > Security > Roles
- Nhấp vào Create role.
- Xác định tên vai trò và quyền chỉ mục.
- Sử dụng Document Level Security để thêm truy vấn lọc tài liệu dựa trên giá trị trường.
- Sử dụng Field Level Security để hạn chế quyền truy cập vào các trường cụ thể.
Sử dụng REST API:
Sau đây là ví dụ về cách tạo vai trò bằng REST API :
curl -X POST "localhost:9200/_security/role/sales_role" -H 'Content-Type: application/json' -d' { "indices": [ { "names": [ "sales_data" ], "privileges": [ "read" ], "query": { "term": { "department": "sales" } }, "field_security": { "grant": [ "customer_name", "purchase_amount", "department" ] } } ] }'
Bước 2: Tạo người dùng và chỉ định vai trò
Sử dụng Kibana:
- Mở Kibana và đi tới Management > Security > Users.
- Nhấp vào Create user.
- Điền tên người dùng, mật khẩu và chỉ định vai trò bạn đã tạo.
Sử dụng REST API:
Tạo người dùng và chỉ định vai trò bằng REST API :
curl -X POST "localhost:9200/_security/user/john_doe" -H 'Content-Type: application/json' -d' { "password" : "password123", "roles" : [ "sales_role" ], "full_name" : "John Doe", "email" : "john.doe@example.com" }'
Bước 3: Xác minh quyền kiểm soát truy cập
Để xác minh rằng kiểm soát truy cập đang hoạt động, hãy đăng nhập vào Kibana với tư cách là người dùng bạn đã tạo và thử truy cập dữ liệu.
Ví dụ: Truy vấn dữ liệu với quyền truy cập bị hạn chế – Đăng nhập với tên john_doe và thực hiện truy vấn tìm kiếm:
curl -u john_doe:password123 -X GET "localhost:9200/sales_data/_search" -H 'Content-Type: application/json' -d' { "query": { "match_all": {} } }'
Output: Phản hồi chỉ nên bao gồm các tài liệu từ chỉ mục sales_data trong đó giá trị trường department là sales và chỉ nên hiển thị các trường customer_name, purchase_amount và department:
{ "took": 5, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1.0, "hits": [ { "_index": "sales_data", "_id": "1", "_score": 1.0, "_source": { "customer_name": "Alice Smith", "purchase_amount": 100, "department": "sales" } } ] } }
Câu hỏi thường gặp về Elasticsearch tutorial
Elasticsearch có yêu cầu giấy phép không?
Elasticsearch là công cụ tìm kiếm và phân tích dữ liệu mã nguồn mở, được cung cấp miễn phí theo Giấy phép Elastic. Bạn có thể tải xuống và sử dụng Elasticsearch mà không phải trả phí. Tuy nhiên, cần lưu ý rằng phiên bản miễn phí này có một số hạn chế.
Cụ thể, một số tính năng nâng cao của Elasticsearch như:
- Học máy (Machine Learning)
- Bảo mật (Security)
- Các chức năng quản lý nâng cao (Advanced Management Functions)
Những tính năng này có thể bị giới hạn hoặc chỉ khả dụng trong các phiên bản trả phí.
Vì vậy, khi sử dụng phiên bản miễn phí của Elasticsearch, bạn nên:
- Kiểm tra kỹ các điều khoản và điều kiện của Giấy phép Elastic để hiểu rõ những tính năng nào được phép sử dụng.
- Cân nhắc nhu cầu của dự án để quyết định xem phiên bản miễn phí có đáp ứng được yêu cầu hay không, hoặc có cần thiết phải nâng cấp lên phiên bản trả phí để tận dụng đầy đủ các tính năng nâng cao hay không.
Elasticsearch có thể xử lý bao nhiêu tài liệu?
Theo mặc định, Elasticsearch giới hạn số lượng tài liệu được trả về trong một truy vấn duy nhất để ngăn chặn việc tiêu thụ tài nguyên quá mức. Giới hạn mặc định được đặt ở mức 10.000 tài liệu.
Nếu chỉ mục chứa nhiều hơn 10.000 tài liệu, việc chạy truy vấn “match_all” sẽ không trả về tất cả các tài liệu trong một truy vấn duy nhất. Thay vào đó, Elasticsearch sẽ chỉ trả về 10.000 tài liệu đầu tiên. Điều này được gọi là giới hạn “index.max_result_window”.
Có thể học Elasticsearch ở đâu?
- Elasticsearch Masterclass For Java Spring Developers [2025]: Các khái niệm cốt lõi của Elasticsearch (index, shard, replica…); tổng hợp số liệu; lập chỉ mục hàng loạt & tối ưu hóa truy vấn; tích hợp Spring Boot; tìm kiếm toàn văn bản; mô hình hóa dữ liệu; bảo mật – xác thực SSL/TLS…
- Elasticsearch Masterclass [Incl., Elasticsearch 7 update]: Tìm hiểu toàn bộ Elastic Stack (Elasticsearch – Logstash – Kibana)
- ElasticSearch as you have never known it before: Từ hệ thống tìm kiếm cơ bản đến nâng cao, mô-đun đề xuất, tích hợp php/python/java tại ví dụ thực tế Elasticsearch.
- Elasticsearch 8 and the Elastic Stack: Chi tiết và thực hành tìm kiếm Elastic hoàn chỉnh – tìm kiếm, phân tích và trực quan hóa dữ liệu lớn với Elasticsearch, Kibana, Logstash và Beats;
- Elasticsearch Queries In Practice: Hướng dẫn đầy đủ về Elasticsearch Query DSL, Search API, tối ưu hóa & điều chỉnh.
Tổng kết Elasticsearch tutorial
Khả năng mở rộng linh hoạt và hiệu suất vượt trội của Elasticsearch cho phép các kỹ sư giải quyết thách thức về dữ liệu lớn. Từ việc xây dựng các ứng dụng tìm kiếm phức tạp đến phân tích truy cập và giám sát hệ thống, Elasticsearch cung cấp một bộ công cụ mạnh mẽ để tối ưu hóa hiệu suất và đưa ra quyết định dựa trên dữ liệu. Hãy khám phá Elasticsearch theo hướng dẫn ITviec vừa chia sẻ để nâng cao khả năng xử lý dữ liệu và xây dựng các giải pháp tiên tiến trong lĩnh vực IT.