Trong quá trình sử dụng Elasticsearch, đôi khi bạn cần xóa các Index không còn cần thiết để giải phóng dung lượng lưu trữ hoặc đơn giản hóa việc quản lý dữ liệu. Bài viết này sẽ hướng dẫn bạn từng bước cách delete Index Elasticsearch, từ những thao tác cơ bản đến các phương pháp nâng cao, giúp bạn thực hiện việc xóa index một cách hiệu quả và an toàn.

Bạn sẽ tìm thấy trong bài viết này:

  • Cách xóa Index trong Elasticsearch
  • Những điều cần lưu ý khi xóa Index trong Elasticsearch
  • Hướng dẫn quản lý Index hiệu quả
  • Các câu hỏi thường gặp khi xóa Index trong Elasticsearch

Đọ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

Hướng dẫn delete index Elasticsearch: Sử dụng REST API

Xóa một Index sẽ xóa các tài liệu, phân đoạn và siêu dữ liệu của Index đó. Nó không xóa các thành phần Kibana liên quan, chẳng hạn như chế độ xem dữ liệu, hình ảnh trực quan hoặc bảng điều khiển. Bạn không thể xóa write index của luồng dữ liệu.

Để xóa index, bạn phải di chuyển luồng dữ liệu để tạo write index mới. Sau đó, bạn có thể sử dụng API để xóa write index trước đó. Nếu tính năng bảo mật Elasticsearch được bật, bạn phải có quyền delete_index hoặc manage cho index mục tiêu. Lưu ý rằng việc xóa index là không thể hoàn tác, nên cân nhắc sao lưu dữ liệu trước khi thực hiện.

Các tham số quan trọng:

Tham số đường dẫn: <index>

Danh sách các index được phân tách bằng dấu phẩy để xóa. Bạn không thể chỉ định index aliases. Theo mặc định, tham số này không hỗ trợ ký tự đại diện ( *) hoặc _all. Để sử dụng ký tự đại diện hoặc _all, hãy đặt action.destructive_requires_name cài đặt cluster thành false trong tệp cấu hình Elasticsearch hoặc qua API:

PUT _cluster/settings
{
  "persistent": {
    "action.destructive_requires_name": false
  }
}

Tham số truy vấn

allow_no_indices

Nếu false, request sẽ báo lỗi nếu có bất kỳ biểu thức wildcard nào được sử dụng (ví dụ: foo*), index aliases hoặc giá trị _all nào chỉ nhắm mục tiêu đến các index bị thiếu hoặc đã đóng. Hành vi này áp dụng ngay cả khi yêu cầu nhắm mục tiêu đến các open index khác. Ví dụ: yêu cầu nhắm mục tiêu foo*,bar* trả về lỗi nếu index bắt đầu bằng foo nhưng không có index nào bắt đầu bằng bar.

Mặc định là true.

expand_wildcards

Tham số xác định loại index mà các biểu thức wildcard có thể áp dụng. Trong trường hợp yêu cầu có thể tác động đến luồng dữ liệu , tham số này quy định việc các biểu thức wildcard có bao gồm luồng dữ liệu ẩn hay không. Hỗ trợ nhập liệu nhiều giá trị phân tách bằng dấu phẩy, ví dụ: open,hidden.

Các giá trị hợp lệ bao gồm:

  • all: Phù hợp với bất kỳ luồng dữ liệu hoặc index nào, bao gồm cả dữ liệu ẩn .
  • open: Phù hợp với các open index, không ẩn. Cũng phù hợp với bất kỳ luồng dữ liệu không ẩn nào.
  • closed: Phù hợp với các index đã đóng, không ẩn. Cũng phù hợp với bất kỳ luồng dữ liệu nào không ẩn. Không thể đóng luồng dữ liệu.
  • hidden: Phù hợp với luồng dữ liệu ẩn và index ẩn. Phải kết hợp với open, closed, hoặc cả hai.
  • none: Không chấp nhận mẫu wildcard.

Mặc định là open,closed.

ignore_unavailable

Nếu false, yêu cầu sẽ trả về lỗi trong trường hợp nó nhắm mục tiêu vào index bị thiếu hoặc đã đóng. Mặc định là false.

master_timeout

Khoảng thời gian chờ cho master node. Nếu master node không khả dụng trước khi hết thời gian chờ, yêu cầu sẽ không thành công và trả về lỗi, mặc định là 30s. Cũng có thể được đặt thành -1 để chỉ ra rằng yêu cầu không bao giờ hết thời gian chờ.

timeout

Khoảng thời gian chờ phản hồi từ tất cả các node có liên quan trong cluster sau khi cập nhật cluster metadata. Nếu không nhận được phản hồi trước khi hết thời gian chờ, bản cập nhật cluster metadata vẫn áp dụng nhưng phản hồi sẽ chỉ ra nó chưa được xác nhận hoàn toàn. Mặc định là 30s hoặc cũng có thể được đặt thành -1 để chỉ ra yêu cầu không bao giờ hết thời gian chờ.

Hướng dẫn delete index Elasticsearch: Sử dụng Kibana Dev Tools

  • Mở Kibana: Đi tới phần Dev Tools trong Kibana.
  • Thực hiện lệnh DELETE: Chạy lệnh DELETE cho các index bạn muốn xóa:
DELETE /index_name

Để xóa nhiều index  khớp với một mẫu: 

DELETE /logs-2023-01-*
  • Xác nhận xóa: Kiểm tra trạng thái để đảm bảo index đã bị xóa (lệnh này liệt kê tất cả index hiện có để xác nhận index đã được xóa)
GET /_cat/indices?v

Hướng dẫn delete index Elasticsearch: Sử dụng Curator (Tùy chọn)

Elasticsearch Curator là một công cụ dòng lệnh để quản lý các index và ảnh chụp nhanh. Công cụ này hữu ích để tự động hóa các tác vụ như xóa các index cũ.

client:

  hosts: ["localhost"]

  port: 9200
  • Tạo tệp cấu hình Curator: Xác định các hành động Curator của bạn trong tệp YAML (ví dụ: delete_old_indices.yml).
actions:

  1:

    action: delete_indices

    description: "Delete indices older than 30 days"

    options:

      ignore_empty_list: True

      allow_ilm_indices: False

    filters:

      - filtertype: age

        source: creation_date

        direction: older

        unit: days

        value: 30
  • Chạy Curator: Thực thi Curator bằng tệp cấu hình:
curator --config /path/to/curator.yml /path/to/delete_old_indices.yml

Hướng dẫn delete index Elasticsearch: Xóa thủ công (CLI hoặc Script) 

Bạn có thể viết các tập lệnh bằng ngôn ngữ như Python bằng cách sử dụng thư viện elasticsearch-py để xóa các index cũ theo chương trình. Ví dụ với Python:

from elasticsearch import Elasticsearch

es = Elasticsearch(["<http://localhost:9200>"])

# Define index pattern

index_pattern = "logs-2023-01-*"

# List indices matching pattern

indices = es.cat.indices(index=index_pattern, format="json")

# Delete each index

for index in indices:

    index_name = index['index']

    es.indices.delete(index=index_name)

    print(f"Deleted index: {index_name}")

Lưu ý quan trọng:

  • Quyền truy cập: Đảm bảo tài khoản hoặc script có quyền xóa index (indices:admin/delete).
  • Sao lưu: Trước khi xóa, cân nhắc tạo snapshot để tránh mất dữ liệu quan trọng.
  • Kiểm tra cấu hình: Nếu gặp lỗi với wildcard hoặc _all, kiểm tra cài đặt action.destructive_requires_name.

Những điều cần lưu ý khi xóa Index trong Elasticsearch

 

Sao lưu dữ liệu quan trọng: Trước khi xóa index, hãy đảm bảo rằng bạn đã sao lưu mọi dữ liệu quan trọng. Sau khi xóa index, dữ liệu không thể khôi phục được.

Theo dõi tình trạng cluster: Việc xóa index có thể khiến tải cluster tạm thời tăng lên vì các shard được cân bằng lại trên các node. Theo dõi tình trạng cluster trong quá trình xóa để đảm bảo cluster vẫn ổn định.

GET /_cluster/health

Sử dụng alias: Nếu bạn thường xuyên xóa và tạo lại các index có tên tương tự, hãy cân nhắc sử dụng index alias – một kiểu bí danh của index. Alias cho phép bạn chuyển đổi giữa các index khác nhau mà không cần thay đổi mã ứng dụng.

POST /_aliases

{

  "actions": [

    { "add": { "index": "new_index", "alias": "my_alias" } },

    { "remove": { "index": "old_index", "alias": "my_alias" } }

  ]

}

Tối ưu hóa quản lý vòng đời index (ILM): Elasticsearch cung cấp các chính sách ILM để tự động hóa các tác vụ quản lý index, chẳng hạn như chuyển đổi, thu nhỏ và xóa. Thông qua ILM, bạn có thể đảm bảo các index sẽ bị xóa khi không còn cần thiết, giảm sự can thiệp thủ công.

PUT _ilm/policy/my_policy

{

  "policy": {

    "phases": {

      "delete": {

        "min_age": "30d",

        "actions": {

          "delete": {}

        }

      }

    }

  }

}

Ngoài ra, trước khi xóa Index trong Elasticsearch, bạn cũng lưu ý một số rủi ro tiềm ẩn như:

  • Hiệu suất cluster: Việc xóa một index lớn hoặc nhiều index cùng lúc có thể khiến tăng vọt tạm thời về tải xử lý của cluster, ảnh hưởng đến hiệu suất. Để giảm thiểu tác động, hãy cân nhắc xóa index trong thời gian cluster hoạt động thấp.
  • Mất dữ liệu: Xóa index sẽ xóa vĩnh viễn dữ liệu trong đó. Đảm bảo rằng bạn đã sao lưu mọi dữ liệu quan trọng trước khi tiến hành xóa.
  • Bảo mật: Đảm bảo rằng chỉ những người dùng được ủy quyền mới có khả năng xóa index. Cấu hình các tính năng bảo mật của Elasticsearch, chẳng hạn như kiểm soát truy cập dựa trên vai trò, để hạn chế quyền truy cập vào các hoạt động nhạy cảm.

Hướng dẫn quản lý Index trong Elasticsearch hiệu quả

Việc quản lý index tốt sẽ giúp quá trình xóa index diễn ra hiệu quả và an toàn hơn, đồng thời giảm thiểu các tác động tiêu cực có thể xảy ra, cụ thể như:

  • Dễ dàng xác định index cần xóa: Khi có một hệ thống quản lý index tốt, bạn sẽ có thông tin chi tiết về từng index, bao gồm: Bảng và cột mà index được tạo trên đó, loại index, mục đích sử dụng của index, tần suất sử dụng index, kích thước của index, thời điểm index được tạo hoặc lần cuối cùng được sử dụng.
  • Đánh giá tác động trước khi xóa: Quản lý index tốt thường bao gồm theo dõi hiệu suất truy vấn và xác định những index nào không còn mang lại lợi ích hoặc thậm chí gây ra chi phí bảo trì không cần thiết. Trước khi xóa một index, bạn có thể đánh giá tác động lên các truy vấn hiện tại. Ví dụ nếu một index vẫn đang được sử dụng thường xuyên bởi các truy vấn quan trọng, việc xóa nó sẽ làm chậm các truy vấn này.
  • Lập kế hoạch xóa index hiệu quả: Quản lý index giúp xác định thời điểm thích hợp để xóa index. Ví dụ, bạn quyết định xóa các index không còn cần thiết sau đợt báo cáo định kỳ hoặc khi một tính năng không còn được sử dụng.
  • Giảm thiểu rủi ro xóa nhầm index quan trọng: Điều này nhờ vào việc bạn đã có cái nhìn tổng quan và ghi chép đầy đủ về các index.

Đọc thêm: Elasticsearch tutorial: Chi tiết cách sử dụng Elasticsearch cơ bản

Dưới đây là những điều cần lưu ý để quản lý index hiệu quả:

1. Tối ưu hóa dữ liệu chuỗi thời gian

Việc sử dụng Elasticsearch để lưu trữ và phân tích dữ liệu chuỗi thời gian, chẳng hạn như nhật ký ứng dụng hoặc sự kiện IoT, đòi hỏi việc quản lý khối lượng dữ liệu khổng lồ trong thời gian dài.

Elasticsearch Rollover

Dữ liệu chuỗi thời gian thường được phân bổ trên nhiều index. Một cách đơn giản để thực hiện điều này là tạo một index riêng biệt cho các khoảng thời gian tùy ý, ví dụ: 1 index cho mỗi ngày. Một phương pháp khác là sử dụng Rollover API giúp bạn tự động tạo một index mới khi index chính quá cũ, quá lớn hoặc có quá nhiều tài liệu.

POST /my_alias/_rollover

{

  "conditions": {

    "max_age": "7d",

    "max_docs": 1000000,

    "max_size": "5gb"

  }

}

Elasticsearch Shrink

Khi các index cũ hơn và dữ liệu của chúng trở nên ít liên quan hơn, cần thực hiện 1 số việc để index sử dụng ít tài nguyên hơn, từ đó Elasticsearch có khả năng cung cấp nhiều tài nguyên cho các index hoạt động tích cực hơn. Một trong số đó là sử dụng Shrink API để làm phẳng index thành một shard chính duy nhất.

Ví dụ: Thu nhỏ index xuống 1 shard:

POST /old_index/_shrink/shrunk_index

{

  "settings": {

    "index.number_of_shards": 1

  }

}

Việc có nhiều shards thường mặc dù tốt, nhưng cũng có thể gây ra chi phí phụ cho các index cũ chỉ nhận được các yêu cầu không thường xuyên. Điều này phụ thuộc rất nhiều vào cấu trúc dữ liệu của bạn.

2. Frozen indices (đóng băng index)

Đối với các index rất cũ ít khi được truy cập, việc giải phóng hoàn toàn bộ nhớ mà chúng sử dụng là hợp lý. Elasticsearch 6.6 trở lên cung cấp Freeze API cho phép bạn thực hiện chính xác điều đó. Khi một index bị đóng băng, index đó sẽ trở thành read-only và tài nguyên của index đó ngừng hoạt động.

POST /old_index/_freeze

Các index bị đóng băng tìm kiếm chậm hơn, vì các tài nguyên đó bây giờ phải được cấp phát theo yêu cầu và sau đó bị hủy bỏ. Để ngăn chặn tình trạng chậm truy vấn có thể xảy ra, tham số truy vấn ignore_throttled=false phải được sử dụng để chỉ định rõ ràng bao gồm các index bị đóng băng khi xử lý truy vấn tìm kiếm.

GET /_search?ignore_throttled=false

3. Quản lý vòng đời index

Tính năng Quản lý vòng đời index (ILM) được phát hành trong Elasticsearch 6.7 cho phép bạn tự động hóa các quá trình chuyển đổi. Trong các phiên bản Elasticsearch Stack trước đó, bạn phải thực hiện thủ công hoặc sử dụng các quy trình bên ngoài.

ILM có sẵn theo giấy phép cơ bản của Elasticsearch, cho phép người dùng chỉ định các chính sách xác định thời điểm diễn ra các chuyển đổi này cũng như các hành động được áp dụng trong từng giai đoạn. Bạn có thể sử dụng ILM để thiết lập kiến trúc Hot-Warm-Cold, trong đó các giai đoạn cũng như hành động là tùy chọn và có thể được cấu hình nếu cần:

Hot Index tích cực nhận dữ liệu để lập index và thường xuyên phục vụ các truy vấn. Các hành động điển hình cho giai đoạn này bao gồm: 

  • Đặt mức độ ưu tiên cao cho việc phục hồi;
  • Chỉ định chính sách chuyển tiếp để tạo index mới khi index hiện tại quá lớn, quá cũ hoặc có quá nhiều tài liệu.

Warm Index không còn dữ liệu được lập index trong đó nữa, nhưng chúng vẫn xử lý các truy vấn. Các hành động điển hình cho giai đoạn này bao gồm: 

  • Đặt mức độ ưu tiên trung bình cho việc phục hồi;
  • Tối ưu hóa các index bằng cách thu nhỏ, hợp nhất index hoặc đặt chúng ở chế độ read-only;
  • Phân bổ index cho phần cứng có hiệu suất kém hơn.

Cold Index hiếm khi được hỏi đến với các hành động điển hình cho giai đoạn này bao gồm:

  • Đặt mức độ ưu tiên thấp cho việc phục hồi;
  • Đóng băng các chỉ số;
  • Phân bổ các index cho phần cứng có hiệu suất kém hơn;
  • Xóa các index cũ hơn theo thời gian lưu giữ tùy ý.

Chính sách ILM có thể được thiết lập bằng Elasticsearch REST API hoặc trực tiếp trong Kibana, như được hiển thị trong ảnh chụp màn hình sau:

4. Tổ chức dữ liệu trong Elasticsearch Index

Thông thường, việc quản lý một Elasticsearch index phần lớn tập trung vào việc đảm bảo tính ổn định và hiệu suất. Tuy nhiên, cấu trúc của dữ liệu thực tế đi vào các index này cũng là một yếu tố quan trọng đối với tính hữu dụng của toàn bộ hệ thống.

Cấu trúc này ảnh hưởng đến độ chính xác và tính linh hoạt của các truy vấn tìm kiếm trên dữ liệu đến từ nhiều nguồn dữ liệu khác nhau. Do đó chúng cũng ảnh hưởng đến cách bạn phân tích và trực quan hóa dữ liệu của mình.

Trên thực tế, các chuyên gia khuyến nghị tạo mapping (ánh xạ) cho các index đã tồn tại từ lâu. Mặc dù Elasticsearch có khả năng đoán kiểu dữ liệu dựa trên dữ liệu đầu vào nhận được, nhưng điều này chỉ dựa trên một sample nhỏ của tập dữ liệu và có thể không chính xác. Việc tạo ánh xạ rõ ràng sẽ ngăn ngừa các vấn đề xung đột kiểu dữ liệu trong một index.

Ngay cả với mapping, việc thu thập thông tin chi tiết từ khối lượng dữ liệu lưu trữ trong một Elasticsearch cluster vẫn có thể là một nhiệm vụ khó khăn. Dữ liệu đến từ các nguồn khác nhau có thể có cấu trúc tương tự (ví dụ: địa chỉ IP đến từ IIS, NGINX và nhật ký ứng dụng) có thể được lập index vào các trường có name hoặc kiểu dữ liệu hoàn toàn khác nhau.

Elastic Common Schema (ECS), được phát hành cùng với Elasticsearch 7.x, là một phát triển mới trong lĩnh vực này. Bằng cách đặt một tiêu chuẩn để hợp nhất tên trường và kiểu dữ liệu, việc tìm kiếm và trực quan hóa dữ liệu đến từ nhiều nguồn khác nhau trở nên dễ dàng hơn nhiều. ECS cũng cho phép người dùng tận dụng Kibana để có một chế độ xem thống nhất của các hệ thống riêng biệt mà bạn đang duy trì.

Câu hỏi thường gặp về delete index Elasticsearch

Xóa Index theo truy vấn và xóa hàng loạt trong Elasticsearch khác nhau như thế nào?

Trong quá trình xử lý yêu cầu xóa theo truy vấn, Elasticsearch thực hiện tuần tự nhiều yêu cầu tìm kiếm để tìm tất cả các tài liệu phù hợp cần xóa. Trong khi đó, yêu cầu xóa hàng loạt được thực hiện cho mỗi lô tài liệu phù hợp.

Xóa nhiều Index như thế nào?

Bạn có thể xóa nhiều index cùng lúc bằng cách sử dụng wildcard hoặc danh sách tên index được phân cách bằng dấu phẩy. Ví dụ: để xóa tất cả các index bắt đầu bằng “logstash”:

curl -X DELETE "http://localhost:9200/logstash*"

Hoặc, để xóa các index cụ thể, hãy phân tách chúng bằng dấu phẩy:

curl -X DELETE "http://localhost:9200/index1,index2,index3"

Xóa tất cả các tài liệu khỏi Index như thế nào?

Bạn có thể xóa tất cả các tài liệu khỏi index bằng cách sử dụng:

_delete_by_query

Khi sử dụng truy vấn “match_all”:{} hệ thống sẽ thực hiện so khớp với tất cả các document có trong index. Do đó, thao tác _delete_by_query sẽ tiến hành xóa toàn bộ các document này khỏi index.

POST document-index/_delete_by_query?conflicts=proceed

{

 "query": {

 "match_all": {}

 }

}

Tổng kết delete index Elasticsearch

Xóa index trong Elasticsearch là một thao tác quan trọng để quản lý dữ liệu và tối ưu hóa hiệu suất hệ thống. Bạn có thể sử dụng API hoặc Kibana để thực hiện việc này một cách dễ dàng hoặc một số cách thủ công tùy hoàn cảnh. Tuy nhiên, hãy luôn cẩn trọng và đảm bảo bạn đã sao lưu dữ liệu cần thiết trước khi xóa index, vì thao tác này là không thể phục hồi. Đồng thời, việc hiểu rõ các tùy chọn và tham số liên quan sẽ giúp bạn xóa index một cách chính xác và an toàn.