2017-04-18 13 views
6

Tôi đang cố gắng phát nhật ký cho ứng dụng Google Cloud Platform của mình. Điều đầu tiên tôi nhận thấy là Google gửi khoảng 10 lần kiểm tra sức khỏe mỗi giây, ở mức tối thiểu, vì vậy tôi phải grep -v /health để nhận bất kỳ thông tin hữu ích nào. Đó là tiêu chuẩn?"đuôi nhật ký ứng dụng gcloud" hiển thị dữ liệu cũ tuần

Điều thứ hai là nó truyền nhật ký cũ. Tôi đang chạy gcloud app logs tail -s default và nhận nhật ký từ ngày 11 tháng 4 (tuần cũ tại thời điểm này). Nhật ký mới hơn (từ 4, 3 và 2 ngày trước) đang chậm phát trực tuyến trong hơn vài giờ. Tôi chỉ cần nhấn làm mới trên ứng dụng của tôi (mà kích hoạt một thông điệp tường trình) và thấy không có bản ghi mới.

Có cách nào để xem chế độ xem nhật ký gần giống với thời gian thực (trong vòng vài phút hoặc vài giờ) không?

+1

Có cùng một vấn đề. Bạn có tìm thấy gì không? Hiện đang cố gắng xóa nhật ký 'danh sách nhật ký ghi nhật ký beta gcloud ' ' nhật ký ghi nhật ký beta gcloud xóa LOG_NAME' –

Trả lời

0

Để kiểm tra tình trạng sức khỏe, bạn không cần phải dựa vào grep. SDK có included filters, vì vậy bạn có thể lọc đầu ra. Tuy nhiên, bạn sẽ chỉ ẩn chúng trên thiết bị đầu cuối, nhưng SDK sẽ vẫn lấy chúng từ API (giống như sử dụng grep). Một cách tối ưu hơn sẽ sử dụng gcloud logging read 'resource.type="gae_app" AND logName:"logs/appengine.googleapis.com%2Frequest_log" AND protoPayload.resource!="/health"' --order desc, vì bạn sẽ chỉ yêu cầu nhật ký phù hợp với bộ lọc tùy chỉnh. Điều này cung cấp cho một bản ghi chi tiết, vì vậy bạn có thể format the output directly on the SDK để làm cho nó tương tự như gcloud app logs tail như bạn muốn.

Kể từ gcloud logging không có một chế độ "đuôi", bạn chỉ có thể bọc nó trong watch như:

watch 'gcloud logging read "resource.type=\"gae_app\" AND logName:\"logs/appengine.googleapis.com%2Frequest_log\" AND protoPayload.resource!=\"/health\"" --order desc --limit 1' 

Bạn nên thêm --format cờ để làm cho sản lượng phù hợp với nhu cầu của bạn, và --limit cờ một cái gì đó có ý nghĩa với bạn (giới hạn càng lớn, phản hồi càng chậm).

Về thời điểm nhật ký bắt đầu, nếu bạn chạy gcloud app logs tail -s default --log-http và so sánh yêu cầu của SDK với bộ lọc có sẵn trên API, bạn sẽ thấy lý do tại sao nó bắt đầu hiển thị nhật ký cũ một tuần.

Tôi nghĩ rằng tùy chọn tốt nhất trong trường hợp của bạn sẽ thực hiện cuộc gọi trực tiếp đến API, được bao bọc trong watch.

Cuộc gọi API trực tiếp cũng sẽ cho phép bạn thêm bộ lọc tùy chỉnh và sử dụng field mask, chỉ trả về các mục nhập nhật ký và trường có liên quan, làm cho nó ít căng thẳng hơn và có phản hồi nhanh hơn.

Trước tiên, bạn phải tạo một log filter sẽ chỉ trả lại nhật ký bạn muốn (không kiểm tra tình trạng hoặc theo dõi spam). Cách tốt nhất để làm điều này là bằng cách thử nghiệm trong console itself cho đến khi bạn hài lòng với các nhật ký được hiển thị.

Sau đó, bạn kiểm tra các trường bạn quan tâm. Đối với nhật ký GAE, rất có thể bạn chỉ muốn protoPayload (và chỉ một số trường tải trọng ở đó, nhưng những trường này có thể được lọc sau).

Vì vậy, chúng ta xây dựng vòng lặp gọi API của chúng tôi theo cách sau (cảnh báo: quote thoát địa ngục):

watch -tcn 0.5 'curl -H"Authorization: Bearer $(gcloud auth print-access-token)" \ 
    -H"Content-Type: application/json" \ 
    "https://logging.googleapis.com/v2/entries:list?fields=entries%2FprotoPayload" \ 
    -d"{ 
    \"filter\":\"resource.type=\\\"gae_app\\\" 
       logName=\\\"projects/$(gcloud config get-value project)/logs/appengine.googleapis.com%2Frequest_log\\\"\", 
    \"pageSize\":$(tput lines), 
    \"orderBy\":\"timestamp desc\", 
    \"resourceNames\": [ 
     \"projects/$(gcloud config get-value project)\" 
    ] 
}" 2>\dev\null |jq -cC ".entries[].protoPayload | { timestamp: .startTime, method, status, latency, URL: (.host + .resource) }"' 

Như một thử nghiệm nhanh, tôi đường ống phản ứng thông qua jq để định dạng đầu ra và hạn chế kích thước phản hồi với kích thước màn hình, nhưng bạn nên điều chỉnh kích thước này cho các trường và đầu ra giúp bạn dễ đọc hơn.

Các vấn đề liên quan