对于运行状况检查,您无需依赖grep
. SDK包含过滤器,因此您可以过滤输出。但是,您只是将它们隐藏在终端上,但 SDK 仍会从 API 中获取它们(就像使用 一样grep
)。一种更优化的方法是使用gcloud logging read 'resource.type="gae_app" AND logName:"logs/appengine.googleapis.com%2Frequest_log" AND protoPayload.resource!="/health"' --order desc
,因为您将只请求与自定义过滤器匹配的日志。这提供了相当详细的日志,因此您可以直接在 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 调用还允许您添加自定义过滤器并使用字段掩码,仅返回相关的日志条目和字段,从而减少对网络的压力并获得更快的响应。
首先你必须创建一个日志过滤器,它只返回你想要的日志(没有健康检查或监控垃圾邮件)。最好的方法是在控制台本身中进行测试,直到您对显示的日志感到满意为止。
然后检查您感兴趣的字段。对于 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
传输以格式化输出并将响应大小限制为屏幕大小,但您应该将其调整为更易于阅读的字段和输出。