我的目标是使用Stackdriver TimeSeries REST API获取GKE的kubernetes集群上运行的Pod的度量标准的时间序列。
我确保在kubernetes集群上启用了Stackdriver监视和日志记录。
当前,我可以使用以下过滤器来获取群集中所有可用资源的时间序列:
metric.type="container.googleapis.com/container/cpu/usage_time" AND resource.labels.cluster_name="<MY_CLUSTER_NAME>"
为了获取给定的容器ID 的时间序列,我使用以下过滤器:
metric.type="container.googleapis.com/container/cpu/usage_time" AND resource.labels.cluster_name="<MY_CLUSTER_NAME>" AND resource.labels.pod_id="<POD_ID>"
此过滤器返回 HTTP 200 OK ,其中的响应主体为空。我从以下kubectl命令的响应中收到的metadata.uid
字段中找到了容器ID:
kubectl get deploy -n default <SERVICE_NAME> -o yaml
但是,当我使用GKE / Stackdriver生成的后台容器的Pod ID时,我确实获得了时间序列值。
由于我可以在GKE UI上看到我的pod的Stackdriver指标,因此我相信我也应该使用REST API来获取指标值。
我的疑问/问题是:
答案 0 :(得分:1)
我不会依赖kubectl get deploy
来获得广告连播ID。我会用kubectl -n default get pods | grep <prefix-for-your-pod> | awk '{print $1}'
我不这么认为,但是找出答案的最佳方法是,如果您有任何疑问,请向GCP开具支持票。
我不知道,Stackdriver是GCP中的监视解决方案。同样,您可以通过GCP支持进行检查。您还可以使用其他工具从Kubernetes获取指标,例如Prometheus。网上有很多指南,介绍如何在k8s上使用Grafana进行设置。例如one。
希望有帮助!
答案 1 :(得分:0)
我是否使用kubectl正确获取了Pod的Pod ID?
您可以将JSONpath
用作kubectl
的输出,在这种情况下,遍历Pod并获取metadata.name
和metadata.uid
字段:
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.uid}{"\n"}{end}'
这将输出如下内容:
nginx-65899c769f-2j775 d4fr5t6-bc2f-11e8-81e8-42010a84011f
nginx2-77b5c9d48c-7qlps 4f5gh6r-bc37-11e8-81e8-42010a84011f
由于无法获取指标而导致群集设置/服务部署出现问题吗?
如@Rico在他的回答中所述,如果您对故障排除的了解不多,与GCP支持联系可能是一种前进的方式。
是否还有其他方法可以使用REST API获取广告连播的时间序列?
您可以从Stackdriver门户中使用API Explorer或Metrics Explorer。有一些不错的疑难解答提示here,其中包含指向API Explorer的链接。在Stackdriver Metrics Explorer中,使用下拉列表选择例如特定的pod_id
。
摘自《监控指南故障排除》(上面链接),其中关于过滤后的查询的HTTP 200空响应:
如果您的API调用返回状态码200和空响应,则 有几种可能性:
- 如果您的呼叫使用过滤器,则该过滤器可能未匹配任何内容。过滤器匹配区分大小写。解决过滤器 问题,首先仅指定一个过滤器组件,例如 metric.type,然后查看是否获得结果。添加其他过滤器 一一对应。
- 如果使用自定义指标,则可能未指定定义自定义指标的项目。*
在阅读Monitoring API文档时,我发现了这个link。该链接将带您进入带有一些预填充字段的API资源管理器,进行相应的更改并添加您自己的过滤器。
目前我还没有使用REST API进行更多测试,但希望这可以使您前进。