使用REST API获取在GKE的k8s集群上运行的Pod的Stackdriver Monitoring TimeSeries数据

时间:2018-09-18 12:49:56

标签: kubernetes stackdriver google-kubernetes-engine google-cloud-stackdriver

我的目标是使用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来获取指标值。

我的疑问/问题是:

  1. 我是否使用kubectl正确获取了Pod的Pod ID?
  2. 由于无法获取指标而导致群集设置/服务部署出现问题吗?
  3. 是否还有其他方法可以使用REST API获取播客的时间序列?

2 个答案:

答案 0 :(得分:1)

  1. 我不会依赖kubectl get deploy来获得广告连播ID。我会用kubectl -n default get pods | grep <prefix-for-your-pod> | awk '{print $1}'

  2. 我不这么认为,但是找出答案的最佳方法是,如果您有任何疑问,请向GCP开具支持票。

  3. 我不知道,Stackdriver是GCP中的监视解决方案。同样,您可以通过GCP支持进行检查。您还可以使用其他工具从Kubernetes获取指标,例如Prometheus。网上有很多指南,介绍如何在k8s上使用Grafana进行设置。例如one

希望有帮助!

答案 1 :(得分:0)

  

我是否使用kubectl正确获取了Pod的Pod ID?

您可以将JSONpath用作kubectl的输出,在这种情况下,遍历Pod并获取metadata.namemetadata.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进行更多测试,但希望这可以使您前进。