StackDriver过滤器在UI正常生效,gcloud命令执行无返回结果求助
问题排查:gcloud logging read无结果但控制台能查到日志
我之前也踩过类似的坑!这大概率是几个容易忽略的细节导致的,我帮你逐一排查:
1. Shell转义的问题(最常见)
你在gcloud命令里用了转义双引号\",但在bash/zsh这类shell中,这种转义有时候会因为命令行解析的优先级出问题。更稳妥的做法是用单引号包裹整个过滤器表达式,这样里面的双引号不需要转义,shell也不会干扰查询逻辑:
gcloud logging read 'resource.type="cloud_dataproc_cluster" AND jsonPayload.application="application_1580294281653_0029"' --format="csv(timestamp,severity,jsonPayload.message)"
控制台里的过滤器是直接传递给Logging API的,而gcloud命令要经过shell的解析,转义字符处理不当就会导致实际发送的查询和你预期的不一样。
2. 时间范围不匹配
Stackdriver控制台默认展示最近24小时的日志,但gcloud logging read的默认时间范围是最近1小时!这是非常容易漏掉的点。你可以通过--time-range参数指定和控制台一致的范围:
gcloud logging read 'resource.type="cloud_dataproc_cluster" AND jsonPayload.application="application_1580294281653_0029"' --format="csv(timestamp,severity,jsonPayload.message)" --time-range=24h
如果你的日志是更早的,甚至可以用--start-time和--end-time精确指定时间区间。
3. 项目上下文不一致
检查你的gcloud命令当前关联的GCP项目,是不是和你在Stackdriver控制台里查看的项目一致?控制台可能已经切换到目标项目,但gcloud默认用的是另一个项目。
- 查看当前项目:
gcloud config get-value project - 如果不一致,要么切换项目:
gcloud config set project YOUR_PROJECT_ID,要么在命令里直接指定项目:
gcloud logging read 'resource.type="cloud_dataproc_cluster" AND jsonPayload.application="application_1580294281653_0029"' --format="csv(timestamp,severity,jsonPayload.message)" --project=YOUR_PROJECT_ID
建议你先试第一个方法(单引号包裹过滤器),这解决了我当时遇到的问题,如果不行再检查时间范围和项目~
内容的提问来源于stack exchange,提问作者jamiet
相关产品推荐
相关产品推荐

