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.
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:
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.
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
.
curl -X DELETE 'http://localhost:9200/examples'
curl -XPOST --header 'Content-Type: application/json' http://localhost:9200/_reindex -d '{
"source": {
"index1": "someexamples"
},
"dest": {
"index2": "someexamples_copy"
}
}'
curl -X GET 'http://localhost:9200/elasticsearch_query_examples/_search'
curl -XPUT --header 'Content-Type: application/json' http://localhost:9200/elasticsearch_query_examples/_doc/1 -d '{
"value1" : "value2"
}'
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 .
curl -X GET http://localhost:9200/elasticsearch_query_examples/_search?q=hypocrite_senator
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”
}
}
}
}
}
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
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
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
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'
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
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
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
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
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
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'
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
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:
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.
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
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.
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.
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.
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.