Dấu vết ngăn xếp với Google Cloud Run


8

Tôi đã tham gia tích hợp StackSearch Trace trên Google Cloud Run. Tôi có thể làm cho nó hoạt động với các đại lý, nhưng tôi bị làm phiền bởi một vài câu hỏi.

Cho rằng

  • Tác nhân Stackdo tổng hợp các dấu vết trong một bộ đệm nhỏ và gửi chúng theo định kỳ.
  • Quyền truy cập CPU bị hạn chế khi dịch vụ Cloud Run không xử lý yêu cầu.
  • Không có móc tắt cho các dịch vụ Cloud Run; bạn không thể xóa bộ đệm trước khi tắt máy: container chỉ nhận được SIGKILL . Đây là tín hiệu bạn không thể bắt được từ ứng dụng của mình.
  • Chạy một quy trình nền gửi thông tin bên ngoài chu trình phản hồi yêu cầu dường như vi phạm hợp đồng Thời gian chạy container Knative
  • Các bộ sưu tập dữ liệu ghi nhật ký được ghi lại và không yêu cầu tôi phải chạy một tác nhân, nhưng không có giải pháp nào như vậy cho đo từ xa.
  • Tôi đã tìm thấy một báo cáo về việc ai đó gặp phải dấu vết bị mất trên Cloud Run bằng cách sử dụng phương pháp dựa trên tác nhân

Google làm như thế nào

Tôi đã đi vào mã nguồn cho Cloud Endpoint ESP, (tích hợp Cloud Run đang trong giai đoạn thử nghiệm) để xem liệu họ có giải quyết nó theo một cách khác không, nhưng có một mẫu tương tự được sử dụng: có một bộ đệm có dấu vết (1s) và nó được xóa định kỳ.

Câu hỏi

Mặc dù tích hợp theo dõi của tôi dường như hoạt động trong thiết lập thử nghiệm của tôi, tôi lo lắng về các dấu vết không đầy đủ và thiếu khi tôi chạy nó trong môi trường sản xuất.

  • Đây là một vấn đề giả định hay một vấn đề thực sự?

  • Có vẻ như cách đúng đắn để tiếp cận điều này là viết từ xa vào nhật ký, thay vì sử dụng quy trình đại lý. Điều đó có được hỗ trợ với Stackdo Trace không?


2
Thật là một câu hỏi được viết tốt !!! Đẹp! Cảm ơn vì điều này.
Kolban

Câu trả lời:


1

Bạn đúng. Đây là một mối quan tâm công bằng vì hầu hết các thư viện theo dõi có xu hướng lấy mẫu / tải lên các dấu vết trong nền.

Vì (1) CPU của bạn gần như bị thu nhỏ gần bằng 0 khi container không xử lý bất kỳ yêu cầu nào và (2) thể hiện của container có thể bị giết bất cứ lúc nào do không hoạt động, bạn không thể tải lên các nhịp theo dõi được thu thập trong ứng dụng của mình một cách đáng tin cậy. Như bạn đã nói, đôi khi nó có thể hoạt động vì chúng tôi không dừng hoàn toàn CPU, nhưng nó sẽ không luôn hoạt động.

Nó xuất hiện giống như một số thư viện Stackdo (và / hoặc OpenTelemetry fka OpenCrade) cho phép bạn kiểm soát vòng đời của việc đẩy các dấu vết.

Ví dụ: gói Go này dành cho nhà xuất khẩu Stackroll của OpenCrade có một Flush()phương thức mà bạn có thể gọi trước khi hoàn thành yêu cầu của mình thay vì dựa vào thời gian chạy để tải lên định kỳ các dấu vết: https://godoc.org/contrib.go.opencrade.io/ nhà xuất khẩu / stackdo # Nhà xuất khẩu.Flush

Tôi giả sử các thư viện theo dõi khác trong các ngôn ngữ khác cũng hiển thị các phương thức Flush () tương tự, nếu không, vui lòng cho tôi biết trong các nhận xét và đây sẽ là một yêu cầu tính năng hợp lệ cho các thư viện đó.


Thư viện tác nhân theo dõi node.js hiện tại không có phương thức tuôn ra :(
Daniel Goldberg

1
Tôi nghĩ rằng đây sẽ là một yêu cầu vấn đề hợp lệ đối với kho GitHub của họ. Ngoài ra, một trường hợp sử dụng hợp lệ cho những người trong chúng tôi tại Google để thực hiện một cuộc khảo sát về những gì hỗ trợ này. Cảm ơn đã đưa lên.
AhmetB - Google

2

Đây là một vấn đề giả định hay một vấn đề thực sự?

Nếu bạn xem xét một dịch vụ Cloud Run nhận được một yêu cầu, thì đó chắc chắn là một vấn đề, vì thư viện sẽ không có thời gian để xóa dữ liệu trước khi CPU của đối tượng container bị điều chỉnh.

Tuy nhiên, trong các trường hợp sử dụng thực tế:

  • Dịch vụ Cloud Run thường nhận được yêu cầu liên tục hoặc thường xuyên, điều đó có nghĩa là phiên bản bộ chứa của nó sẽ chuyển sang: liên tục có CPU hoặc có sẵn CPU theo thời gian.
  • Bạn có thể bỏ dấu vết: Nếu một số dấu vết không được thu thập vì trường hợp bị từ chối, có khả năng bạn đã thu thập được một bộ mẫu đủ đa dạng trước khi điều này xảy ra. Ngoài ra, bạn có thể chỉ quan tâm đến các báo cáo tổng hợp, trong trường hợp đó, việc thu thập các dấu vết riêng lẻ không thành vấn đề.

Lưu ý rằng các thư viện Trace thường tự lấy mẫu các yêu cầu để theo dõi, họ hiếm khi theo dõi 100% các yêu cầu.

Có vẻ như cách đúng đắn để tiếp cận điều này là viết từ xa vào nhật ký, thay vì sử dụng quy trình đại lý. Điều đó có được hỗ trợ với Stackdo Trace không?

Không, Stackdo Trace lấy dữ liệu từ các nhịp được gửi tới API của nó. Lưu ý rằng để gửi dữ liệu tới Stackdo Trace, bạn có thể sử dụng các thư viện như OpenCenss và OpenTelemetry, các thư viện Trace Stack Trace độc ​​quyền không phải là cách được đề xuất.


1
Tôi nghĩ rằng giả định này rơi vào trường hợp sử dụng như sử dụng Cloud Run cho các công việc hàng loạt / cron (giả sử, một lần một ngày hoặc mỗi 2 giờ một lần). Bạn nhận được một yêu cầu, bạn đặt tỷ lệ lấy mẫu là 100%, nhưng sau khi yêu cầu được hoàn thành, có khả năng cao bạn sẽ bỏ lỡ dữ liệu theo dõi một lần một ngày.
AhmetB - Google
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.