Với việc xây dựng eLMS với kiến trúc như trên, chúng ta lựa chọn giải pháp phát triển từng layer dưới dạng các plugin.
Hình 3.8: eLMS với các thành phần plug-in
Kiến trúc này được thiết kế chia thành các plug-in để mềm dẻo và dễ dàng mở rộng. Chúng ta xây dựng kiến trúc eLMS dựa trên các plug-in tích hợp đó bao gồm 5 layer ở trên.
File config.inf thiết lập ở client, được đọc bởi thành phần ẩn eLMS-shipper. Lấy ra các thông tin của tất cả các plug-in và địa chỉ host của Elasticsearch. File cấu hình này có nội dung chứa các thông tin cụ thể như sau:
1/ Inputs: Danh sách các nguồn dữ liệu ở client: Như đường dẫn các file log, các thư mục log, các cổng TCP, UDP…
2/ eLMS-grok: Khai báo các thành phần regex mẫu mà dữ liệu cần phải matching để thực hiện chuẩn cấu trúc và phân loại dữ liệu.
3/ Kafka: Thiết lập thông tin về server Kafka. Nếu chúng ta không sử dụng Kafka, khai báo này sẽ không cần thiết. Nếu chúng ta sử dụng, hệ thống chỉ cung cấp khai báo hai lựa chọn cho: {“embedded” hoặc “ip”}
4/ eLMS-parser: Tùy chọn thiết lập server cài đặt thành phần eLMS-parser, cung cấp hai lựa chọn cho người dùng: {“embedded” hoặc “ip”}
Ngoài ra, chúng ta còn sử dụng thêm một file cấu hình ở server chứa các lựa chọn thông tin của eLMS-parser kết nối tới Elasticsearch.
Như vậy, hệ thống eLMS đã từng bước thay đổi giải pháp ở hệ thống ELK trong một số giai đoạn xử lý dữ liệu và có thể nhận ra sự tối ưu hơn như:
- Bổ sung giải pháp đọc dữ liệu lớn (offline).
- Cải tiến bộ grok trong thành phần eLMS-parser, việc xử lý matching tối
ưu hơn.
- Thay đổi cơ chế hàng đợi, việc sử dụng Apache Kafka có thể nói là dữ
liệu được bảo toàn so với việc sử dụng hàng đợi Queue như Redis.
- Thay đổi cấu trúc ELK, chia nhỏ cho từng trường hợp sử dụng, loại bỏ các
thành phần, các đoạn mã không phù hợp.
- Thay đổi cấu trúc file cấu hình ở các client và luôn được đọc bởi eLMS-
shipper.
- Chương trình eLMS-shipper được chạy như một dịch vụ ngầm định, chứ
không bật màn hình console như logstash. (đóng console có nghĩa là kết thúc việc giám sát).
- Cải thiện vấn đề gán chỉ số index cho dữ liệu.
- Thực hiện xây dựng thành phần font-end sử dụng thành phần Analayzer
để truy vấn tới ES ở trong kiến trúc và xây dựng chức năng giao diện hiển thị.
- Bổ sung cơ chế xóa tự động ở Elasticsearch (mô hình ELK không có cơ
chế này).
- Mở rộng các plugin và hàng đợi (có thể sử dụng lại các plugin đã có của
ELK).