文档首页 > > 用户指南> 插件管理> prometheus

prometheus

分享
更新时间:2020/12/30 GMT+08:00

插件简介

Prometheus是一套开源的系统监控报警框架。它启发于Google的borgmon监控系统,由工作在SoundCloud的google前员工在2012年创建,作为社区开源项目进行开发,并于2015年正式发布。2016年,Prometheus正式加入Cloud Native Computing Foundation,成为受欢迎度仅次于Kubernetes的项目。

在云容器引擎CCE中,支持以插件的方式快捷安装Prometheus。

插件官网:https://prometheus.io/

开源社区地址:https://github.com/prometheus/prometheus

插件特点

作为新一代的监控框架,Prometheus具有以下特点:

  • 强大的多维度数据模型:
    1. 时间序列数据通过metric名和键值对来区分。
    2. 所有的metrics都可以设置任意的多维标签。
    3. 数据模型更随意,不需要刻意设置为以点分隔的字符串。
    4. 可以对数据模型进行聚合,切割和切片操作。
    5. 支持双精度浮点类型,标签可以设为全unicode。
  • 灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个metrics进行乘法、加法、连接、取分数位等操作。
  • 易于管理:Prometheus server是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
  • 高效:平均每个采样点仅占 3.5 bytes,且一个Prometheus server可以处理数百万的metrics。
  • 使用pull模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的metrics。
  • 可以采用push gateway的方式把时间序列数据推送至Prometheus server端。
  • 可以通过服务发现或者静态配置去获取监控的targets。
  • 有多种可视化图形界面。
  • 易于伸缩。

需要指出的是,由于数据采集可能会有丢失,所以Prometheus不适用对采集数据要100%准确的情形。但如果用于记录时间序列数据,Prometheus具有很大的查询优势,此外,Prometheus适用于微服务的体系架构。

约束与限制

1.11及以上版本的混合集群支持此插件功能。

安装插件

  1. CCE控制台中,单击左侧导航栏的插件管理,在插件市场页签下,单击Prometheus下的“安装插件”按钮。
  2. 在安装插件页面,选择安装的集群和插件版本,单击“下一步:规格配置”
  3. “规格配置”步骤中,配置以下参数:

    表1 Prometheus配置参数说明

    参数

    参数说明

    插件规格

    根据业务需求,选择插件的规格,包含如下选项:

    • 演示规格(100容器以内):适用于体验和功能演示环境,该规模下prometheus占用资源较少,但处理能力有限。建议在集群内容器数目不超过100时使用。
    • 小规格(2000容器以内):建议在集群中的容器数目不超过2000时使用。
    • 中规格(5000容器以内):建议在集群中的容器数目不超过5000时使用。
    • 大规格(超过5000容器):建议集群中容器数目超过5000时使用此规格。

    实例数

    选择上方插件规格后,显示插件中的实例数,此处仅作显示。

    容器

    选择插件规格后,显示插件容器的CPU和内存配额,此处仅作显示。

    监控数据保留期

    自定义监控数据需要保留的天数,默认为15天。

    存储

    按照界面提示配置如下参数:

    • 类型:支持云硬盘。
    • 可用区:请根据业务需要进行选择。可用区是在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。
    • 子类型:支持普通IO、高IO和超高IO三种类型。各类型对比请参见系统盘和数据盘
    • 容量:请根据业务需要输入存储容量,默认10G。
    说明:

    若命名空间monitoring下已存在pvc,将使用此存储作为存储源。

  4. 单击“安装”

    待插件安装完成后,单击“返回”,在“插件实例”页签下,选择对应的集群,可查看到运行中的实例,这表明该插件已在当前集群的各节点中安装。

  5. CCE控制台中,单击左侧导航栏的插件管理,在“插件实例”中,单击“Prometheus”进入详情页,可以查看插件实例的详细情况。

卸载插件

  1. CCE控制台中,单击左侧导航栏的“插件管理”,在“插件实例”页签下,选择对应的集群,单击Prometheus下的“卸载”
  2. 在弹出的窗口中,单击“是”,可卸载该插件。

采集自定义指标

要采集应用自定义指标,首先要在应用代码中使用Prometheus的client libraries采集自定义指标,具体请参考Prometheus的指导文档

应用具备采集指标功能后,需要在工作负载对应的资源上增加配置,让Prometheus拉取指标。

可以在Pod或Service的metadata.annotation增加:

prometheus.io/path:'PATH'
prometheus.io/port: 'PORT'
prometheus.io/scrape: 'true'

其中,PATH为访问指标的URL,默认为“/metrics”,PORT为指标服务监听的端口。

若要要采集Pod类型的自定义指标,修改的是Deployment中的spec.templates.metadata.annotations。

加上配置后,就能在Prometheus的dashboard中查询到应用的自定义指标了。

如果要将自定义指标用于负载弹性伸缩(HPA),还需要确保Prometheus的指标能够被转换为Kubernetes的指标。安装Prometheus插件后,monitoring命名空间下的custom-metrics-apiserver无状态负载负责将Prometheus的指标转换为Kubernetes的指标,转换规则配置在monitoring命名空间下的配置项(ConfigMap)adapter-config中,请参考规则配置说明

采集自定义指标示例

我们使用Go语言编写一个采集HTTP请求数的程序,然后让Prometheus抓取指标数据。

本示例使用Go modules管理依赖。

新建文件夹custom-metrics-demo,进入文件夹,然后将下面的代码保存为main.go:

package main

import (
	"fmt"
	"log"
	"net/http"
	"strconv"

	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promhttp"
	promclient "github.com/prometheus/client_model/go"
)

// create a Counter metric
var httpRequestCounter = prometheus.NewCounter(
	prometheus.CounterOpts{
		Namespace: "demo",
		Name: "http_requests_total",
		Help: "Number of HTTP requests.",
	},
)

type handler struct {}

func (h *handler) count(w http.ResponseWriter, r *http.Request) {
	// increment the counter on every request
	httpRequestCounter.Inc()

	// get metric value
	m := promclient.Metric{}
	httpRequestCounter.Write(&m)
	count := int64(m.GetCounter().GetValue())

	// log and respond
	text := strconv.FormatInt(count, 10)
	log.Println(text)
	w.Write([]byte(text))
}

func main() {
	// register metrics for collection
	prometheus.MustRegister(httpRequestCounter)

	h := &handler{}
	http.HandleFunc("/count", h.count)
	// expose metrics for Prometheus to collect
	http.Handle("/metrics", promhttp.Handler())

	port := 8080
	addr := fmt.Sprintf(":%d", port)

	log.Printf("serving on port %d", port)

	if err := http.ListenAndServe(addr, nil); err != nil {
		log.Println(err)
	}
}

在上面的代码中,我们定义了指标demo_http_requests_total,访问/count接口时增加指标值,访问/metrics接口查询Prometheus指标,服务监听8080端口。

执行以下命令生成模块定义,构建可执行文件:

go mod init custom-metrics-demo
go mod tidy
go build .

运行服务:

./custom-metrics-demo

增加demo_http_requests_total指标值:

curl http://localhost:8080/count

查询Prometheus指标:

curl http://localhost:8080/metrics

可以看到demo_http_requests_total的值为1。

将示例程序制作成Docker镜像,创建无状态负载,接下来要让Prometheus插件拉取示例程序的指标。

可以在工作负载的Service中增加配置:

metadata:
  annotations:
    prometheus.io/port: '8080'
    prometheus.io/scrape: 'true'

给Prometheus有状态负载所在节点绑定弹性IP,将Prometheus的Service的访问类型改为节点访问,然后复制访问地址,在浏览器中打开,即可进入Prometheus dashboard,在查询输入框中输入demo_http_requests_total可查询到指标。

由于配置项monitoring/adapter-config中存在如下规则:

- seriesQuery: '{kubernetes_namespace!="",kubernetes_service!=""}'
      seriesFilters:
      - isNot: .*_seconds_total
      resources:
        overrides:
          kubernetes_namespace:
            resource: namespace
          kubernetes_service:
            resource: service
      name:
        matches: ^(.*)_total$
        as: ""
      metricsQuery: (avg(sum(rate(<<.Series>>{}[5m])) by (kubernetes_service, instance)) by (kubernetes_service))

Prometheus的指标demo_http_requests_total被转换为Kubernetes的指标demo_http_requests,其值为5分钟内平均每秒HTTP请求数,调用Kubernetes自定义指标接口查询:

kubectl get --raw '/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/services/*/demo_http_requests'

如果修改了monitoring/adapter-config,需要重启monitoring命名空间下的custom-metrics-apiserver无状态负载的实例,使修改生效。

Kubernetes的自定义指标可用于工作负载伸缩(HPA)

版本记录

表2 prometheus版本记录

插件版本

支持的集群类型

更新时间

更新特性

1.15.1

混合集群 v1.(15|17).*

2020/08/19

Prometheus是一个监控系统和时间序列库

1.1.0

混合集群 v1.11.*|v1.13.*

2020/07/29

Prometheus是一个监控系统和时间序列库

参考资源

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问