ELK Elasticsearch Ecosystem
Bắt đầu

Kibana Dev Tools

Dùng Console của Kibana để gửi request REST đến Elasticsearch và đọc response.

Phạm vi bài viết

Bài này dùng Console cho môi trường học tập local. Bạn cần có một Elasticsearch và Kibana đang chạy, thường là tại http://localhost:9200http://localhost:5601. Không chạy các request tạo hoặc xóa dữ liệu thử nghiệm trên cluster production.

Mục lục

Dev Tools Console là gì?

Dev Tools là nhóm công cụ trong Kibana. Trong nhóm đó, Console là trình soạn thảo để gửi request HTTP trực tiếp đến Elasticsearch và hiển thị response ngay bên cạnh. Bạn có thể thử API mà không phải tự viết một ứng dụng hoặc nhớ cú pháp curl cho từng request.

Một request HTTP có ba phần quan trọng:

  • Method mô tả thao tác, chẳng hạn GET để đọc và PUT để tạo hoặc thay thế.
  • Path là đường dẫn API, chẳng hạn /_cluster/health hoặc /books/_doc/1.
  • Body là JSON đi kèm request khi API cần dữ liệu. Ví dụ, request tạo document có body chứa titleyear.

Console phù hợp để học và debug API. Khi cần chạy tự động trong script hoặc pipeline, bạn thường chuyển request sang client Elasticsearch hoặc curl.

Mở Console

Trước tiên, mở Kibana trong trình duyệt. Với cài đặt local phổ biến, địa chỉ là http://localhost:5601.

Đăng nhập Kibana

Đăng nhập bằng tài khoản đã tạo trong bài cài đặt bằng Docker Compose hoặc cài đặt native. Nếu Kibana không mở được, hãy quay lại bài cài đặt và kiểm tra service trước khi dùng Console.

Chọn Dev Tools

Mở menu điều hướng của Kibana, chọn Dev Tools, rồi mở Console. Tên hoặc vị trí menu có thể thay đổi nhẹ giữa các phiên bản Kibana, nhưng Console luôn nằm trong khu vực Dev Tools.

Nhận biết hai vùng làm việc

Editor ở bên trái là nơi viết request. Vùng bên phải hiển thị status code, header và JSON response. Bấm nút chạy hình tam giác của editor, hoặc dùng Ctrl+Enter trên hệ điều hành hỗ trợ phím tắt đó, để gửi request đang chọn.

Mẹo kiểm tra kết nối

Hãy gửi GET / ngay sau khi mở Console. Nếu request này trả về JSON có thông tin cluster, Console đã liên lạc được với Elasticsearch.

Luồng request và response

Console không làm cho Elasticsearch trở thành một phần của trình duyệt. Kibana nhận request từ editor rồi chuyển request đó đến Elasticsearch bằng kết nối server-side.

Về Mermaid

Code block Mermaid trong trang này được Fumadocs chuyển thành component Mermaid ở bước biên dịch. Sơ đồ sẽ được vẽ sau khi trình duyệt tải JavaScript; nếu vừa đổi cấu hình, hãy khởi động lại dev server và tải lại trang.

Luồng này giải thích một số hành vi thường gây nhầm lẫn. Trình duyệt của bạn chỉ cần truy cập được Kibana; nó không nhất thiết phải truy cập trực tiếp cổng Elasticsearch. Ngược lại, Kibana phải kết nối được đến Elasticsearch và có quyền thực thi request.

Đọc một request

Trong Console, một request thường có dạng sau:

GET /books/_search
{
  "query": {
    "match_all": {}
  }
}

Method, path và body

GET là method. /books/_search là path, trong đó books là tên index và _search là API tìm kiếm. JSON sau dòng đầu tiên là body. match_all yêu cầu Elasticsearch trả về các document phù hợp với mọi điều kiện, tức là không lọc document nào.

Bạn có thể đặt nhiều request trong cùng một editor. Dùng một dòng trống để Console nhận biết ranh giới:

GET /_cluster/health

GET /books/_count

Chạy một request cụ thể bằng cách đặt con trỏ bên trong request đó hoặc bôi đen phần request rồi bấm nút chạy. Nếu không chọn đúng request, Console có thể gửi cả khối nhiều request cùng lúc.

Response thường có ba thông tin nên đọc theo thứ tự:

  1. Status code cho biết request thành công hay thất bại. 200 thường là đọc thành công, 201 thường là tạo document thành công, còn 4xx thường là lỗi từ request hoặc quyền truy cập.
  2. Body chứa dữ liệu trả về. Với search, kết quả thường nằm trong hits.hits.
  3. Error message mô tả nguyên nhân khi request thất bại. Đọc phần reason trước khi sửa request.

Ví dụ, cùng một request có trạng thái trước và sau như sau:

GET /books/_count

Trước khi index books tồn tại, response có thể là 404 Not Found và báo index không tồn tại. Sau khi index có document, response thành công có dạng gần như:

{
  "count": 1,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  }
}

Con số count phụ thuộc dữ liệu bạn đã nạp. Đừng so sánh nguyên văn toàn bộ response vì Elasticsearch có thể bổ sung metadata khác nhau giữa các phiên bản.

Gửi request đầu tiên

Kiểm tra cluster

Bắt đầu bằng hai request chỉ đọc. Chúng không tạo hoặc sửa dữ liệu:

GET /

GET /_cluster/health?pretty=true

Request GET / trả về tên cluster và thông tin phiên bản. Request thứ hai trả về sức khỏe cluster. Trong môi trường một node, trạng thái yellow có thể là bình thường vì replica chưa được phân bổ. red cần được điều tra vì một phần dữ liệu không sẵn sàng.

Ví dụ response rút gọn của request health:

{
  "cluster_name": "local-cluster",
  "status": "yellow",
  "number_of_nodes": 1,
  "active_primary_shards": 1
}

Tên cluster, số shard và status trong máy của bạn có thể khác. Điều cần kiểm tra trước tiên là request trả về response JSON, không phải một trang lỗi HTML.

Tạo và xóa index thử nghiệm

Index là nơi Elasticsearch lưu các document có liên quan. Trong bài thực hành này, dùng tên devtools-lab để dễ nhận biết và tránh chạm vào index khác.

Tạo index với một shard chính và không có replica. Cấu hình này tiết kiệm tài nguyên cho máy học tập một node; nó không phải cấu hình production:

PUT /devtools-lab
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  }
}

Response thành công thường có "acknowledged": true. Kiểm tra index vừa tạo:

GET /devtools-lab

Bây giờ thêm một document với ID cố định. Dùng PUT giúp bạn chạy lại ví dụ mà không tạo thêm ID ngẫu nhiên:

PUT /devtools-lab/_doc/1
{
  "title": "Học Console",
  "topic": "elasticsearch",
  "difficulty": "beginner"
}

Đọc lại document:

GET /devtools-lab/_doc/1

Bạn sẽ thấy dữ liệu trong trường _source. Khi đã kiểm tra xong, xóa đúng index thử nghiệm:

DELETE /devtools-lab

Kiểm tra tên trước khi DELETE

DELETE /devtools-lab xóa toàn bộ index và document bên trong. Luôn kiểm tra path, chỉ dùng tên devtools-lab trong bài này, và không chạy lệnh xóa trên dữ liệu production. Nếu chỉ muốn xóa một document, dùng API _doc/1 với đúng ID thay vì xóa cả index.

Tính năng giúp viết request nhanh hơn

Console có các tính năng hỗ trợ việc học API:

  • Autocomplete gợi ý endpoint, tên field và một số tham số khi bạn gõ. Chọn gợi ý để giảm lỗi chính tả, nhưng vẫn đọc request mà nó chèn vào.
  • Syntax highlighting tô màu method, path và JSON. Nếu cả body bị tô như một dòng chữ, kiểm tra dấu ngoặc kép và dấu phẩy.
  • History cho phép xem lại các request đã chạy trong Console. Dùng history để phục hồi một request dài thay vì viết lại từ đầu. Hãy xem lại path trước khi chạy lại request có tác dụng ghi hoặc xóa.
  • Nhiều request trong một editor giúp bạn lưu một chuỗi kiểm tra liên quan. Dòng trống giữa các request làm ranh giới rõ ràng hơn.

Tạo thói quen an toàn

Đặt các request đọc như GET ở đầu file và request ghi/xóa ở cuối file. Trước khi chạy khối nhiều request, chọn đúng request cần chạy và đọc lại method cùng index.

Console và curl khác nhau như thế nào?

Hai cách đều gửi HTTP request đến Elasticsearch, nhưng đường đi và cách cung cấp thông tin xác thực khác nhau:

Tiêu chíKibana Consolecurl
Điểm bắt đầuEditor trong KibanaTerminal hoặc script
Kết nốiKibana chuyển tiếp request đến ElasticsearchMáy chạy curl kết nối trực tiếp đến Elasticsearch
Xác thựcThường dùng phiên đăng nhập Kibana và quyền của người dùngBạn phải truyền credential, token hoặc certificate phù hợp
Khả năng lặp lạiTốt cho khám phá API và xem historyTốt cho script, CI và kiểm thử tự động
HeaderConsole xử lý phần lớn header cho request JSONBạn thường phải tự thêm Content-Type và thông tin xác thực

Ví dụ kiểm tra health bằng curl trong môi trường local có bảo mật và tài khoản elastic:

export ELASTICSEARCH_URL="https://localhost:9200"
export ELASTIC_PASSWORD="thay-bang-mat-khau-local"

curl --fail-with-body --insecure \
  -u "elastic:${ELASTIC_PASSWORD}" \
  "${ELASTICSEARCH_URL}/_cluster/health?pretty=true"

--insecure bỏ qua việc kiểm tra certificate. Chỉ dùng tùy chọn này cho certificate local mà bạn hiểu rõ; không dùng nó như giải pháp TLS cho production. Với cài đặt HTTP không bật TLS, đổi URL thành http://localhost:9200 và bỏ --insecure.

Khi chuyển request ghi từ Console sang curl, thêm header JSON và body đúng định dạng:

curl --fail-with-body --insecure \
  -u "elastic:${ELASTIC_PASSWORD}" \
  -H 'Content-Type: application/json' \
  -X PUT "${ELASTICSEARCH_URL}/devtools-lab/_doc/1" \
  -d '{"title":"Học Console","topic":"elasticsearch","difficulty":"beginner"}'

Console giúp bạn khám phá request an toàn hơn trong giao diện. curl giúp bạn biến cùng request thành lệnh có thể đưa vào script. Trước khi tự động hóa, hãy chạy thử request trong Console và xác nhận response mong đợi.

Xử lý lỗi thường gặp

Bài tập nhỏ

Hoàn thành bài tập sau trong một index local riêng. Mục tiêu là đi qua đủ vòng đời request mà không cần dùng dữ liệu có sẵn:

  1. Tạo index devtools-practice với một shard và không có replica.
  2. Thêm hai document vào devtools-practice/_doc/1devtools-practice/_doc/2. Mỗi document có title, categorypublished_year.
  3. Dùng GET /devtools-practice/_search với match_all để đọc hai document.
  4. Dùng GET /devtools-practice/_count để kiểm tra tổng số document.
  5. Xóa một document bằng ID, kiểm tra lại _count, rồi xóa cả index devtools-practice.

Gợi ý request tìm kiếm:

GET /devtools-practice/_search
{
  "query": {
    "match": {
      "category": "elasticsearch"
    }
  }
}

Nếu category được tạo động là field văn bản, match phù hợp hơn term cho bài đầu tiên. Bài truy vấn đầu tiên sẽ giải thích rõ hơn sự khác nhau giữa tìm kiếm toàn văn và lọc giá trị chính xác.

Bước tiếp theo

Bạn đã biết cách mở Console, kiểm tra cluster, tạo document và đọc response. Hãy học theo thứ tự sau:

On this page