Elasticsearch Cheatsheet - Các lệnh hữu ích khi gặp rắc rối

Nếu bạn đã làm việc với Elasticsearch (cho dù là một phần của ELK Stack hay không), tôi chắc chắn rằng bạn biết sản phẩm đó tuyệt vời như thế nào. Nhưng vấn đề là nó có thể đi từ tuyệt vời đến bực bội trong vòng chưa đầy một phút. Thực sự, thực sự rất bực bội.

Đó là lý do tại sao chúng tôi đã biên soạn một bảng các lệnh gọi API để giải quyết các vấn đề mà chúng tôi thường xuyên gặp phải. Chúng tôi chắc chắn rằng chúng tôi không phải là những người duy nhất!

Thay vì xem qua các tài liệu của Elasticsearch hoặc cố gắng tìm giải pháp trong các câu trả lời trên Stack Overflow, chỉ cần lưu bài viết này vào mục yêu thích của bạn và truy cập vào lúc cần thiết.

Thời điểm cần thiết là gì? Ồ, bạn sẽ biết điều đó khi nó đến.

Giới thiệu ngắn gọn về các API Elasticsearch

Elasticsearch có một bộ API mở rộng mà bạn có thể truy vấn hoặc thay đổi trong thời gian chạy. Mỗi lệnh gọi API có một ngữ cảnh, thường là “cluster”, “node” hoặc “index”.

Điều đó có nghĩa là một số API thay đổi mọi thứ trên toàn bộ cụm, một số chỉ dành cho một nút cụ thể và một số dành cho một index cụ thể.

Khi thay đổi cài đặt cụm, bạn có hai tùy chọn:

  • Tạm thời - Các thay đổi sẽ không tồn tại sau khi khởi động lại toàn bộ cụm.
  • Liên tục - Các thay đổi sẽ được lưu sau khi khởi động lại toàn bộ cụm.

Hầu hết các thay đổi dưới đây sẽ chỉ là tạm thời. Nếu bạn muốn chúng tồn tại lâu dài, hãy thay đổi chúng trong cấu hình Elasticsearch của bạn (và làm cho chúng tạm thời trong thời gian chờ đợi).

Lưu ý quan trọng: Các thay đổi tạm thời sẽ liên tục khi một nút khởi động lại hoặc một nút mới tham gia vào một cụm. Nút chính sẽ tự động đồng bộ hóa các thay đổi cho bạn.
Một lưu ý quan trọng khác: Các thay đổi tạm thời được ưu tiên hơn các thay đổi liên tục, và được ưu tiên hơn so với tệp cấu hình. Chỉ cần nhớ điều đó.

Bất cứ khi nào bạn thay đổi cài đặt tạm thời, hãy đảm bảo rằng bạn hoàn nguyên chúng về cấu hình trước đó của mình. Một số thay đổi có thể làm cạn kiệt cụm và chỉ nên được sử dụng để giúp khôi phục. Bảng sau đây bao gồm một số lệnh curl Elasticsearch.

Các lệnh cho index Elasticsearch

Liệt kê tất cả các index Elasticsearch

curl -X GET ‘http://localhost:9200/_cat/indices?v

Hoặc là:

curl -v "localhost:9200/_cat/indices"

Bạn cũng có thể thực hiện việc này trong Kibana Console bằng cách truy vấn GET _cat/indices.

Xóa index Elasticsearch

curl -X DELETE 'http://localhost:9200/examples'

Sao lưu index Elasticsearch

curl -XPOST --header 'Content-Type: application/json' http://localhost:9200/_reindex -d '{
  "source": {
    "index1": "someexamples"
  },
  "dest": {
    "index2": "someexamples_copy"
  }
}'

Liệt kê tất cả các document trong một index

curl -X GET 'http://localhost:9200/elasticsearch_query_examples/_search'

Liệt kê tất cả dữ liệu

curl -XPUT --header 'Content-Type: application/json' http://localhost:9200/elasticsearch_query_examples/_doc/1 -d '{
   "value1" : "value2"
}'

Các truy vấn Elasticsearch

Có một số lệnh cơ bản khác nhau để truy vấn Elasticsearch. Để biết thêm thông tin về điều này, hãy xem danh sách các truy vấn Elasticsearch và API truy vấn Elasticsearch của chúng tôi .

Truy vấn với Tham số URL

curl -X GET http://localhost:9200/elasticsearch_query_examples/_search?q=hypocrite_senator

Truy vấn với Elasticsearch Query DSL

curl -XGET --header 'Content-Type: application/json' http://localhost:9200/examples/_search -d '{
      "query" : {
        "match" : { "hypocrite_senator": "graham-lindsey" }
    }
}'

Theo ngày

curl GET filebeat-7.10.0-2020.11.03-000001/_search
{
    "query": {
        "range" : {
            "timestamp": {
              "event.created": {
                  "time_zone": "+02:00"
                  "gte" : "now-15d/d"
                  "lt" : “now” 
              }
            }
        }
    }
}

Cách lệnh cho cụm Elasticsearch

Di chuyển các phân đoạn từ nút này sang nút khác

Khi nào cần thực hiện:

Khi có quá nhiều phân đoạn nóng nằm trong một nút dữ liệu và bạn muốn trải chúng ra theo cách thủ công. Elasticsearch không xem xét những điều này khi đặt các phân đoạn trên toàn cụm, vì vậy đôi khi cần phải di chuyển chúng theo cách thủ công.

Lệnh cURL:

curl -XPOST 'http://localhost:9200/_cluster/reroute' -d '{
    "commands" : [
        {
            "move" :
            {
                "index" : "indexname", 
                "shard" : 1,
                "from_node" : "nodename",
                "to_node" : "nodename"
            }
        }
    ]
}';echo

Phân bổ một phân đoạn chưa được chỉ định

Khi nào cần thực hiện:

Đôi khi bạn có các phân đoạn chưa được chỉ định trong một cụm, nhưng bạn không thể tìm ra lý do tại sao. Nó có thể có nhiều nguyên nhân như thiếu không gian hoặc phân đoạn bị lỗi.

Điều này sẽ xuất ra rất nhiều dữ liệu dài dòng. Nếu bạn nhìn vào cuối đầu ra, bạn sẽ thấy lý do cho việc không được phân bổ.

Lưu ý: Tùy chọn ?explain cũng có thể được áp dụng cho lệnh curl trước đó để tìm lý do nếu bạn không thể di chuyển phân đoạn.

Lệnh cURL:

curl -XPOST 'http://localhost:9200/_cluster/reroute?explain' -d '{
    "commands" : [ 
        {
            "allocate" : {
                "index" : "indexname", 
                "shard" : 0, 
                "node" : "nodename"
            }
        } 
    ]
}';echo

Xóa các nút khỏi cụm

Khi nào cần thực hiện:

Khi bạn muốn ngừng một nút hoặc thực hiện bất kỳ bảo trì nào mà không để cụm chuyển sang yellow hoặc red (tùy thuộc vào cài đặt bản sao của bạn).

Lưu ý: Nếu bạn rút một nút và muốn đưa nó trở lại cụm sau đó, bạn cần gọi lại lệnh đó với trường IP trống.

Lệnh cURL:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "transient" :{
        "cluster.routing.allocation.exclude._ip" : "192.168.10.124"
    }
}';echo

Xóa đồng bộ hóa

Khi nào cần thực hiện:

Trước khi bạn khởi động lại một nút mà bạn không xóa khỏi cụm. Điều này sẽ đặt một ID đồng bộ hóa trên tất cả các index và miễn là bạn không ghi vào chúng, thời gian khôi phục của các phân đoạn đó sẽ nhanh hơn đáng kể.

Lệnh cURL:

curl -XPOST 'localhost:9200/_flush/synced'

Thay đổi số lượng phân đoạn để cân bằng cụm

Khi nào cần thực hiện:

Đặt lệnh cURL bên dưới thành 0 sẽ hữu ích nếu bạn có kế hoạch bảo trì và không muốn cụm bắt đầu di chuyển các phân đoạn. Đặt giá trị cao hơn sẽ giúp cân bằng lại cụm khi một nút mới tham gia vào cụm.

Lệnh cURL:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "transient" :{
        "cluster.routing.allocation.cluster_concurrent_rebalance" : 2
    }
}';echo

Thay đổi số lượng phân đoạn được khôi phục đồng thời trên mỗi nút

Khi nào cần thực hiện:

Nếu một nút đã bị ngắt kết nối khỏi cụm, tất cả các phân đoạn của nó sẽ không được gán. Sau một thời gian trễ nhất định, các phân đoạn sẽ được phân bổ ở một nơi khác. Số lượng phân đoạn đồng thời trên mỗi nút sẽ được khôi phục được xác định bởi cài đặt đó.

Lệnh cURL:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "transient" :{
        "cluster.routing.allocation.node_concurrent_recoveries" : 6
    }
}';echo

Thay đổi tốc độ khôi phục

Khi nào cần thực hiện:

Để tránh quá tải cụm, Elasticsearch giới hạn tốc độ được phân bổ cho khôi phục. Bạn có thể thay đổi cài đặt đó một cách cẩn thận để khôi phục nhanh hơn.

Lệnh cURL:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "transient" : {
        "indices.recovery.max_bytes_per_sec" : "80mb"
    }
}';echo

Thay đổi số lượng luồng đồng thời để khôi phục trên một nút

Khi nào cần thực hiện:

Nếu một nút bị lỗi và bạn muốn tăng tốc độ khôi phục, bạn có thể thay đổi cài đặt này. Đảm bảo theo dõi cụm để không tải lên quá nhiều.

Lệnh cURL:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "transient" :{
        "indices.recovery.concurrent_streams" : 6
    }
}';echo

Thay đổi kích thước của hàng đợi tìm kiếm

Khi nào cần thực hiện:

Nếu cụm của bạn đã được tải và mất quá nhiều thời gian để trả lời các truy vấn tìm kiếm, bạn có thể thay đổi cài đặt một cách cẩn thận để không bỏ qua các tìm kiếm. (Nếu bạn thấy chỉ số "rejected" tăng lên cho bất kỳ hàng đợi nào, thì đề xuất này có thể áp dụng.)

Lệnh cURL:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "transient" :{
        "threadpool.search.queue_size" : 2000
    }
}';echo

Xóa bộ nhớ cache trên một nút

Khi nào cần thực hiện:

Nếu một nút đạt đến giá trị JVM cao, bạn có thể gọi API này như một hành động tức thì ở cấp nút để Elasticsearch xóa bộ nhớ đệm. Nó sẽ làm ảnh hưởng đến hiệu suất, nhưng có thể giúp bạn thoát khỏi tình trạng hết bộ nhớ (OOM - Out Of Memory).

Lệnh cURL:

curl -XPOST 'http://localhost:9200/_cache/clear'

Điều chỉnh bộ ngắt mạch

Khi nào cần thực hiện:

Để tránh không bị tình trạng hết bộ nhớ (OOM) trong Elasticsearch, bạn có thể điều chỉnh cài đặt trên bộ ngắt mạch. Điều này sẽ giới hạn bộ nhớ tìm kiếm và loại bỏ tất cả các tìm kiếm được ước tính tiêu tốn nhiều bộ nhớ hơn mức mong muốn đó.

Lưu ý: Đây là một cài đặt thực sự tinh vi mà bạn cần phải hiệu chỉnh cẩn thận.

Lệnh cURL:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "persistent" : {
        "indices.breaker.total.limit" : "40%"
    }
}'; echo

Hiển thị tình trạng cụm

curl --user $pwd  -H 'Content-Type: application/json' -XGET https://1234567876543219876567890.eu-central-1.aws.cloud.es.io:1234/_cluster/health?pretty

Bạn có thể xem qua tình trạng của cụm Elasticsearch của mình bằng cách gọi API health. Api này trả về màu trạng thái cho các mức phân đoạn và mức index:

  • green - tất cả được phân bổ
  • yellow - bản chính được phân bổ bởi không phải bản sao
  • red - phân đoạn cụ thể không được phân bổ.

Mức index được đánh giá bằng phân đoạn xấu nhất; trạng thái cụm sau đó được đánh giá bằng index xấu nhất.

ELK StackDevOpsElasticsearch
Bài Viết Liên Quan:
Khắc phục sự cố 5 lỗi ELK thường gặp
Trung Nguyen 10/07/2021
Khắc phục sự cố 5 lỗi ELK thường gặp

Trong bài viết này chúng tôi đã tổng hợp 5 lỗi ELK phổ biến nhất và hướng dẫn bạn cách khắc phục chúng một cách nhanh chóng.

5 sai lầm hàng đầu với Elasticsearch và cách tránh
Trung Nguyen 09/07/2021
5 sai lầm hàng đầu với Elasticsearch và cách tránh

Trong hướng dẫn này, chúng ta hãy xem xét kỹ hơn 5 trong số những sai lầm phổ biến và cách bạn có thể tránh mắc phải chúng.

10 khái niệm Elasticsearch bạn cần biết
Trung Nguyen 04/07/2021
10 khái niệm Elasticsearch bạn cần biết

Bài viết này cung cấp cho bạn 10 khái niệm quan trọng nhất trong Elasticsearch. Nắm được những khái niệm này giúp bạn bớt vất vả hơn khi học Elasticsearch.

Truy vấn Elasticsearch - Hướng dẫn chi tiết
Trung Nguyen 04/07/2021
Truy vấn Elasticsearch - Hướng dẫn chi tiết

Trong hướng dẫn này, chúng tôi sẽ giúp bạn các cách viết truy vấn Elasticsearch đầy đủ, chi tiết nhất. Giúp bạn tự tin khi làm việc với Elasticsearch.