0

BÀI 4: THỰC HÀNH PART 1 – DỰNG ELASTIC APM SERVER & KIBANA BẰNG DOCKER COMPOSE

thuyết, kiến trúc cũng như các khái niệm cốt lõi của APM. Hôm nay, chúng ta sẽ chính thức bắt tay vào phần thực hành: Tự dựng một cụm Elastic APM hoàn chỉnh ngay trên máy Local bằng Docker Compose.

Mục tiêu của bài hôm nay là dựng lên một "bộ máy tiếp nhận" sẵn sàng, để ở bài sau chúng ta chỉ việc cắm Agent từ ứng dụng vào là dữ liệu tự động đổ về.

1. Chuẩn bị "vũ khí"

Trước khi bắt đầu, hãy đảm bảo máy tính của bạn đã cài đặt sẵn:

  • Docker và Docker Compose (Nếu dùng Docker Desktop thì đã tích hợp sẵn cả hai).
  • Một chút bộ nhớ RAM trống (Tối thiểu khoảng 3GB-4G RAM vì Elasticsearch khá "ngốn" tài nguyên khi khởi chạy).

2. Cấu trúc thư mục dự án

Bạn hãy tạo một thư mục mới tên là elastic-apm-local và tạo các file theo cấu trúc sau:

elastic-apm-local/
├── docker-compose.yml
└── apm-server.yml

3. Chi tiết các file cấu hình

File 1: apm-server.yml

Đây là file cấu hình riêng cho APM Server để nó biết cách lắng nghe các Agent và biết đường đẩy dữ liệu về Elasticsearch.

apm-server:
  host: "0.0.0.0:8200" # Lắng nghe từ tất cả các nguồn gửi đến port 8200
  rum:
    enabled: true # Bật tính năng Real User Monitoring (nếu sau này muốn đo cả Frontend)

output.elasticsearch:
  hosts: ["http://elasticsearch:9200"] # Địa chỉ container Elasticsearch trong mạng Docker
  # Ở môi trường local dev, chúng ta tạm thời tắt auth để cấu hình đơn giản nhất
  username: "elastic"
  password: "changeme"

logging.level: info

File 2: docker-compose.yml

File này sẽ định nghĩa 3 dịch vụ tương ứng với kiến trúc chúng ta đã học: elasticsearch, kibana, và apm-server. Chúng ta sử dụng phiên bản 8.12.0 ổn định và mạnh mẽ.

version: '3.8'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
    container_name: es_backend
    environment:
      - node.name=elasticsearch
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # Giới hạn RAM cho ES ở local (512MB)
      - xpack.security.enabled=false # Tắt security để tiện lab ở local
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es_data:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
    networks:
      - apm_network

  kibana:
    image: docker.elastic.co/kibana/kibana:8.12.0
    container_name: kibana_frontend
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    networks:
      - apm_network

  apm-server:
    image: docker.elastic.co/apm/apm-server:8.12.0
    container_name: apm_server
    ports:
      - "8200:8200"
    volumes:
      - ./apm-server.yml:/usr/share/apm-server/apm-server.yml:ro
    command: apm-server -e -d "*" -c /usr/share/apm-server/apm-server.yml
    depends_on:
      - elasticsearch
    networks:
      - apm_network

volumes:
  es_data:
    driver: local

networks:
  apm_network:
    driver: bridge

4. Khởi động và kiểm tra thành quả

Mở Terminal tại thư mục elastic-apm-local và gõ câu lệnh "thần thánh":

docker compose up -d

Docker sẽ tiến hành kéo các Image về và khởi chạy ngầm (-d). Quá trình này có thể mất từ 2-5 phút tùy thuộc vào tốc độ mạng của bạn.

Kiểm tra các Container có chạy ổn định không: Gõ lệnh:

docker compose ps

Nếu cả 3 container es_backend, kibana_frontend, và apm_server đều hiển thị trạng thái Up, xin chúc mừng, bạn đã thành công 90%!

5. Truy cập giao diện và "Xác nhận" kết nối

  1. Mở trình duyệt: Truy cập vào địa chỉ http://localhost:5601 để mở giao diện Kibana.
  2. Đi tới khu vực APM:
  • Bấm vào Menu góc trái (Biểu tượng 3 dấu gạch ngang).
  • Tìm đến mục Management -> Chọn Integrations.
  • Gõ vào thanh tìm kiếm chữ APM và chọn ứng dụng APM.
  • Hoặc đơn giản là truy cập trực tiếp bằng thanh search toàn cầu của Kibana với từ khóa "APM".
  1. Kiểm tra trạng thái: Tại tab setup, bạn kéo xuống dưới cùng bấm nút "Check APM Server status". Nếu màn hình hiển thị tick xanh kèm dòng chữ "You have successfully connected to APM Server" thì hệ thống của bạn đã hoàn toàn sẵn sàng nhận dữ liệu!

Lời kết & Bài học tiếp theo

Việc tự tay dựng thành công cụm Elastic APM bằng Docker Compose giúp bạn làm chủ hoàn toàn hạ tầng giám sát của mình mà không phụ thuộc vào bất kỳ nhà cung cấp dịch vụ đám mây tính phí nào.

Hạ tầng đã sẵn sàng, "bẫy" đã được giăng ra. Việc tiếp theo là dụ "con mồi" vào.

Ở Bài 5, chúng ta sẽ thực hành Tích hợp APM Agent vào một dự án backend thực tế để xem cách các Transaction và Span tự động được ghi nhận và bắn về port 8200 của APM Server như thế nào.

Các bạn có gặp lỗi Exit 137 (thiếu RAM) hay lỗi kết nối nào khi chạy docker compose up không? Hãy để lại log lỗi ở phần bình luận để mình hỗ trợ nhé!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí