通过Heapster API获取Kubernetes监控数据

在上篇文章《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/usagecpu/requestcpu/limitmemory/requestmemory/limitcpu/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
}

本文由时间轨迹创作,转载请注明链接。
赞赏


微信赞赏

支付宝赞赏

已有 3 条评论

  1. 鱼丸

    你好,有个问题,想请教一下。
    我在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地址如何获取么?

    鱼丸 回复
    1. 时间轨迹
      @鱼丸

      已经好久没有搞Kubernetes了,看这提示有可能是你开了认证,匿名用户无权访问。具体你可以Google下。

      时间轨迹 博主 回复
      1. 鱼丸
        @时间轨迹

        我后来给用户添加了权限,可以访问了。非常感谢。

        鱼丸 回复

添加新评论

选择表情 captcha

友情提醒:不填或错填验证码会引起页面刷新,导致已填的评论内容丢失。

|