暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Zabbix对接Prometheus平台pod监控数据

IT那活儿 2024-05-11
694
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!    

Prometheus监控介绍

Prometheus是一个开源的系统监控和警报工具。它最初由SoundCloud开发,现已成为CNCF(Cloud Native Computing Foundation)的维护项目之一。Prometheus通过收集、存储和查询时间序列数据,提供了强大的监控和警报功能。
以下是Prometheus的一些关键特点和组件:
  • 数据模型
    Prometheus使用一种灵活的数据模型来表示时间序列数据。它使用指标名称、标签和时间戳来唯一标识每个数据点。
  • 数据采集
    Prometheus支持多种方式进行数据采集。它可以直接从应用程序、操作系统、容器和其他监控系统中获取指标数据。常见的数据采集方式包括客户端库、exporter和Pushgateway。
  • 数据存储
    Prometheus使用本地持久化存储来保存采集到的时间序列数据。默认情况下,数据存储为磁盘上的时间序列数据库。这种存储方式允许Prometheus有效地处理大量的数据,并支持快速查询和聚合。
  • 查询语言
    Prometheus提供了PromQL(Prometheus Query Language)作为查询和分析时间序列数据的语言。PromQL具有丰富的函数和操作符,可以用于过滤、聚合和计算指标数据。
  • 监控和警报规则
    Prometheus允许用户定义监控规则和警报规则。监控规则用于检测和记录系统的状态,而警报规则用于定义触发警报的条件和操作。
  • 可视化和仪表盘

    Prometheus提供了一个基本的Web界面,用于可视化指标数据和创建仪表盘。此外,Prometheus还与Grafana等外部工具集成,可以更灵活地创建丰富的可视化和仪表盘。


zabbix监控介绍

Zabbix 是一种广泛使用的开源网络监控系统,它可以用来监测和跟踪各种网络服务、服务器硬件以及网络设备。
以下是 Zabbix 监控系统的一些特点和功能介绍:
  • 多样化的监控功能
    Zabbix 可以监控各种IT环境中的不同指标,包括服务器性能、网络流量、数据库性能、应用程序状态等。
  • 灵活的配置
    用户可以通过 Zabbix 的 Web 界面进行灵活的配置,定义监控项、触发器、报警规则等。
  • 自动发现
    Zabbix 支持自动发现新的网络设备和服务,并添加到监控范围内。
  • 数据存储和图形展示
    Zabbix 可以存储历史数据,并生成图形化的报表和趋势图,帮助用户分析性能变化和趋势。
  • 报警功能
    当监控指标超出预设阈值时,Zabbix 可以发送报警通知,包括邮件、短信、即时消息等多种方式。
  • 分布式监控
    Zabbix 支持分布式监控,可以部署在多个地点来监控分布式的 IT 环境。
  • 扩展性

    Zabbix 提供了丰富的 API 接口和插件机制,用户可以根据需要进行定制和扩展。


Prometheus与zabbix的对比

Prometheus 和 Zabbix 都是流行的监控系统,但它们之间有一些关键差异。
以下是 Prometheus 和 Zabbix 的对比:
  • 数据模型
    Prometheus 使用一种称为指标(metrics)的数据模型,每个指标包含了一个名称、一组标签和时间序列数据。而 Zabbix 使用主机、应用程序、监控项等传统的监控概念。
  • 数据采集方式
    Prometheus 支持多种数据采集方式,包括通过客户端库或者使用各种类型的 Exporter 提供指标数据。Zabbix 通过主动轮询或者被动代理方式进行数据采集。
  • 灵活性
    Prometheus 具有高度的灵活性,可以轻松地适应不同的监控场景,支持针对个别指标设置警报规则。Zabbix 相对来说更加固定,需要在 Web 界面中进行手动配置。
  • 可扩展性
    Prometheus 在设计时考虑到了云原生环境的因素,支持 Kubernetes、Docker 等容器化部署方式,可以与 Kubernetes 自动扩展相集成。Zabbix 则需要手动进行扩展。
  • 开源性
    Prometheus 是一个完全开源的项目,由 CNCF 托管。而 Zabbix 是一个开源的项目,但其商业版也存在。
  • 性能
    Prometheus 的数据存储采用了高度压缩的时间序列存储方式,可以在较小的磁盘空间内存储大量数据。Zabbix 则在数据存储方面相对较为传统。

Prometheus 更适合于云原生环境,具有更高的灵活性和扩展性,而 Zabbix 则更适用于传统 IT 环境。选择哪种监控系统,需要根据实际情况进行评估和选择。


实现方法

我们所使用的监控平台基于Zabbix监控,但为了满足我们的需求,我们决定从Prometheus监控平台获取有关Pod的状态、CPU使用率和内存使用率的监控数据。这样一来,我们可以综合利用两个平台的优势,提供更全面和准确的监控和分析。
为了实现这个目标,我们可以使用多种方法。
第一种我们可以在Prometheus中配置相应的监控规则,以便准确收集有关Pod的状态、CPU使用率和内存使用率的数据。然后,我们在Zabbix监控平台上创建了一个新的主机,专门用来存储从Prometheus获取的监控数据。为了从Prometheus获取数据并传递给Zabbix,在Zabbix主机上安装了Prometheus的exporter插件。这个插件充当了一个桥梁的角色,它能够连接到Prometheus实例,并根据我们的配置,从中提取所需的监控指标。
通过配置Exporter插件的参数,以确保它能够准确地连接到Prometheus实例,并按需获取有关Pod状态、CPU使用率和内存使用率的数据。这包括指定Prometheus的地址和端口,以及定义我们感兴趣的监控指标。一旦我们成功地从Prometheus获取了数据,我们在Zabbix监控平台上创建了相应的监控项,用于接收来自Exporter插件的数据。
第二种方法我们可以使用接口的方式来进行数据的获取,通过在zabbix上建立相应监控项,以脚本的方式去获取相应数据。

这里我使用的是第二种方式,当然不仅仅可以使用这两种方式。


Prometheus监控数据格式示例

使用Prometheus的查询平台进行数据的查询,首先我们先根据数据格式来确认我们所需要的数据。图中是Running的pod节点个数。使用Prometheus查询平台的查询语句进行数据查询。

例如查询状态,使用kube_pod_status_phase{namespace="dmz-10000",phase="Running"},在 Prometheus 中,可以使用 kube_pod_status_phase 标签来获取有关 Kubernetes Pod 状态的指标数据。{}里面加上过滤条件。


获取数据需求及解决方法

由于实际生产环境有多个业务系统,如果我们使用全量去查询,达不到我们精确到每一个业务系统的目的,所以我们使用数据格式里面的命名空间“namespace”字段以及“Running”字段进行过滤,获取单个命名空间运行的pod。
但是当我们以以上规则进行查询的时候,会出现一个服务有多个pod实例的情况如下图,我们需要将一个服务下的pod实例进行一个合并归类。
为了解决这个需要,我们可以使用Prometheus查询平台的查询语句将这个业务系统下的服务给取出来,然后通过这个服务名去匹配获取到的pod实例并将他们合并归类。查询到的服务如图:
在实际的操作过程当中发现,查询的pod数据并不是唯一的(如下图),这个时候我们需要去寻找他们之间的关联关系,然后进行一个不需要的数据过滤以得到我们所需要的数据。
为了解决这个问题,我们通过对比发现,数据的格式上一条比一条更加的详细,我们发现其中有一个“container"字段,发现这个字段第二条数据总比第一条数据更加详细,发现我们可以不需要这个含有这个字段的数据,所以将其过滤掉。


编写脚本获取数据并处理

获取同一个业务下的各个服务名:
获取同一个业务下的各个pod实例:
将获取到的服务名与pod实例进行合并归类并以json方式返回:


通过zabbix监控平台获取数据

获取到的监控项数据如下:
因为获取到的是一个json文本信息,我们使用json查看工具可以查看具体信息:

END


本文作者:王 扬(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论