在上篇文章《Kubernetes资源使用监控实践》中,我们已经介绍了如何在Kubernetes上面部署Heapster,以及结合InfluxDB和Grafana做了界面展示,但在最后我们提到很多系统可能只是获取这些监控信息,然后使用自己的方式去做展示。所以本文主要介绍如何通过Heapster提供的REST API来获取这些监控信息。
Heapster通过Metric模型来组织这些监控数据,这些数据可以通过REST API来获取,目前提供的监控维度可参考:https://github.com/kubernetes/heapster/blob/master/docs/storage-schema.md。基本上涵盖了CPU、内存、网络、文件系统、运行时间等四个维度的监控统计,但是不同的资源(Cluster、Node、Namespace、Pod、Container)一般只会覆盖一部分监控维度,比如Cluster目前只支持memory/usage
、cpu/request
、cpu/limit
、memory/request
、memory/limit
、cpu/usage_rate
几个监控维度,这些都可以通过API获取到。
在上面给出的文档链接中,也已经给出了REST API,为了更方便的使用这些API,我写了一个简单的Library:heapster-client,通过这个库可以更方便的去使用Heapster提供的REST API。这里给一个简单的例子,实现获取Cluster支持的Metric,以及获取其中一个Metric的监控数据:
package main
import (
"fmt"
"github.com/niyanchun/heapster-client/client"
"time"
"github.com/niyanchun/heapster-client/type/v1"
)
func main() {
HEAPSTER_URL := "http://192.168.56.101:8080/api/v1/proxy/namespaces/kube-system/services/heapster"
client := client.NewClient(HEAPSTER_URL, "", "")
start, end := getTimeRange()
list, err := client.ListClusterMetric()
checkErr(err)
fmt.Printf("ListClusterMetric:\n %v", list)
metrics, err := client.GetClusterMetrics(v1.CPU_USAGE_RATE, start, end)
checkErr(err)
fmt.Printf("ListClusterMetric:\n %v", metrics)
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
func getTimeRange() (string, string) {
now := time.Now().UTC()
end := now.Format(time.RFC3339)
start := now.Add(-600 * 1e9).Format(time.RFC3339) // ten minutes before
fmt.Println(start, end)
return start, end
}
你好,有个问题,想请教一下。
我在openshift的环境里,通过#curl -X GET -H "Authorization: Bearer $TOKEN" https://hostname:8443/api/v1/namespaces/openshift-infra/services/heapster。是可以获取到heapster的api。
在使用您提供的脚本里修改HEAPSTER_URL 成上面的地址后,会提示“User "system:anonymous" cannot get services/api in the namespace "openshift-infra": User "system:anonymous" cannot get services/api in project "openshift-infra"。
因此想请教下您是否知道HEAPSTER_URL地址如何获取么?
已经好久没有搞Kubernetes了,看这提示有可能是你开了认证,匿名用户无权访问。具体你可以Google下。
我后来给用户添加了权限,可以访问了。非常感谢。