Thiết lập ELK để thu thập log từ ứng dụng Spring Boot

Trước tiên, cần chuẩn bị môi trường ELK (Elasticsearch, Logstash, Kibana) trên máy chủ. Dựa theo hướng dẫn từ các bài viết sau:

Sau khi hoàn tất, bạn đã có một index trong Elasticsearch (tương tự như bảng trong cơ sở dữ liệu quan hệ), đồng thời tạo một data view trong Kibana để trực quan hóa các tài liệu log.

Quy trình ELK hoạt động như sau: ứng dụng Spring Boot ghi log vào một tập tin cụ thể trên máy chủ, Logstash đọc tập tin này, xử lý và đẩy dữ liệu vào index của Elasticsearch, sau đó bạn có thể truy vấn và xem log qua giao diện Kibana.

  1. Cài đặt Logstash Link hướng dẫn chính thức: Install Logstash

Nên giữ phiên bản Logstash trùng với Elasticsearch và Kibana (ở đây dùng phiên bản 8.16.0). Sau khi khởi động thành công và kiểm tra "Hello World", bạn sẵn sàng cho việc cấu hình.

  1. Chuẩn bị file JAR ứng dụng Spring Boot

Tệp cấu hình log sử dụng Log4j2:

log4j2-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <!-- Ghi log ra file -->
        <RollingFile name="File" fileName="logs/my_app.log"
                     filePattern="logs/$${date:yyyy-MM}/my_app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
        
        <!-- Xuất log ra console -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>
</Configuration>

Ứng dụng đơn giản chỉ cần nhận tham số từ API để sinh ra các dòng log tương ứng.

  1. Cấu hình Logstash

Tệp cấu hình Logstash (logstash.conf):

input {
  file {
    path => "/home/es/temp/logs/my_app.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
  # Có thể thêm filter để phân tích log, ví dụ dùng Grok
}

output {
  elasticsearch {
    hosts => ["https://your.elasticsearch.ip:9200"]
    index => "cat_index"
    user => "elastic"
    password => "your_password"
    ssl => true
    ssl_certificate_verification => false
  }
}

Nếu Elasticsearch không dùng HTTPS, bỏ qua phần SSL. Việc tắt xác thực SSL chỉ nên dùng trong môi trường phát triển. Cách an toàn hơn là import certificate (.crt) vào truststore Java.

Lưu tệp cấu hình vào thư mục config của Logstash, rồi khởi động bằng lệnh:

bin/logstash -f /home/es/logstash-8.16.0/config/logstash.conf
  1. Kiểm tra kết quả qua Kibana

Gọi API để sinh log, kiểm tra file log để đảm bảo nội dung đã được ghi.

Truy cập trang Data View trong Kibana, nhập từ khóa như "Expressing" vào thanh tìm kiếm. Nếu thấy kết quả trả về, tức là log đã được đẩy thành công vào Elasticsearch.

Bạn cũng có thể mở rộng chi tiết từng bản ghi để xem cấu trúc JSON, lọc theo mức độ ưu tiên, thời gian, hoặc nguồn log.

Thẻ: Spring Boot Logstash Elasticsearch kibana log4j2

Đăng vào ngày 11 tháng 10 lúc 22:10