Elasticsearch và Kibana là hai công cụ mạnh mẽ trong hệ sinh thái Elastic Stack, giúp lưu trữ, tìm kiếm, phân tích và trực quan hóa dữ liệu. Trong bài blog này, mình sẽ cùng tìm hiểu cách cài đặt và cấu hình Elasticsearch và Kibana trên một node Ubuntu, giải thích các thành phần chính, công dụng, và các bước thực hiện chi tiết.
1. Elasticsearch và Kibana là gì?
Elasticsearch
Elasticsearch là một công cụ tìm kiếm và phân tích dữ liệu mã nguồn mở, được xây dựng trên Apache Lucene. Nó hoạt động như một cơ sở dữ liệu NoSQL phân tán, lưu trữ dữ liệu dưới dạng JSON và cho phép tìm kiếm, phân tích dữ liệu nhanh chóng theo thời gian thực. Elasticsearch được thiết kế để xử lý khối lượng dữ liệu lớn, hỗ trợ tìm kiếm full-text, phân tích log, và các ứng dụng như giám sát hệ thống, phân tích dữ liệu kinh doanh.
Một số chức năng cơ bản:
- Tìm kiếm nhanh dữ liệu có cấu trúc và không cấu trúc.
- Phân tích log (ví dụ: log server, ứng dụng).
- Giám sát hệ thống và phát hiện bất thường (anomaly detection).
- Xử lý dữ liệu thời gian thực, như dữ liệu thời gian (time-series) hoặc dữ liệu địa lý.
Kibana
Kibana là một giao diện web mã nguồn mở, được thiết kế để tương tác với Elasticsearch. Nó cung cấp các công cụ trực quan hóa dữ liệu như biểu đồ, bảng, bản đồ, và dashboard, giúp người dùng dễ dàng phân tích và hiểu dữ liệu được lưu trữ trong Elasticsearch.
Công dụng:
- Trực quan hóa dữ liệu từ Elasticsearch thông qua các biểu đồ (line, pie, histogram) hoặc bản đồ.
- Tạo dashboard để giám sát và phân tích dữ liệu theo thời gian thực.
- Quản lý và giám sát Elastic Stack, bao gồm cấu hình và bảo mật.
Tóm tắt: Elasticsearch lưu trữ và tìm kiếm dữ liệu, còn Kibana giúp bạn "nhìn thấy" và tương tác với dữ liệu đó một cách trực quan.
2. Yêu cầu hệ thống
- Hệ điều hành: Ubuntu 22.04 hoặc 24.04 (các bước cũng áp dụng cho các hệ Debian-based khác).
- Phần cứng: Tối thiểu 4GB RAM, 2 CPU, ổ SSD (khuyến nghị 8GB RAM cho môi trường sản xuất).
- Phần mềm: Java (thường được cài tự động với Elasticsearch).
- Mạng: Đảm bảo các port 9200 (Elasticsearch HTTP), 9300 (Elasticsearch transport), và 5601 (Kibana) mở.
3. Cài đặt Elasticsearch version 9.x
Dưới đây là các bước cài đặt Elasticsearch trên Ubuntu, dựa trên hướng dẫn chính thức từ Elastic.
Bước 1: Thêm GPG key và repository
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
sudo apt-get install apt-transport-https
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/9.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-9.x.list
Bước 2: Cài đặt Elasticsearch
sudo apt-get update && sudo apt-get install elasticsearch
Bước 3: Cấu hình Elasticsearch
Chỉnh sửa tệp cấu hình /etc/elasticsearch/elasticsearch.yml
:
sudo nano /etc/elasticsearch/elasticsearch.yml
Thêm hoặc sửa các dòng sau:
cluster.name: my-application
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.65.111 # Thay bằng IP của máy chủ
http.port: 9200
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.http.ssl: enabled: true keystore.path: certs/http.p12
xpack.security.transport.ssl: enabled: true verification_mode: certificate keystore.path: certs/transport.p12 truststore.path: certs/transport.p12
cluster.initial_master_nodes: ["node-1"]
http.host: 0.0.0.0
transport.host: 0.0.0.0
- Giải thích:
cluster.name
: Tên cụm Elasticsearch, dùng để nhóm các node.node.name
: Tên của node hiện tại.path.data
/path.logs
: Đường dẫn lưu dữ liệu và log.network.host
: IP mà Elasticsearch lắng nghe (thay bằng IP máy chủ của bạn).http.port
: Port cho API REST (9200).xpack.security.enabled
: Bật bảo mật (yêu cầu xác thực).xpack.security.http.ssl
/xpack.security.transport.ssl
: Bật SSL cho giao tiếp HTTP và transport.cluster.initial_master_nodes
: Định nghĩa node chính trong cụm.http.host
/transport.host
: Cho phép lắng nghe trên mọi giao diện mạng.
Bước 4: Khởi động Elasticsearch
sudo systemctl start elasticsearch
sudo systemctl status elasticsearch
-
Kiểm tra log nếu có lỗi:
journalctl -u elasticsearch -n 200 --since "-30 min" --no-pager journalctl -u elasticsearch -f
-
Kiểm tra port:
ss -ltnp | egrep ':9200|:9300'
Kết quả mẫu:
LISTEN 0 4096 *:9200 *:* users:(("java",pid=4841,fd=592)) LISTEN 0 4096 *:9300 *:* users:(("java",pid=4841,fd=590))
-
Giải thích port:
- 9200: Port HTTP REST API, dùng để tương tác với Elasticsearch (ví dụ: từ Kibana hoặc ứng dụng bên ngoài).
- 9300: Port Transport API, dùng cho giao tiếp giữa các node trong cụm hoặc với client sử dụng Transport API.
Bước 5: Đăng ký user elastic
Tạo mật khẩu cho user elastic
:
sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i
Ví dụ: Đặt mật khẩu là truongitt
.
-
Kiểm tra đăng ký thành công:
curl -k -u elastic:truongitt https://192.168.65.111:9200/_cluster/health?pretty
{ "cluster_name" : "my-application", "status" : "green", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 41, "active_shards" : 41, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "unassigned_primary_shards" : 0, "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" : 100.0 }
4. Cài đặt và cấu hình Kibana
Bước 1: Cài đặt Kibana
sudo apt-get update && sudo apt-get install kibana
Bước 2: Tạo thư mục lưu trữ chứng chỉ
mkdir -p /etc/kibana/certs
- Giải thích: Tạo thư mục để lưu chứng chỉ SSL cho Kibana.
Bước 3: Tạo chứng chỉ SSL cho Kibana
openssl req -newkey rsa:4096 -nodes -sha256 \ -keyout /etc/kibana/certs/domain.key \ -subj "/CN=192.168.65.111" \ -addext "subjectAltName=IP:192.168.65.111" \ -x509 -days 365 \ -out /etc/kibana/certs/domain.crt
- Tạo cặp khóa SSL (
domain.key
vàdomain.crt
) để bảo mật giao tiếp giữa Kibana và trình duyệt https.
Bước 4: Copy chứng chỉ từ Elasticsearch
cp /etc/elasticsearch/certs/http_ca.crt /etc/kibana/certs/
Bước 5: Đăng ký Kibana với Elasticsearch
Tạo token dịch vụ cho Kibana:
curl --silent --cacert /etc/kibana/certs/http_ca.crt -u elastic:truongitt -X POST "https://192.168.65.111:9200/_security/service/elastic/kibana/credential/token/kbn_token3" -o /root/kbn_token3.json
TOKEN=$(jq -r '.token.value' /root/kbn_token3.json)
echo "$TOKEN"
Kiểm tra tính hợp lệ của token:
curl --cacert /etc/kibana/certs/http_ca.crt -H "Authorization: Bearer $TOKEN" https://192.168.65.111:9200/_security/_authenticate?pretty
Thêm token vào Kibana keystore:
sudo -u kibana /usr/share/kibana/bin/kibana-keystore add elasticsearch.serviceAccountToken
sudo -u kibana /usr/share/kibana/bin/kibana-keystore list
- Lưu token vào keystore của Kibana để sử dụng khi kết nối với Elasticsearch.
Bước 6: Cấp quyền cho user Kibana
sudo chown -R kibana:kibana /etc/kibana /etc/kibana/certs
sudo chmod 750 /etc/kibana
sudo chmod 755 /etc/kibana/certs
sudo chmod 600 /etc/kibana/certs/domain.key
sudo chmod 600 /etc/kibana/certs/domain.crt /etc/kibana/certs/http_ca.crt
sudo chown kibana:kibana /etc/kibana/kibana.keystore
sudo chmod 600 /etc/kibana/kibana.keystore
chown
: Chuyển quyền sở hữu thư mục và file cho userkibana
.chmod
: Thiết lập quyền truy cập nghiêm ngặt để bảo mật chứng chỉ và keystore.
Bước 7: Cấu hình Kibana
Chỉnh sửa tệp /etc/kibana/kibana.yml
:
sudo nano /etc/kibana/kibana.yml
Thêm hoặc sửa các dòng sau:
server.port: 5601
server.host: "0.0.0.0"
server.publicBaseUrl: "https://192.168.65.111:5601/"
server.ssl.enabled: true
server.ssl.certificate: /etc/kibana/certs/domain.crt
server.ssl.key: /etc/kibana/certs/domain.key
elasticsearch.hosts: ["https://192.168.65.111:9200"]
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/certs/http_ca.crt"]
elasticsearch.ssl.verificationMode: full
logging: appenders: file: type: file fileName: /var/log/kibana/kibana.log layout: type: json root: appenders: - default - file
pid.file: /run/kibana/kibana.pid
- Giải thích::
server.port
: Port mà Kibana lắng nghe (mặc định 5601).server.host
: Cho phép truy cập từ mọi IP.server.publicBaseUrl
: URL công khai để truy cập Kibana.server.ssl.*
: Bật SSL và chỉ định chứng chỉ.elasticsearch.hosts
: Địa chỉ Elasticsearch mà Kibana kết nối.elasticsearch.ssl.*
: Cấu hình xác thực SSL với Elasticsearch.logging
: Cấu hình log của Kibana, lưu vào file JSON.pid.file
: File lưu ID tiến trình của Kibana.
Bước 8: Khởi động Kibana
sudo systemctl restart kibana
-
Kiểm tra trạng thái:
sudo systemctl status kibana journalctl -u kibana -n 200 --since "-30 min" --no-pager journalctl -u kibana -f
-
Kiểm tra port:
ss -ltnp | grep 5601
Kết quả mẫu:
LISTEN 0 511 0.0.0.0:5601 0.0.0.0:* users:(("node",pid=7776,fd=102))
5. Truy cập Kibana
Mở trình duyệt và truy cập:
https://192.168.65.111:5601
Nếu sử dụng SSH để truy cập từ xa:
ssh -L 5601:127.0.0.1:5601 user@192.168.65.111
- Chuyển hướng port 5601 từ máy chủ về máy local để truy cập an toàn qua SSH.
Đăng nhập bằng user elastic
và mật khẩu (ví dụ: truongitt
).
6. Hoàn thành
Vậy là chúng ta đã hoàn thành việc cài đặt và cấu hình Elasticsearch và Kibana trên một node Ubuntu! Với cấu hình này, bạn có thể bắt đầu lưu trữ dữ liệu trong Elasticsearch và sử dụng Kibana để trực quan hóa, giám sát, và phân tích dữ liệu. Các bước trên bao gồm bảo mật SSL, xác thực user, và token dịch vụ, đảm bảo hệ thống an toàn và sẵn sàng sử dụng. Hãy thử tạo một dashboard trong Kibana hoặc nhập dữ liệu mẫu để khám phá thêm nhe hehe!
Ngoài ra bạn có thể tham khảo cấu hình cấu hình Elasticsearch Kibana high available
Nguồn tham khảo:
- Cài đặt Elasticsearch: Elastic Docs - Install Elasticsearch with Debian Package
- Cài đặt Kibana: Elastic Docs - Install Kibana with Debian Package