目 录CONTENT

文章目录

k8s | 监控 Prometheus + Grafana 简单使用(1)

如风
2023-07-18 / 0 评论 / 0 点赞 / 24 阅读 / 2,674 字

k8s | 监控 Prometheus + Grafana 简单使用(1)

​ Prometheus 是用 GO 语言开发的一个开源的系统监控和告警工具包,最初是 2012 年 SoundCloud 发布的,Prometheus是一个非常优秀的监控工具,准确的说,更是一套监控方案。Prometheus提供了监控数据收集,存储,处理可视化和告警的一套完整的监控解决方案。

​ Grafana 是一个开源的跨平台的度量分析、可视化工具,支持多种数据源,如Prometheus、Elasticsearch、InfluxDB等。它提供了丰富的可视化图表和面板,可以帮助用户更好地理解和分析监控数据。

​ 这一篇主要是关于 Prometheus 的原理和使用

架构 和 组件

img

Prometheus Server

​ 核心组件,负责数据的收集、存储和查询。Prometheus Server通过 HTTP 协议从ExporterPushgateway收集指标数据,Prometheus Server本身就是一个时序数据库(TSDB),将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。用户可以通过PromQLPrometheus查询语言)来查询和分析存储的数据。

Exporter

​ Exporter是用于收集应用程序或服务的指标数据的组件, Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。

Pushgateway

​ Pushgateway是一种临时的存储组件,用于接收短期工作的指标数据, Exporter可能无法直接暴露指标数据给Prometheus Server, 这时通过Pushgateway临时存储数据,然后由Prometheus Server定期从Pushgateway中拉取数据

Alertmanager

​ Alertmanager是用于处理警报的组件, 在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警

PromQL

​ PromQL是Prometheus的查询语言,用于查询和分析存储的指标数据。PromQL支持丰富的操作符和函数,可以进行数据聚合、过滤、计算等操作

工作流程

  1. Prometheus Server定期通过HTTP请求从Exporter或Pushgateway收集指标数据,并存储在本地的时间序列数据库中。
  2. 用户可以通过PromQL查询语言向Prometheus Server发送查询请求,Prometheus Server会从时间序列数据库中检索数据,并返回查询结果。
  3. Prometheus Server还可以根据配置的警报规则,对采集到的指标数据进行警报处理,并将警报发送给Alertmanager。
  4. Alertmanager负责对警报进行分组和去重,并根据配置的通知方式发送警报通知。

采集数据流程

Prometheus采集数据的步骤

  1. 定义监控指标: 想象一下,你的应用程序就像一个工厂,这个工厂有很多机器(服务器、数据库等)在工作。Prometheus想要监控这些机器的运行情况,比如温度(CPU使用率)、震动(磁盘I/O)等。为了做到这一点,每台机器都需要有一个仪表盘,显示这些信息。在Prometheus中,这些信息被称为“指标”。
  2. 暴露指标: 为了让Prometheus能够读取这些指标,每台机器都需要有一个特定的网址(通常是/metrics),Prometheus可以访问这个网址来获取指标数据。这就像是机器上有一个屏幕,显示着所有Prometheus需要的信息。
  3. 配置Prometheus: Prometheus就像一个监控中心,它需要知道哪些机器(目标)需要监控,以及多久检查一次。这些信息都写在一个叫做prometheus.yml的配置文件中。这个文件告诉Prometheus应该去哪些机器上读取数据,以及多久去读取一次。
  4. 定时拉取数据: Prometheus会按照配置的频率(比如每5分钟一次),去每台机器上访问那个特定的网址,获取最新的指标数据。这个过程就像是监控中心的工作人员定期去每台机器上抄表。
  5. 存储数据: 获取到的数据会被Prometheus保存在一个特殊的数据库中,这个数据库专门用来存储时间序列数据,就像是监控中心的档案室,记录着每台机器的历史数据。
  6. 查询和可视化: 当需要查看监控数据时,可以通过Prometheus的界面或者使用特殊的查询语言(PromQL)来查询数据库,获取想要的信息。这就像是在监控中心的大屏幕上显示数据。
  7. 设置告警: Prometheus还可以设置一些规则,比如如果机器的温度超过了某个值,就发出警报。这就像是监控中心有一个警报系统,如果检测到异常情况,就会提醒工作人员。

总结

​ Prometheus采集数据的过程就像是监控中心定期去每台机器上抄表,然后把这些数据保存起来,方便随时查看和分析。如果发现任何问题,它还可以发出警报,确保机器运行正常。这个过程是自动化的,不需要人工干预,Prometheus会一直默默地在后台工作,确保你的应用程序运行在最佳状态。

监控概念

数据模型

​ Prometheus 使用多维数据模型来表示指标数据。这个模型由指标名称和一组标签(label)组成,用于唯一标识一个时间序列。每个时间序列包含一系列的样本(sample),每个样本由一个时间戳和对应的值组成。

  • 指标名称(Metrics Name)

    代表了被监控的具体指标,比如 CPU 使用率、内存使用量、请求延迟等

  • 标签(Label)

    标签是用来区分不同时间序列的键值对。比如指标"cpu_usage",可以添加标签"instance"表示不同的节点或实例,也可以添加标签"job"表示不同的任务

  • 样本(Samples)

    样本是时间序列中的数据点,由一个时间戳和对应的值组成。时间戳表示数据点采集的时间,而值表示该时间点的指标数值

  • 表现形式

    Prometheus 使用一组时间序列的样本数据来表示监控指标,每个时间序列都由指标名称和一组标签组成。在查询时,可以使用 PromQL 查询语言来获取和处理这些时间序列数据

实例:两个指标"cpu_usage"和"memory_usage",对于"cpu_usage"指标,我们可以添加标签"instance"表示不同的节点,对于"memory_usage"指标,我们可以添加标签"job"表示不同的任务

以下是两个时间序列的样本数据:

cpu_usage{instance="node-1"}:
  - (timestamp1, 0.85)
  - (timestamp2, 0.90)
  - (timestamp3, 0.70)

cpu_usage{instance="node-2"}:
  - (timestamp1, 0.60)
  - (timestamp2, 0.75)
  - (timestamp3, 0.80)

memory_usage{job="app"}:
  - (timestamp1, 256MB)
  - (timestamp2, 512MB)
  - (timestamp3, 128MB)

指标类型

  • Counter(计数器)

    Counter 是一种单调递增的指标,用于表示累计的计数。如请求总数、错误总数等

  • Gauge (仪表盘)

    Gauge 是一种可变的指标,用于表示某个瞬时的数值。通常用于表示系统状态的实时数值,如当前的 CPU 使用率、内存使用量等

  • Histogram(直方图)

    Histogram 是一种用于测量和统计数据分布情况的指标,它会将数据按照指定的桶(bucket)范围进行划分,并计算每个桶中样本的数量。Histogram 可以用于统计请求的响应时间、请求大小等分布情况。

  • Summary(摘要)

    Summary 是一种与 Histogram 类似的指标,用于测量数据分布情况。它会计算样本的分位数,比如50%分位数、90%分位数等,以及样本的总数。Summary 可以用于统计请求的响应时间等分布情况。

实例:包含了以下四个指标:

  1. Counter 类型的指标 “http_requests_total”,用于记录 HTTP 请求的总数。
  2. Gauge 类型的指标 “cpu_usage”,用于表示节点的 CPU 使用率。
  3. Histogram 类型的指标 “request_duration_seconds”,用于记录请求的处理时间分布情况。
  4. Summary 类型的指标 “response_size_bytes”,用于记录响应数据大小分布情况。
http_requests_total:
  - (timestamp1, 100)  # 在 timestamp1 时刻,请求总数为 100
  - (timestamp2, 150)  # 在 timestamp2 时刻,请求总数为 150

cpu_usage:
  - (timestamp1, 0.85)  # 在 timestamp1 时刻,节点的 CPU 使用率为 0.85
  - (timestamp2, 0.90)  # 在 timestamp2 时刻,节点的 CPU 使用率为 0.90

request_duration_seconds_bucket:
  - (timestamp1, {"le": 0.1, "count": 10})  # 在 timestamp1 时刻,处理时间小于等于0.1秒的请求有 10 个
  - (timestamp1, {"le": 1, "count": 50})    # 在 timestamp1 时刻,处理时间小于等于1秒的请求有 50 个

response_size_bytes_summary:
  - (timestamp1, {"quantile": 0.5, "value": 1024})  # 在 timestamp1 时刻,50%的响应数据大小小于等于 1024 字节
  - (timestamp1, {"quantile": 0.9, "value": 2048})  # 在 timestamp1 时刻,90%的响应数据大小小于等于 2048 字节

​ 通过这些样例数据,我们可以使用 PromQL 查询语言来获取和分析 HTTP 请求总数、节点的 CPU 使用率、请求处理时间分布情况以及响应数据大小分布情况,从而对系统的性能和资源使用情况进行监控和分析。

参考链接

0

评论区