- vừa được xem lúc

Cấu hình nhanh Elasticsearch và Kibana trên 1 node Ubuntu

0 0 2

Người đăng: TruongItt

Theo Viblo Asia

1_gRPNQVJrqppi0GbkYIrUBw.png

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.keydomain.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 user kibana.
  • 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).

image.png

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:

Bình luận

Bài viết tương tự

- vừa được xem lúc

2019 rồi, setup Vim như nào?

2019 rồi, setup Vim như nào. . Sau gần 2 năm xài Emacs thì giờ mình đã quay trở lại xài Vim, chính xác là Neovim. .

0 0 64

- vừa được xem lúc

Hướng dẫn cấu hình ReactJS với Webpack và Babel

Ok trong bài viết này, mình sẽ hướng dẫn các bạn cấu hình dự án ReactJS kết hợp Webpack và Babel. Bài viết này được thực hiện năm 2021 được cấu hình trên Webpack 5, như các bạn biết thì các bài viết c

0 0 143

- vừa được xem lúc

Setup debug Gitlab, tưởng không khó mà cũng không khó lắm

Chuyện là gần đây Gitlab có bản Security Release mới, trong đó có một lỗi Arbitrary file read via group import feature khá là thú vị, ảnh hưởng đến tất cả các phiên bản GitLab CE/EE có đầu là 14.5 trở

0 0 47

- vừa được xem lúc

Tiêu hoá file cấu hình MongoDB

. Lời giới thiệu:. Cùng mình tìm hiểu cách cấu hình mongodb trên môi trường production ( centos, ubuntu, linux.

0 0 51

- vừa được xem lúc

[Setup] Terminal quá nhàm chán, hãy dùng ZSH!

ZSH là gì. Zsh hỗ trợ cú pháp tự động hoàn thành, quản lý file và thư mục, lịch sử lệnh phong phú, kịch bản shell, chức năng ghi nhớ và tùy chỉnh giao diện dòng lệnh.

0 0 28

- vừa được xem lúc

Thiết lập với Rust: Từ cài đặt đến Hello World

Mở đầu. Rust là một ngôn ngữ lập trình khá "trẻ" và mạnh mẽ, được phát triển bởi Mozilla từ năm 2010.

0 0 13