Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Redis

Xây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước Đi

Khi cơ sở hạ tầng IT của bạn tăng về kích thước và trở nên phức tạp, bạn có thể bị buộc phải dành nhiều sự chú ý hơn để đảm bảo mọi thứ được quản lý đúng cách.

Kể từ khi trỗi dậy của đám mây, điều này đã trở nên đặc biệt liên quan hơn, vì bây giờ chúng ta có rất nhiều thông tin kỹ thuật trải rộng trên nhiều vị trí khác nhau.

Nhưng việc có thể thực hiện phân tích log toàn diện có thể nhàm chán, tốn thời gian và đau đớn vì chán nản.

Một cách đơn giản nhưng hiệu quả để giải phóng bản thân khỏi gánh nặng này là sử dụng phần mềm hoặc ứng dụng được thiết kế để làm cho việc giám sát log dễ dàng… và đó chính xác là những gì Alexis Gardin đã làm trong ứng dụng của ông, Logub.

Khác với nhiều giải pháp SaaS khác, Logub có thể thực hiện các hành động này on-premises và mã nguồn mở. Bằng cách làm theo các bước dưới đây, bạn sẽ có thể tạo một ứng dụng sẽ thu thập, khám phá, và phân tích log ứng dụng cho bạn.

Trái tim của ứng dụng này là sự phụ thuộc vào khả năng của RediSearch để khám phá và phân tích log trên các vị trí khác nhau với hiệu quả không thể so sánh. Hãy nhìn vào cách Alexis đưa ứng dụng này lại với nhau.

Nhưng trước khi đi sâu, chúng tôi nên cho bạn biết rằng chúng tôi cũng có một loạt ứng dụng thú vị cho bạn xem trên Redis Launchpad.

  1. Bạn sẽ xây dựng gì?
  2. Bạn sẽ cần gì?
  3. Kiến trúc
  4. Bắt đầu
  5. Cách dữ liệu được lưu trữ
  6. Cách dữ liệu được truy vấn
  7. Cách thanh tìm kiếm hoạt động?
  8. Cách tích hợp Logub vào dự án của bạn?
  9. Kết luận

1. Bạn sẽ xây dựng gì?

Bạn sẽ xây dựng một ứng dụng đặc biệt được cung cấp năng lượng bởi Redis để thu thập, phân tích và khám phá log ứng dụng. Trong các bước dưới đây, chúng ta sẽ đi qua A-Z những gì cần thiết để xây dựng ứng dụng này, cùng với các thành phần yêu cầu.

Dù bạn mới với Redis, chúng tôi sẽ chỉ cho bạn chính xác cách nắm vững cơ sở dữ liệu mạnh mẽ này. Bạn sẵn sàng bắt đầu chưa?

Ok, hãy đi thẳng vào vấn đề.
Xây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước ĐiXây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước Đi

2. Bạn sẽ cần gì?

  • Fluentd: dùng như phần mềm thu thập dữ liệu cross-platform open-source để xử lý log.
  • Redis output plugin cho Fluent: fluent-plugin-redis là một fluent plugin để output đến redis.RediSearch:
  • Docker: dùng như nền tảng cho nhà phát triển đóng gói ứng dụng vào container.
  • Docker Compose: dùng để định nghĩa và chạy ứng dụng Docker multi-container.

3. Kiến trúc

Xây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước Đi
  • Fluentd thu thập tất cả log từ mỗi ứng dụng trên nhiều đích đến khác nhau
  • Fluentd sau đó định dạng từng log và gửi chúng đến Redis để lưu trữ
  • Dữ liệu được lưu trữ dùng Fluentd Redis Plugin – một fluent plugin để output đến redis.
  • Backend Logub cho phép RediSearch thực hiện tìm kiếm toàn văn và lập chỉ mục các trường do người dùng định nghĩa.

4. Bắt Đầu

Trong demo, một DEMO app sẽ publish log trong Logub. Bạn sẽ có thể tương tác với DEMO app này để tạo log của bạn. Sau đó bạn sẽ có thể yêu cầu chúng trong Logub

Điều kiện tiên quyết

  • Docker
  • Docker Compose

Trước hết, hãy chắc chắn rằng các cổng sau mở trên hệ thống của bạn: 8080, 8081, 3000 & 6379.

Bước 1: Clone repository

git clone https://github.com/redis-developer/logub

Bước 2. Khởi động DEMO app

  • Đi đến thư mục /demo (cd ./demo)
  • Khởi chạy docker-compose với lệnh cho trước:

Khởi chạy Logub demo

Đi đến localhost:3000 để khám phá log.

Xây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước Đi

Có thể mất khoảng một phút để bạn thấy log xuất hiện. Bạn có thể xem log trên trang bằng cách lọc chúng với sidebar bên phải. Thay vào đó, bạn tìm kiếm chúng bằng bộ lọc hoặc truy vấn toàn văn qua thanh tìm kiếm ở trên.

Khi bạn nhấp vào một log, chi tiết sẽ hiển thị và bạn sẽ có tùy chọn lập chỉ mục các thuộc tính kinh doanh (business properties). Các thuộc tính kinh doanh này có thể được dùng làm bộ lọc sau đó.

Xây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước Đi

Tiếp theo, đi đến localhost:3000/demo để truy cập playground và thêm log tùy chỉnh của bạn. Trang demo này sẽ cho phép bạn:

  • tạo user giả trong demo fake app và thấy chúng trong log.
  • publish log của bạn vào hệ thống.
Xây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước Đi

Nếu bạn quay lại trang chính, bạn có thể thử tìm kiếm log bạn vừa tạo.

Lưu ý: Có độ trễ khoảng 1 phút giữa việc sản xuất log trong container và hiển thị trong Logub. Độ trễ này do quá trình thu thập, định dạng, và nạp log vào cơ sở dữ liệu.

5. Cách nó hoạt động?

Cách dữ liệu được lưu trữ

Dữ liệu được lưu trữ dùng Fluentd Redis Plugin. Nó lưu mỗi log với HSET. Ví dụ: HSET level DEBUG message "Hello World" thread main

Cách dữ liệu được truy vấn

Đây là đối tượng bạn sẽ dùng để thao tác log và truy xuất chúng từ Redis. Thực hiện hành động này sẽ cho phép Logub UI hiển thị log. Để làm truy vấn phức tạp trong log của bạn, bạn có thể dùng RediSearch.

Vì bạn có thể thay đổi schema RediSearch động, bạn có thể dùng cấu trúc dữ liệu 'List' để theo dõi schema nào được lập chỉ mục.

Lệnh trên sẽ cho phép bạn tạo một truy vấn RediSearch plain text dựa trên input người dùng. Có một đống QueryBuilders nhỏ được xây dựng trên đỉnh thư viện RediSearch. Đó là cùng một lệnh sẽ được gửi bởi Logub UI để thực hiện tìm kiếm toàn diện và hiệu quả trong log của bạn.

Bước 2: Cách làm việc thanh tìm kiếm

Bạn có thể thực hiện tìm kiếm bằng tag hoặc tìm kiếm toàn văn. Dưới đây là một số ví dụ bạn có thể dùng làm mẫu nếu bạn bị mắc kẹt.

  • env:dev Ut ea vero voluptate* sẽ tìm tất cả log trong môi trường dev với message bắt đầu bằng Ut ea vero voluptate
  • -env:prod Ut ea vero voluptate* sẽ tìm tất cả log trong tất cả môi trường trừ prod với message bắt đầu bằng Ut ea vero voluptate
  • originRequest:France originRequest:USA sẽ tìm tất cả log có trường originRequest với giá trị France hoặc USA
  • "dog" "cat" sẽ tìm tất cả log chứa từ "dog" và "cat"
  • -"dog" "cat" sẽ tìm tất cả log không chứa "dog" nhưng chứa "cat"

Để bạn có trải nghiệm test tốt với app, chúng tôi mạnh mẽ khuyên bạn tạo log của riêng bạn với playground, thêm business properties và sau đó làm một số thí nghiệm để cảm nhận nó.

Bước 3: Cách tích hợp Logub vào dự án của bạn

Bạn sẽ cần danh sách Docker image dưới để vận hành Logub:

  • Logub Fluentd image để thu thập và gửi log đến Redis – Logub Fluentd Image
  • Redis image với module RediSearch Redis Mod Image
  • Logub controller image để phục vụ chức năng khám phá log – Logub Contoller Image
  • Logub UI để khám phá và truy vấn log – Logub UI Image

Định dạng log Logub

Hiện tại, Logub chỉ xử lý một định dạng log cụ thể. Trong tương lai, định dạng này sẽ được mở rộng và tùy chỉnh hơn.

Đây là định dạng Logub

Lưu ý, các trường này không bắt buộc.

Nếu bạn muốn thêm business properties của mình, bạn sẽ cần thêm một đối tượng JSON lồng nhau có "mdc" làm key. Ví dụ:

Publish log trong Logub

Để khám phá log trong Loghub, container của bạn cần dùng Docker Fluentd logging driver. Đây là ví dụ cấu hình cho tích hợp khách hàng.

Bước 4: Thiết lập Redis trong Logub

RediSearch

Logub dùng chức năng của RediSearch để xử lý log ứng dụng. Khi log được persist trong database Redis, chúng đi kèm 3 loại trường:

  • System properties: là thông tin Docker và Fluentd cung cấp khi gửi log (ví dụ: môi trường, tên container v.v.).
  • Basic properties: là thông tin cơ bản mà một log có (ví dụ: timestamp, service v.v.). Các thuộc tính này được lập chỉ mục tự động trong RediSearch.
  • Business properties: được đưa ra bởi người dùng Logub trong một trường cụ thể. Người dùng ở đây phải tuân theo định dạng Key-Value (Map). Nhờ khả năng nâng cao của RediSearch, bạn sẽ có thể lập chỉ mục các 'business properties' này nếu bạn muốn nghiên cứu trên chúng.

Ở đây chúng ta có một ví dụ log mô tả cách công cụ của chúng ta hoạt động khi Fluentd làm phẳng (flatten) và persist trong database Redis. Logub API sẽ cho phép user hoặc công ty lập chỉ mục một hoặc tất cả trường của đối tượng mdc.

Trong dự án này, Tag Datatype được dùng rộng rãi. Log thường được tìm kiếm dựa trên business properties khi tìm trong log (ví dụ: customer id). Hơn nữa, chúng ta cũng dùng TextField Datatype cho message log. Điều này cho phép user làm tìm kiếm toàn văn trong trường này.

Đây là schema đơn giản hóa của quy trình tìm kiếm:

Xây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước Đi

Redis

Redis được dùng để lưu log bởi Fluentd như này trong kiểu HashSet của Redis.

Xây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước Đi

Để theo dõi trường được lập chỉ mục bởi người dùng, bạn cũng có thể thêm một đối tượng 'schema' dùng kiểu List của Redis.

Xây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước Đi

Kết luận: Xóa Tan Sự Rối Rắm Với RediSearch

Một nhược điểm của sự bùng nổ đổi mới số, như đám mây, là giám sát cơ sở hạ tầng IT có thể trở nên phức tạp. Ứng dụng có khả năng rải rác ở nhiều vị trí khác nhau, làm cho việc kéo mọi log vào một vị trí trở nên thách thức.

Tuy nhiên, bằng cách dùng Redis, sự đơn điệu của quy trình này bị loại bỏ, cho phép bạn tìm kiếm, thu thập và lưu trữ log dễ dàng. Nếu bạn muốn tìm hiểu thêm về cách ứng dụng này được làm, bạn có thể xem video YouTube của Alexis ở đây.

Chúng tôi cũng có một loạt ứng dụng đổi mới được phát triển bởi các lập trình viên tài năng như Alex trên Launchpad của chúng tôi. Hãy xem, cảm hứng và xem bạn có thể tạo ra những đổi mới gì dùng Redis.

Xây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước Đi

Ai đã xây dựng ứng dụng này?

Xây Dựng Nền Tảng Phân Tích Log Mở Rộng Với Redis: Hướng Dẫn Bước Đi

Alexis Gardin

Alexis là một kỹ sư phần mềm đổi mới hiện đang làm việc cho Zendoc. Ghé trang GitHub của ông để xem ông đã tham gia dự án nào khác.