Một thực hành đăng nhập tốt cho các nhiệm vụ phân tán là gì?


14

Tôi có các cài đặt sau:

Tạo nhiều công nhân, thực hiện tính toán và chấm dứt chúng sau khi tính toán xong.

Vì vậy, mỗi lần nó sẽ là một phiên bản khác nhau chạy tác vụ, vì vậy mỗi máy chủ sẽ có một tệp nhật ký riêng, điều này sẽ dẫn đến một danh sách lớn các tệp.

Đó có phải là một thực hành tốt? Nếu không, cách nào tốt hơn để ghi nhật ký xử lý tác vụ trong trường hợp sử dụng cụ thể này?

PS: Cơ sở hạ tầng của tôi là serverless. Vì vậy, hiện tại, tôi đang đăng nhập vào (AWS) CloudWatch. Nhưng, vui lòng trả lời câu hỏi độc lập với AWS và phù hợp với thiết lập không có máy chủ càng nhiều càng tốt.

Câu trả lời:


12

"Serverless" chủ yếu chỉ có nghĩa là bạn có các dịch vụ siêu nhỏ tương đối đơn giản, thường chỉ là một ứng dụng web nhỏ hoặc một chức năng duy nhất được tự động kết nối với giao diện REST. Các khái niệm tương tự được áp dụng như bạn sẽ sử dụng cho một dịch vụ web truyền thống hơn: thường là một số kết hợp của các nhà văn syslog từ xa và nhà văn Tìm kiếm đàn hồi.

Syslog nối mạng hoặc từ xa đã xuất hiện từ lâu và có một bộ công cụ khá mạnh mẽ xung quanh nó. Bạn sẽ phải chạy (các) máy chủ syslog trung tâm nhưng giao thức rất đơn giản và có các thư viện máy khách thuần túy trong mọi ngôn ngữ mà bạn có thể sử dụng để gửi nhật ký. Một vấn đề phổ biến với syslog từ xa là nó thường dựa trên UDP. Điều này có nghĩa là dưới tải nặng, một số thông điệp tường trình có thể bị mất. Đây có thể là một điều tốt, giúp tránh tình trạng quá tải tầng, nhưng đó là điều cần lưu ý. Một số trình nền syslog mới hơn cũng hỗ trợ giao thức dựa trên TCP, nhưng hỗ trợ khách hàng ít thống nhất hơn, vì vậy hãy thực hiện nghiên cứu của bạn.

Gần đây hơn nhưng rất phổ biến là đăng nhập vào ElasticSearch. Điều này chủ yếu hữu ích vì bảng điều khiển Kibana và Logstash mất sáng (thường được gọi là ELK, ElasticSearch + Logstash + Kibana). Amazon thậm chí còn cung cấp tùy chọn ElasticSearch được lưu trữ, giúp bắt đầu dễ dàng hơn. ES sử dụng API REST tương đối đơn giản, do đó, bất kỳ ngôn ngữ nào có máy khách HTTP (đọc: tất cả chúng) đều ổn khi đăng nhập vào ES nhưng hãy chắc chắn rằng bạn cẩn thận với việc chặn các hoạt động mạng trong trường hợp mất hệ thống một phần (tức là đảm bảo ứng dụng sẽ không bị kẹt trong một cuộc gọi đăng nhập sẽ không bao giờ thành công và ngừng phục vụ các yêu cầu của người dùng).

Các cấu trúc liên kết ghi nhật ký phức tạp hơn chỉ bị giới hạn bởi trí tưởng tượng của bạn, mặc dù ngày nay bạn sẽ thấy rất nhiều việc sử dụng cơ sở dữ liệu / hàng đợi Kafka / bất cứ điều gì bạn muốn gọi nó như một điểm chính trong các hệ thống phân phối nhật ký rất phức tạp .

Về phía "máy chủ", bạn thường muốn tích hợp trực tiếp với các hệ thống này ở cấp mạng, vì vậy, gửi dữ liệu nhật ký trực tiếp đến syslog hoặc ES từ dịch vụ / chức năng của bạn, thay vì ghi vào các tệp cục bộ (mặc dù có thể lặp lại với các tệp cục bộ đó quá cho gỡ lỗi cục bộ và phát triển).


6

Câu trả lời này là nhiều hơn về các cân nhắc về khả năng mở rộng - nếu số lượng công nhân có thể cao và / hoặc nhiều người trong số họ có thể tạo ra các bản ghi với tốc độ cao cùng một lúc.

Có, sử dụng nhiều logfiles đồng thời là một thực hành tốt.

Cố gắng kết hợp thành một nhật ký logfile từ nhiều công nhân trong thời gian thực sẽ gây ra vấn đề:

  • sử dụng các cơ chế chặn để ngăn chặn mất tin nhắn sẽ làm chậm công nhân
  • thông điệp tường trình có thể xuất hiện không theo thứ tự trong logfile kết hợp
  • một cơ sở ghi nhật ký tập trung kết hợp các bản ghi có thể bị quá tải do tốc độ ghi hạn chế, tin nhắn sẽ bị mất

Shending logfiles (sử dụng nhiều logfiles hoạt động cùng một lúc) là một kỹ thuật được sử dụng bởi một số nhà cung cấp dịch vụ lưu trữ cung cấp hiệu suất cao, dịch vụ ghi nhật ký tập trung có thể mở rộng. Ví dụ: khi xuất nhật ký vào tệp Nhật ký StackDriver của Google tạo ra nhiều tệp nhật ký được phân tách . Từ các mục Nhật ký trong Google Cloud Storage :

Khi bạn xuất nhật ký vào nhóm Lưu trữ đám mây, Ghi nhật ký Stackdo ghi một tập hợp các tệp vào nhóm. Các tập tin được sắp xếp theo thứ bậc thư mục theo loại nhật ký và ngày. Loại nhật ký có thể là một tên đơn giản như sysloghoặc một tên ghép như thế appengine.googleapis.com/request_log. Nếu các bản ghi này được lưu trữ trong một thùng có tên my-gcs-bucket, thì các thư mục sẽ được đặt tên như trong ví dụ sau:

my-gcs-bucket/syslog/YYYY/MM/DD/
my-gcs-bucket/appengine.googleapis.com/request_log/YYYY/MM/DD/

Một thùng duy nhất có thể chứa các bản ghi từ nhiều loại nhật ký.

Các thư mục lá ( DD/) chứa nhiều tệp, mỗi tệp chứa các mục nhật ký được xuất trong một khoảng thời gian được chỉ định trong tên tệp. Các tệp được phân tách và tên của chúng kết thúc bằng số phân đoạn Snhoặc An(n = 0, 1, 2, ...). Ví dụ: đây là hai tệp có thể được lưu trữ trong directory my-gcs-bucket/syslog/2015/01/13/:

08:00:00_08:59:59_S0.json
08:00:00_08:59:59_S1.json

Hai tệp này cùng nhau chứa các syslogmục nhật ký cho tất cả các phiên bản trong giờ bắt đầu 0800 UTC. Để có được tất cả các mục nhật ký, bạn phải đọc tất cả các phân đoạn cho mỗi khoảng thời gian, trong trường hợp này, tệp phân đoạn 0 và 1. Số lượng phân đoạn tệp được viết có thể thay đổi cho mỗi khoảng thời gian tùy thuộc vào khối lượng của các mục nhật ký.

Các dịch vụ ghi nhật ký hiệu suất cao như vậy cũng có thể cung cấp các lựa chọn thay thế để ghi nhật ký vào tệp, do đó việc quản lý các tệp logfile có thể tránh được hoàn toàn nếu điều đó đáng quan tâm:

Cuối cùng - nếu hợp nhất logfile thời gian thực không phải là một yêu cầu có nhiều logfile có thể giúp quản lý nhật ký ngoại tuyến:

  • dễ dàng đưa ra các kế hoạch sao lưu, nén, lưu trữ và xử lý nhật ký lũy tiến
  • có thể xử lý song song nhiều bộ nhật ký (logfiles), giảm / tránh các hiệu ứng thắt cổ chai
  • không cần tách và viết lại tập tin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.