對於healthchecks,您不需要依賴grep
。該SDK有included filters,所以你可以只過濾輸出。但是,您只需將它們隱藏在終端上,但SDK仍然可以從API獲取它們(就像使用grep
一樣)。更好的方法是使用gcloud logging read 'resource.type="gae_app" AND logName:"logs/appengine.googleapis.com%2Frequest_log" AND protoPayload.resource!="/health"' --order desc
,因爲您只會請求與自定義過濾器匹配的日誌。這給出了相當詳細的日誌,因此您可以根據需要使其format the output directly on the SDK與gcloud app logs tail
相似。
由於gcloud logging
沒有一個「尾巴」模式,你可以把它包在watch
像:
watch 'gcloud logging read "resource.type=\"gae_app\" AND logName:\"logs/appengine.googleapis.com%2Frequest_log\" AND protoPayload.resource!=\"/health\"" --order desc --limit 1'
您應該添加--format
標誌,使輸出滿足您的需求,並--limit
標誌這對你來說是有意義的(限制越大,響應越慢)。
關於日誌開始的時間,如果您運行gcloud app logs tail -s default --log-http
並將SDK完成的請求與API上可用的過濾器進行比較,您會看到爲什麼它開始顯示一週之前的日誌。
我認爲在你的情況下,最好的選擇是直接打電話給API,包裝在watch
。
直接的API調用還允許您添加自定義過濾器並使用field mask,僅返回相關的日誌條目和字段,使其對網絡的響應更少,響應速度更快。
首先,您必須創建一個log filter,它將只返回您想要的日誌(沒有健康檢查或監控垃圾郵件)。執行此操作的最佳方法是在console itself中進行測試,直到您對顯示的日誌滿意爲止。
然後你檢查你感興趣的字段。對於GAE日誌,很可能你只需要protoPayload(並且只有那些有效載荷的一些字段,但是可以在以後被過濾)。
所以我們構建我們的API調用循環下列方式(警告:報價逃脫地獄):
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) }"'
作爲一個快速測試,我通過管道將jq
響應格式化輸出和限制響應大小與屏幕大小有關,但是您應該將其調整爲使您更容易閱讀的字段和輸出。
有同樣的問題。你有沒有發現任何東西? 正在嘗試清除日誌 'gcloud beta日誌記錄日誌列表' 'gcloud beta日誌記錄日誌刪除LOG_NAME' –