Prometheus 监控 k8s集群(介绍)

本文介绍Prometheus 监控及在k8s集群中使用node-exporter、prometheus、grafana对集群进行监控。实现原理类似ELK、EFK组合。node-exporter组件负责收集节点上的metrics监控数据,并将数据推送给prometheus, prometheus负责存储这些数据,grafana将这些数据通过网页以图形的形式展现给用户。
Prometheus 监控 k8s集群(介绍)
Prometheus 监控 k8s集群(配置监控自己)
Prometheus 监控 k8s集群(集群部署)

一、介绍

Prometheus (中文名:普罗米修斯)是由 SoundCloud 开发的开源监控报警系统和时间序列数据库(TSDB).自2012年起,许多公司及组织已经采用 Prometheus,并且该项目有着非常活跃的开发者和用户社区.现在已经成为一个独立的开源项目。Prometheus 在2016加入 CNCF ( Cloud Native Computing Foundation 云原生计算基金会 ), 作为在 kubernetes 之后的第二个由基金会主持的项目。 Prometheus 的实现参考了Google内部的监控实现,与源自Google的Kubernetes结合起来非常合适。另外相比influxdb的方案,性能更加突出,而且还内置了报警功能。它针对大规模的集群环境设计了拉取式的数据采集方式,只需要在应用里面实现一个metrics接口,然后把这个接口告诉Prometheus就可以完成数据采集了,下图为prometheus的架构图。

iamge.png

promethues是一套开源的系统监控报警框架。Prometheus 所有采集的监控数据均以指标(metric)的形式保存在内置的时间序列数据库当中(TSDB):属于同一指标名称,同一标签集合的、有时间戳标记的数据流。除了存储的时间序列,Prometheus 还可以根据查询请求产生临时的、衍生的时间序列作为返回结果。包含了以下组件

  • prometheus server: 主要负责数据采集和存储,提供promQL查询语言支持。prometheus是一个时序数据库,将采集到的监控数据按照时间序列的方式存储到本地磁盘。

  • Push Gateway: 支持临时性job主动推送指标的中间网关。

  • PromDash: 使用rails开发的dashboard,用于可视化指标数据。

  • Exporters: 负责监控机器运行状态,提供被监控组件信息的 HTTP 接口被叫做 exporter。

    • 直接采集: exporter内置了prometheus支持,直接向prometheus暴露数据端点。

    • 间接采集:原不支持prometheus。通过prometheus提供的clien library编写的目标监控采集程序。

  • Altermanager: 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,企业微信,钉钉 , webhook

  • WebUI: Prometheus内置一个简单的Web控制台,可以查询指标,查看配置信息或者Service Discovery等,实际工作中,查看指标或者创建仪表盘通常使用Grafana,Prometheus作为Grafana的数据源;9090提供图形化界面功能。

promethues 的各个组件基本都是用 golang 编写,对编译和部署十分友好.并且没有特殊依赖.基本都是独立工作。

二、基本工作原理

  • Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
  • Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
  • Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
  • 在图形界面中,可视化采集数据。

三、Prometheus 的优势和不足

1. prometheus 的优势

  1. 强大的多维度数据模型:
    时间序列数据通过 metric 名和键值对来区分。
    所有的 metrics 都可以设置任意的多维标签。
    数据模型更随意,不需要刻意设置为以点分隔的字符串。
    可以对数据模型进行聚合,切割和切片操作。
    支持双精度浮点类型,标签可以设为全 unicode。

  2. 灵活而强大的查询语句(PromQL):
    在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。

  3. 易于管理:
    Prometheus server 是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。

  4. 高效:
    平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理数百万的 metrics。
    使用 pull 模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的 metrics。

  5. 可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端。

  6. 可以通过服务发现或者静态配置去获取监控的 targets。

  7. 有多种可视化图形界面。

  8. 易于伸缩。

2. prometheus 的不足 有待于改进

  1. 不支持集群化 (这个是当前最迫切的需求)

  2. 被监控集群过大后 本身性能有一定瓶颈(如果有集群 就可以解决这个问题)

  3. 偶尔发生数据丢失(这个问题 在2.0之前 会偶尔发生几次, 2.0之后貌似已经彻底解决 )

  4. 中文支持不好 中文资料也很少(这个问题 也是老生常谈了 往往新的 很牛的国外工具都不太支持中文)

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

四、prometheus 的基本概念

1. 数据模型

prometheus中存储的数据为时间序列,是由Metric的名字和一系列的标签(键值对)唯一标识的,不同的标签代表不同的时间序列。

样本:实际时间序列,每个序列包括一个float64的值和一个毫秒级的时间戳。(指标+时间戳+样本值)

metric名字: 具有语义,表示功能:例如:http_requeststotal, 表示 http 请求的总数。其中,metric 名字由 ASCII 字符,数字,下划线,以及冒号组成,且必须满足正则表达式[a-zA-Z:][a-zA-Z0-9_:]*。

标签:使一个时间序列有不同未读的识别。例如 http_requeststotal{method="Get"} 表示所有 http 请求中的 Get 请求。当 method="post" 时,则为新的一个 metric。标签中的键由 ASCII 字符,数字,以及下划线组成,且必须满足正则表达式[a-zA-Z:][a-zA-Z0-9_:]*。

格式:<metric name>{<label name>=<label value>, …}
例如:http_requests_total{method="POST",endpoint="/api/tracks"}。

2. Metric类型

Prometheus 客户端库主要提供四种主要的 metric 类型:

2.1 Counter(累加性metirc)

一种累加的 metric,典型的应用如:
请求的个数
结束的任务数
出现的错误数
。。。

例如:
查询 promhttp_metric_handler_requests_total{code="200",instance="localhost:9090",job="prometheus"}
返回 8,10 秒后再次查询,则返回 14。

2.2 Gauge(可增减性metric)

一种常规的 metric,典型的应用如:
温度
运行的 go routines 的个数
可以任意加减。

例如:
go_goroutines{instance="localhost:9090",job="prometheus"}
返回值 147,10 秒后返回 124。

注:
routines: go的日常工作?

2.3 Histogram(树状图)

注:
histogram 英[ˈhɪstəɡræm] 美[ˈhɪstəɡræm] 直方图;矩形图

可以理解为柱状图,典型的应用如:
请求持续时间
响应大小
可以对观察结果采样,分组及统计。

例如:
查询 go_gc_duration_seconds_sum{instance="localhost:9090",job="prometheus"}时
返回结果如下:Histogram metric 返回结果图

image.png
2.4 Summary(汇总)

类似于 Histogram,典型的应用如:
请求持续时间
响应大小
提供观测值的 count 和 sum 功能。
提供百分位的功能,即可以按百分比划分跟踪结果。

instance 和 jobs
instance:
一个单独 scrape(抓取) 的目标, 一般对应于一个进程。

jobs:
一组同种类型的 instances(主要用于保证可扩展性和可靠性),例如:
注:
scrape 英[skreɪp] 美[skreɪp] 刮掉; 削去; 擦坏; 擦伤; 刮坏; 蹭破; (使) 发出刺耳的刮擦声

当 scrape 目标时,Prometheus 会自动给这个 scrape 的时间序列附加一些标签以便更好的分别
例如: instance,job。

下面以实际的 metric 为例,对上述概念进行说明:
Metrics 示例

image.png

如图所示,这三个 metric 的名字都一样,他们仅凭 handler 不同而被标识为不同的 metrics。
这类 metrics 只会向上累加,是属于 Counter 类型的 metric,且 metrics 中都含有 instance 和 job 这两个标签。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342