ELK Stack là viết tắt của ba công cụ mã nguồn mở: Elasticsearch, Logstash, và Kibana — kết hợp tạo thành một nền tảng quản lý và phân tích log tập trung mạnh mẽ. Sau này, Beats được thêm vào, biến bộ ba thành bộ tứ, nhưng cái tên ELK vẫn được giữ nguyên vì độ nhận diện thương hiệu.

Với ELK Stack, bạn có thể thu thập log từ hàng trăm server, ứng dụng, container, xử lý và chuẩn hóa dữ liệu, lưu trữ tập trung, và hiển thị dưới dạng dashboard trực quan để monitor toàn bộ hệ thống từ một giao diện duy nhất.

Tại sao cần Centralized Logging?

Trước đây, khi ứng dụng chỉ chạy trên một server, bạn có thể SSH vào và grep file log. Nhưng với kiến trúc microservices, container hóa (Docker, Kubernetes), và multi-cloud, log nằm rải rác trên hàng trăm instance — không thể SSH vào từng máy để tìm lỗi.

Centralized logging giải quyết vấn đề này:

  • Single pane of glass: Xem tất cả log từ một dashboard
  • Real-time search: Tìm kiếm và filter log tức thì
  • Correlation: Ghép log từ nhiều service để trace một request
  • Alerting: Cảnh báo khi có bất thường
  • Compliance: Lưu trữ log phục vụ kiểm toán

Các thành phần trong ELK Stack

1. Elasticsearch — Kho lưu trữ và tìm kiếm

Elasticsearch là một distributed search và analytics engine dựa trên Apache Lucene. Đây là trái tim của ELK Stack, chịu trách nhiệm lưu trữ, đánh index, và tìm kiếm dữ liệu.

Đặc điểm nổi bật:

  • Schema-less: Dữ liệu dạng JSON, không cần định nghĩa schema trước
  • Full-text search: Tìm kiếm mờ, fuzzy query, ranking
  • Distributed by nature: Cluster nhiều node, tự động sharding và replication
  • RESTful API: Giao tiếp qua HTTP, dễ tích hợp
  • Near real-time: Dữ liệu có thể search được trong ~1 giây

Elasticsearch lưu dữ liệu dưới dạng JSON documents trong các index. Mỗi index có thể được chia thành nhiều shards, phân tán trên các nodes trong cluster.

2. Logstash — ETL Pipeline

Logstash là công cụ xử lý dữ liệu theo mô hình Input → Filter → Output. Nó nhận dữ liệu từ nhiều nguồn (file log, TCP/UDP, syslog, Kafka…), xử lý và biến đổi, rồi gửi đến đích (Elasticsearch, file, Kafka…).

Ví dụ cấu hình Logstash cơ bản:

input {
  beats {
    port => 5044
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "weblogs-%{+YYYY.MM.dd}"
  }
}

Grok filter là tính năng mạnh nhất của Logstash — nó dùng regex pattern để parse log unstructured thành dữ liệu có cấu trúc. Logstash có sẵn hàng trăm pattern cho Apache, Nginx, MySQL, syslog…

3. Kibana — Visualization Layer

Kibana là giao diện web cho Elasticsearch. Bạn có thể tìm kiếm log, tạo biểu đồ, dashboard, và quản lý Elasticsearch cluster từ Kibana.

Tính năng chính:

  • Discover: Tìm kiếm và explore dữ liệu theo thời gian thực
  • Visualize: Tạo bar chart, line chart, pie chart, heat map
  • Dashboard: Ghép nhiều visualization vào một view
  • Canvas: Tạo custom presentation-style reports
  • Machine Learning: Phát hiện anomaly tự động
  • Alerting: Cấu hình cảnh báo dựa trên threshold hoặc ML

4. Beats — Lightweight Data Shippers

Beats là các agent nhẹ, cài trên máy cần thu thập dữ liệu. Mỗi Beat chuyên cho một loại dữ liệu:

  • Filebeat: Thu thập log files
  • Metricbeat: Thu thập metrics (CPU, memory, disk…)
  • Packetbeat: Phân tích network packets
  • Heartbeat: Uptime monitoring
  • Winlogbeat: Windows event logs
  • Auditbeat: Audit dữ liệu hệ thống

Filebeat là Beat phổ biến nhất — nó đọc log files, dùng ingest node pipelines của Elasticsearch để xử lý, và gửi trực tiếp đến Elasticsearch mà không cần Logstash.

Kiến trúc ELK Stack production

Trong môi trường production thực tế, bạn sẽ cần kiến trúc phức tạp hơn lab cơ bản:

  • Data collection layer: Filebeat/Metricbeat trên mỗi máy chủ
  • Message queue: Kafka hoặc Redis giữa Beats và Logstash để đảm bảo không mất dữ liệu
  • Processing layer: Logstash cluster với nhiều instance xử lý song song
  • Storage layer: Elasticsearch cluster với ít nhất 3 master nodes và data nodes
  • Presentation layer: Kibana với reverse proxy (Nginx) + authentication
  • Monitoring: Elasticsearch monitoring cluster riêng

Một production cluster Elasticsearch thường có cấu hình:

  • 3 master-eligible nodes (quorum cho split-brain prevention)
  • 3+ data nodes với SSD, RAM tối thiểu 32GB/node
  • Index lifecycle management (ILM) để tự động rollover và delete index cũ
  • Snapshot/backup lên S3 hoặc NFS

Cài đặt ELK Stack với Docker Compose

Cách nhanh nhất để chạy ELK Stack là dùng Docker. Dưới đây là file docker-compose.yml mẫu:

version: '3.8'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
    container_name: elk-elasticsearch
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ports:
      - "9200:9200"
    volumes:
      - elasticsearch_data:/usr/share/elasticsearch/data

  logstash:
    image: docker.elastic.co/logstash/logstash:8.15.0
    container_name: elk-logstash
    ports:
      - "5044:5044"
      - "5000:5000/udp"
    volumes:
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch

  kibana:
    image: docker.elastic.co/kibana/kibana:8.15.0
    container_name: elk-kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

volumes:
  elasticsearch_data:

Chạy ELK Stack

Chạy lệnh sau để khởi động toàn bộ stack:

docker compose up -d

Sau khi container chạy, truy cập Kibana tại http://localhost:5601.

Cấu hình Filebeat gửi log về ELK

Trên server cần thu thập log, cài Filebeat:

# Tai va cai Filebeat
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.15.0-amd64.deb
dpkg -i filebeat-8.15.0-amd64.deb

Cấu hình Filebeat (/etc/filebeat/filebeat.yml):

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/*.log
    - /var/log/syslog

output.logstash:
  hosts: ["elk-server:5044"]

# Hoac output truc tiep den Elasticsearch:
# output.elasticsearch:
#   hosts: ["http://elk-server:9200"]

Khởi động Filebeat:

systemctl start filebeat
systemctl enable filebeat

ELK Stack và OpenSearch

Đầu năm 2021, Elastic thông báo ELK Stack không còn open source nữa (từ version 7.11). Họ chuyển sang dual license (SSPL + Elastic License). Điều này gây tranh cãi lớn và Amazon đã fork Elasticsearch thành OpenSearch.

Hiện tại bạn có 2 lựa chọn:

  • ELK Stack (Elastic): Bản commercial, nhiều tính năng mới nhưng không open source
  • OpenSearch (AWS fork): Open source (Apache 2.0), tương thích với Kibana cũ, được cộng đồng ưa chuộng

Với dự án mới, OpenSearch là lựa chọn an toàn hơn vì không bị vendor lock-in. Tuy nhiên, ELK Stack vẫn chiếm thị phần lớn và tài liệu phong phú hơn.

Best practices khi dùng ELK Stack

1. Index Lifecycle Management (ILM)

Không để Elasticsearch chứa index mãi mãi. Dùng ILM để tự động quản lý vòng đời index:

  • Hot phase: Index active, ghi và search nhiều
  • Warm phase: Ngừng ghi, vẫn cho search
  • Cold phase: Lưu trên HDD hoặc S3, ít truy cập
  • Delete phase: Xóa index cũ sau N ngày

2. Cấu hình JVM Heap

Elasticsearch và Logstash chạy trên JVM. Nguyên tắc: không set heap vượt quá 50% RAM vật lýtối đa 32GB (do compressed OOPs trong JVM).

3. Security mặc định

Không expose Elasticsearch hay Kibana trực tiếp ra internet. Luôn dùng:

  • Nginx reverse proxy với SSL
  • Authentication (Elasticsearch security features hoặc nginx basic auth)
  • Network firewall (chỉ cho phép port 5044 từ các Beats servers)

4. Cấu hình số lượng shards

Quá nhiều shards gây overhead. Rule of thumb:

  • Mỗi shard từ 10-50GB
  • 1 shard cho data index log hàng ngày là đủ với đa số trường hợp
  • Theo dõi số lượng shards qua Kibana Stack Monitoring

Kết luận

ELK Stack là giải pháp centralized logging mạnh mẽ và phổ biến nhất hiện nay. Dù đã có nhiều thay đổi về license, Elasticsearch và Kibana vẫn là lựa chọn hàng đầu cho DevOps, System Administrator, và SRE.

Nếu mới bắt đầu, hãy dùng Docker Compose để chạy ELK Stack local, cấu hình Filebeat trên vài server để gửi log về, và khám phá Kibana. Khi đã tự tin, hãy chuyển sang kiến trúc production với clustering và message queue.

Còn nếu muốn opensource hoàn toàn, OpenSearch là path bạn nên đi — tương thích, miễn phí, và không lo vendor lock-in.

Chào các bạn mình là Quốc Hùng , mình sinh ra thuộc cung song tử ,song tử luôn khẳng định chính mình ,luôn luôn phấn đấu vượt lên phía trước ,mình sinh ra và lớn lên tại vùng đất võ cổ truyền ,đam mê của mình là coder ,ngày đi học tối về viết blog ...