集群监控组件 Prometheus | 青训营笔记

139 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 3 天

集群监控

集群监控的本质是一个聚合功能。单台机器的监控指标难以反应整个集群的情况,我们需要把整个集群的机器(体现为某个 HostGroup 下的机器)综合起来看。比如所有机器的 QPS 加和才是整个集群的 QPS。我们计算出集群的某个整体指标之后,也会有查看该指标的历史趋势图、为该指标配置报警这种需求,故而,我们会把这个指标重新 PUSH 回监控服务端,于是,你就可以把它当成一个普通监控数据来对待了。

Prometheus

简介

Prometheus 是一个开源系统监控和警报工具包,最初由 SoundCloud 构建。自 2012 年启动以来,许多公司和组织都采用了 Prometheus,该项目拥有非常活跃的开发者和用户社区。它现在是一个独立的开源项目,独立于任何公司进行维护。为了强调这一点,并明确项目的治理结构,Prometheus 于 2016 年作为继 Kubernetes 之后的第二个托管项目加入了云原生计算基金会。Prometheus 将其指标收集并存储为时间序列数据,即指标信息与记录时的时间戳以及称为标签的可选键值对一起存储。

指标

什么是指标?用外行的话来说,指标是数字测量。时间序列意味着随着时间的推移记录变化。用户想要测量的内容因应用程序而异。对于 Web 服务器,它可能是请求时间,对于数据库,它可能是活动连接数或活动查询数等。指标在理解您的应用程序为何以某种方式工作方面起着重要作用。假设您正在运行一个 Web 应用程序并发现该应用程序运行缓慢。您将需要一些信息来了解您的应用程序发生了什么。例如,当请求数量很高时,应用程序可能会变慢。如果您有请求计数指标,您可以找出原因并增加服务器数量来处理负载。

使用

我们可以通过 CloudWeGo 开源框架的中间件对其进行使用。

Client

import (
    "github.com/kitex-contrib/monitor-prometheus"
    kClient "github.com/cloudwego/kitex/client"
)

...
    client, _ := testClient.NewClient(
    "DestServiceName", 
    kClient.WithTracer(prometheus.NewClientTracer(":9091", "/kitexclient")))

    resp, _ := client.Send(ctx, req)
...

Server

import (
    "github.com/kitex-contrib/monitor-prometheus"
    kServer "github.com/cloudwego/kitex/server"
)

func main() {
...
    svr := api.NewServer(
        &myServiceImpl{}, 
        kServer.WithTracer(prometheus.NewServerTracer(":9092", "/kitexserver")))
    svr.Run()
...
}

参考

www.wenjiangs.com/doc/bvpz8yi…

github.com/kitex-contr…

prometheus.io/docs