Back to articles
Technology Insight

Xây dựng hệ thống Centralized Log Server siêu nhẹ với Grafana Loki và Promtail trên hạ tầng Multi-VPS

May 29, 2026

1. Đặt vấn đề: Thách thức quản lý Logs trên hạ tầng Multi-VPS

Trong kỷ nguyên chuyển đổi số, việc vận hành hệ thống trên hạ tầng nhiều máy chủ ảo (Multi-VPS) đã trở thành mô hình phổ biến đối với các doanh nghiệp vừa và nhỏ (SMEs). Tuy nhiên, khi số lượng VPS tăng lên, việc quản trị viên phải SSH vào từng máy chủ để check log (truy vết lỗi) bằng các câu lệnh truyền thống như tail -f hay grep trở thành một cơn ác mộng thực sự. Điều này không chỉ làm giảm năng suất làm việc của đội ngũ DevOps mà còn kéo dài thời gian phản hồi sự cố (MTTR - Mean Time To Resolution).

Giải pháp tất yếu được đặt ra là xây dựng một hệ thống Centralized Log Server (Quản lý logs tập trung). Trước đây, ELK Stack (Elasticsearch, Logstash, Kibana) luôn là cái tên thống trị. Tuy nhiên, ELK Stack lại sở hữu một nhược điểm chí mạng: Cực kỳ ngốn tài nguyên. Việc duy trì một cụm Elasticsearch đòi hỏi dung lượng RAM và CPU rất lớn, điều này hoàn toàn không kinh tế đối với hạ tầng Multi-VPS quy mô nhỏ và vừa.

Đó chính là lý do bộ đôi Grafana Loki và Promtail ra đời như một vị cứu tinh. Được mệnh danh là "Elasticsearch nhưng dành cho logs với chi phí siêu rẻ", Loki không index toàn bộ nội dung log mà chỉ index các metadata (labels). Cách tiếp cận thông minh này giúp hệ thống hoạt động vô cùng mượt mà, siêu nhẹ và tiết kiệm tài nguyên lưu trữ đến tối đa.

2. Kiến trúc giải pháp: Grafana Loki & Promtail hoạt động như thế nào?

Mô hình Centralized Log Server với Loki được cấu thành từ 3 thành phần chính hoạt động nhịp nhàng với nhau:

  • Promtail (Log Agent): Được cài đặt trên từng VPS đích (Target VPS) nơi ứng dụng đang chạy. Nhiệm vụ của Promtail là theo dõi (discover), thu thập các file log cục bộ, gắn thêm các nhãn (labels) định danh và đẩy (push) dữ liệu log đó về trung tâm Loki Server qua giao thức HTTP API.
  • Grafana Loki (Log Aggregator): Đóng vai trò là hạt nhân trung tâm, chịu trách nhiệm nhận log từ các Promtail agents, lưu trữ chúng vào các object storage hoặc local disk dưới dạng các chunks nén, và xử lý các truy vấn log từ phía người dùng.
  • Grafana (Visualization): Giao diện hiển thị trực quan. Grafana sẽ kết nối với Loki như một Data Source, cho phép các kỹ sư DevOps thực hiện truy vấn log bằng ngôn ngữ LogQL, thiết lập dashboard giám sát theo thời gian thực và cấu hình cảnh báo (Alerting) tự động khi có lỗi xảy ra.
Kiến trúc này hoạt động theo mô hình Pull-based đối với Monitor (Prometheus) nhưng lại là Push-based đối với Log (Loki). Promtail sẽ chủ động đẩy logs về Loki, giúp giảm tải tối đa cho máy chủ trung tâm và dễ dàng đi qua các rào cản tường lửa (Firewall) của từng VPS nhánh.

3. Hướng dẫn triển khai chi tiết trên hạ tầng Multi-VPS

Bước 1: Cấu hình Grafana Loki trên Centralized Log VPS

Đầu tiên, chúng ta cần thiết lập máy chủ trung tâm để tiếp nhận logs. Hãy chuẩn bị một VPS (Ubuntu 22.04 LTS trở lên) và tiến hành cài đặt Loki thông qua Docker Compose để đảm bảo tính đóng gói và dễ quản lý.

Tạo file cấu hình loki-config.yaml cho Loki:

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096

common:
  instance_addr: 127.0.0.1
  path_prefix: /tmp/loki
  storage:
    filesystem:
      chunks_directory: /tmp/loki/chunks
      rules_directory: /tmp/loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

schema_config:
  configs:
    - from: 2020-10-24
      store: tsdb
      object_store: filesystem
      schema: v13
      index:
        prefix: index_
        period: 24h

Tiếp theo, tạo file docker-compose.yaml để khởi chạy cả Loki và Grafana:

version: "3.8"

services:
  loki:
    image: grafana/loki:3.0.0
    volumes:
      - ./loki-config.yaml:/etc/loki/loki-config.yaml
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/loki-config.yaml
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    networks:
      - monitoring

networks:
  monitoring:
    driver: bridge

Chạy lệnh docker compose up -d để khởi chạy hệ thống trung tâm. Lúc này, Loki sẽ lắng nghe ở port 3100 và Grafana ở port 3000.

Bước 2: Cài đặt và cấu hình Promtail trên các Target VPS

Trên mỗi VPS chạy ứng dụng (ví dụ: VPS Nginx, VPS NodeJS, VPS Database), chúng ta cần cài đặt Promtail để làm shipper đẩy log về máy chủ trung tâm.

Tạo file cấu hình promtail-config.yaml trên từng Target VPS:

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://:3100/loki/api/v1/push

scrape_configs:
  - job_name: system_logs
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          host: vps-app-production-01
          __path__: /var/log/*.log

  - job_name: nginx_logs
    static_configs:
      - targets:
          - localhost
        labels:
          job: nginx
          host: vps-app-production-01
          __path__: /var/log/nginx/*.log

Lưu ý quan trọng: Hãy thay thế bằng IP public hoặc IP private (nếu chung mạng nội bộ) của máy chủ Loki trung tâm, và thay đổi label host tương ứng với từng VPS để dễ phân biệt khi truy vấn.

Khởi chạy Promtail bằng Docker:

docker run -d --name promtail -v /var/log:/var/log -v ./promtail-config.yaml:/etc/promtail/config.yml grafana/promtail:latest -config.file=/etc/promtail/config.yml

4. Kết nối và Khai thác Log trên giao diện trực quan trực quan Grafana

Sau khi đã hoàn tất cấu hình đẩy log, việc còn lại là trực quan hóa dữ liệu trên Grafana:

  1. Truy cập vào giao diện Grafana qua địa chỉ http://:3000 (Tài khoản mặc định: admin/admin).
  2. Đi đến mục Connections > Data Sources và chọn Add data source. Tìm kiếm từ khóa Loki.
  3. Tại ô URL, điền vào: http://loki:3100 (hoặc IP của Loki nếu không dùng chung docker network) rồi bấm Save & Test.
  4. Chuyển sang tab Explore, chọn Data Source là Loki. Giờ đây bạn có thể viết các câu truy vấn LogQL thần thánh như: {host="vps-app-production-01", job="nginx"} |= "error" để lọc ngay lập tức các log lỗi của Nginx trên máy chủ mong muốn.

5. Tối ưu hóa hiệu năng và Bảo mật cho hệ thống Centralized Log

Để hệ thống vận hành bền bỉ và an toàn trong môi trường production, bạn cần lưu ý hai yếu tố cốt lõi sau:

Bảo mật đường truyền dữ liệu (Security First)

Mặc định, Loki không tích hợp sẵn cơ chế xác thực. Do đó, việc mở port 3100 ra môi trường Internet là vô cùng nguy hiểm. Hãy triển khai các giải pháp bảo mật sau:

  • Sử dụng UFW (Uncomplicated Firewall) để chỉ cho phép các IP của Target VPS kết nối đến port 3100 của Loki Server.
  • Hoặc thiết lập một proxy ngược (Reverse Proxy) bằng Nginx với Basic Authentication để mã hóa và bắt buộc xác thực khi Promtail đẩy log về.

Cấu hình Log Retention Policy (Chính sách lưu trữ)

Mặc dù Loki nén log rất tốt, nhưng dung lượng ổ cứng của VPS là hữu hạn. Hãy cấu hình tính năng compactor trong file loki-config.yaml để tự động xóa các log cũ sau một khoảng thời gian nhất định (ví dụ: 7 ngày hoặc 14 ngày) tùy thuộc vào chính sách của doanh nghiệp:

limits_config:
  retention_period: 168h # Giữ log trong vòng 7 ngày
compactor:
  working_directory: /tmp/loki/retention
  compaction_interval: 10m
  retention_enabled: true
  retention_delete_delay: 2h

6. Lời kết

Xây dựng một hệ thống Centralized Log Server siêu nhẹ với Grafana Loki và Promtail là giải pháp tối ưu hàng đầu cho hạ tầng Multi-VPS hiện nay. Nó loại bỏ hoàn toàn rào cản về mặt chi phí và tài nguyên phần cứng của ELK Stack truyền thống, trong khi vẫn mang lại trải nghiệm quản trị, truy vết lỗi mạnh mẽ và nhanh chóng. Đầu tư một lần vào hệ thống giám sát chuẩn chỉnh sẽ giúp doanh nghiệp tiết kiệm hàng trăm giờ làm việc của đội ngũ kỹ thuật khi có sự cố phát sinh.

Xây dựng hệ thống Centralized Log Server siêu nhẹ với Grafana Loki và Promtail trên hạ tầng Multi-VPS | DPTCloud