Docker Compose Cho Elasticsearch & Kibana: Cài Đặt & Cấu Hình

Trong bài viết này, chúng ta sẽ tìm hiểu cách triển khai Elasticsearch và Kibana bằng Docker Compose. Đây là hai thành phần chính trong hệ sinh thái ELK Stack (Elasticsearch, Logstash, Kibana), giúp bạn tìm kiếm, phân tích và trực quan hóa dữ liệu một cách hiệu quả. Dưới đây là chi tiết cấu hình và cách thức hoạt động của từng thành phần.

1. Elasticsearch

a. Cấu Hình Cơ Bản

Elasticsearch được cấu hình để chạy trong một container Docker với các thông số sau:

  • Image: Sử dụng image chính thức của Elasticsearch phiên bản 8.17.2.

  • Chế độ single-node: Được kích hoạt thông qua biến môi trường discovery.type=single-node.

  • Bảo mật: Tính năng bảo mật X-Pack được bật (xpack.security.enabled=true), và mật khẩu cho user elastic được đặt là YVG6PKplG6ugGOw.

  • Mạng: Elasticsearch lắng nghe trên tất cả các giao diện mạng (network.host=0.0.0.0).

  • Bộ nhớ JVM: Được cấu hình với -Xms1g (bộ nhớ ban đầu) và -Xmx1g (bộ nhớ tối đa).

b. Ports Và Volumes

  • Ports: Cổng 9200 (HTTP) và 9300 (giao tiếp nội bộ) được ánh xạ từ container ra host.

  • Volumes: Dữ liệu Elasticsearch được lưu trữ trong volume elasticsearch-data.

c. Healthcheck

Healthcheck được thiết lập để kiểm tra trạng thái của Elasticsearch bằng cách gọi API /_cluster/health với user elastic. Nếu API không phản hồi, container sẽ được khởi động lại.

2. Kibana

a. Cấu Hình Cơ Bản

Kibana được cấu hình để kết nối với Elasticsearch và chạy trong một container Docker với các thông số sau:

  • Image: Sử dụng image chính thức của Kibana phiên bản 8.17.2.

  • Kết nối Elasticsearch: Địa chỉ Elasticsearch được đặt là http://elasticsearch:9200.

  • Xác thực: Kibana sử dụng user kibana_user với mật khẩu YVG6PKplG6ugGOw để kết nối với Elasticsearch.

b. Ports Và Networks

  • Ports: Cổng 5601 được ánh xạ từ container ra host để truy cập giao diện Kibana.

  • Networks: Kibana được kết nối với mạng elk-network.

c. Phụ Thuộc Vào Elasticsearch

Kibana chỉ khởi động sau khi Elasticsearch đã sẵn sàng, đảm bảo rằng Kibana có thể kết nối thành công với Elasticsearch.

3. Volume Và Network

a. Volume

  • elasticsearch-data: Volume này được sử dụng để lưu trữ dữ liệu Elasticsearch, đảm bảo dữ liệu không bị mất khi container bị xóa.

b. Network

  • elk-network: Mạng bridge này được tạo để kết nối các dịch vụ Elasticsearch và Kibana.

4. Cách Sử Dụng

a. Khởi Chạy Dịch Vụ

Để khởi động Elasticsearch và Kibana, chạy lệnh sau:

docker-compose up -d

b. Tạo Người Dùng Kibana (Nếu Cần)

Nếu bạn muốn sử dụng một người dùng riêng cho Kibana, bạn có thể tạo người dùng bằng lệnh:

docker exec -it elasticsearch /bin/elasticsearch-users useradd kibana_user -p you_password-r kibana_system

c. Tạo Token (Nếu Dùng Token)

Để sử dụng token thay vì mật khẩu, bạn có thể tạo token bằng lệnh:

docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-service-tokens create elastic/kibana kibana-token

5. Xử Lý Lỗi

  • Nếu gặp lỗi, bạn có thể kiểm tra logs của container bằng lệnh:

    docker logs elasticsearch 
    docker logs kibana
  • Để khởi động lại Kibana:

    docker-compose down kibana && docker-compose up -d kibana

Toàn Bộ Nội Dung File Docker Compose

Dưới đây là toàn bộ nội dung của file docker-compose-els.yml:

version: '3.7'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.2
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=true
      - ELASTIC_PASSWORD=you_password
      - network.host=0.0.0.0
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
    ports:
      - '9200:9200'
      - '9300:9300'
    volumes:
      - elasticsearch-data:/usr/share/elasticsearch/data
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - elk-network

    healthcheck:
      test: ["CMD-SHELL", "curl -u elastic:YVG6PKplG6ugGOw --silent --fail localhost:9200/_cluster/health || exit 1"]
      interval: 10s
      retries: 5
      start_period: 30s
      timeout: 5s

  kibana:
    image: docker.elastic.co/kibana/kibana:8.17.2
    container_name: kibana
    ports:
      - '5601:5601'
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=kibana_user
      - ELASTICSEARCH_PASSWORD=you_password
    networks:
      - elk-network
    depends_on:
      elasticsearch:
        condition: service_healthy

volumes:
  elasticsearch-data:
    driver: local

networks:
  elk-network:
    driver: bridge

Kết Luận

Với cấu hình Docker Compose này, bạn có thể dễ dàng triển khai Elasticsearch và Kibana để phục vụ các nhu cầu tìm kiếm, phân tích và trực quan hóa dữ liệu. Hãy tùy chỉnh và mở rộng cấu hình này để phù hợp với yêu cầu cụ thể của dự án của bạn!