Để 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ù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' –