prometheus监控平台部署与应用

发布于:2025-08-09 ⋅ 阅读:(17) ⋅ 点赞:(0)

prometheus监控平台部署与应用

prometheus的架构介绍

起源

Prometheus 起源于 Soundcloud ,因为微服务迅速发展,导致实例数量以几何倍数递增,不得不考虑设计一个符合以下几个功能的监控系统:

多维数据模型,可以按照实例,服务,端点和方法之类的维度随意对数据进行切片和切块。
操作简单,可以随时随地部署监控服务,甚至在本地工作站上,而无需设置分布式存储后端或重新配置环境。
可扩展的数据收集和分散的架构,以便于可以可靠的监控服务的许多实例,独立团队可以部署独立的监控服务。
转化为一种查询语言,可以利用数据模型进行有效的警报和图形展示。

但是,当时的情况是,以上的功能都分散在各个系统之中,直到2012年 Soundcloud 某位大神启动了一个孵化项目, Soundcloud 才把所有功能集合到一起, 这时也就有了 Prometheus。 Prometheus是用 Go 语言编写,从一开始就是开源的。 尽管一直很低调,一开始还是获得了很多粉丝与贡献者; 2016年 Prometheus 成为继 Kubernetes 之后,成为 CNCF(Cloud Native computing Foundation)第二个成员。

什么是Prometheus

Prometheus 具有足够的通用性,可以监控各个级别的实例:你自己的应用程序、第三方服务、主机或网络设备等等。此外Prometheus 特别适用于监控动态云环境和Kubernetes 云原生环境。
但是也需要注意的是 Prometheus 并不是万能的,目前并没有解决下面的一些问题:

日志和追踪(Prometheus 只处理指标,也称为时间序列)
基于机器学习或 AI 的异常检测
水平扩展、集群化的存储

Prometheus 的运行原理

通过 Http 协议周期性抓取被监控组件的状态。输出被监控组件信息的 Http 接口称为 exporter。常用组件大部分都有 exporter 可以直接使用,比如 haproxy,Nginx,MvSOL,Linux 系统信息(磁盘内存、CPU、网络等)

Prometheus 组件构成

Prometheus 生态系统由多个组件构成,其架构如下图所示:
在这里插入图片描述

(1)Prometheus server

服务核心组件,采用pu11方式收集数据,通过 http 协议传输。并存储时间序列数据

(2)Exporters/Jobs

负责收集不支持 Instrumentation 的目标对象的性能数据,并通过 HTTP 接口供 PrometheusServer 获取。

(3)Node-Exporter

用于收集各 node 节点的物理指标状态数据,如平均负载、CPU、内存、磁盘、网络等资源信息的指标数据,需要部署到所有运算节点。

(4)Kube-state-Metrics

为 prometheus 采集 k8s 资源数据的 exporter,通过监听 APIServer 收集 kubernetes 集群内资源对象的状态指标数据,例如 pod、deployment、service 等等。同时它也提供自己的数据,主要是资源采集个数和采集发生的异常次数统计。 需要注意的是 kube-state-metrics 只是简单的提供一个metrics 数据,并不会存储这些指标数据,所以可以使用 Prometheus 来抓取这些数据然后存储,主要关注的是业务相关的一些元数据,比如 Deployment、Pod、副本状态等;调度了多少个replicas?现在可用的有几个?多少个 Pod是 running/stopped/terminated 状态?Pod 重启了多少次?有多少job 在运行中。

(5)cadvisor

用来监控容器内部使用资源的信息,比如CPU、内存、网络 I/0、磁盘 I/0。

(6)blackbox-exporter

监控业务容器存活性。
###(7)Service Discovery
服务发现,Prometheus 支持多种服务发现机制:文件,DNS,Consul,Kubernetes,0penstack,EC2等等。基于服务发现的过程并不复杂,通过第三方提供的接口,Prometheus 查询到需要监控的Target列表,然后轮训这些 Target 获取监控数据。

(8)Alertmanager

是一个独立的告警模块,从 Prometheus server 端接收到 alerts 后,会进行去重、分组, 并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉等。

(9)Pushgateway

类似一个中转站,Prometheus 的 server 端只会使用 pu11 方式拉取数据,但是某些节点因为某些原因只能使用 push 方式推送数据,那么它就是用来接收 push 而来的数据并暴露给 Prometheus 的server 拉取的中转站。 可以理解成目标主机可以上报短期任务的数据到 Pushgateway,然后Prometheus server 统一从Pushgateway 拉取数据

(10)Grafana

是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给告警接收方。其官方库中具有丰富的仪表盘插件。

Prometheus 的特性

(1)提供多维度数据模型和灵活的査询语言:通过将监控指标关联多个Tag,来将监控数据进行任意维度的组合;提供 HTTP 查询接口:可以很方便的结合Grafana 等组件展示数据。
(2)支持服务器节点的本地存储,通过 prometheus 自带的时序数据库,可以完成每秒千万级的数据存储。不仅如此,在保存大量历史数据的场景中,prometheus 还可以对接第三方时序数据库如 OpenTSDB等
(3)定义了开放指标数据标准,以基于 HTTP 的 Pu11 方式采集时序数据,只有实现了 prometheus 监控数据格式的监控数据才可以被 prometheus 采集;并支持以 Push 方式向中间网关推送时序数据,能更灵活地应对各种监控场景。
(4)支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集。prometheus 目前已经支持 Kubernetes、consul 等多种服务发现机制,可以减少运维人员的手动配置环节。
(5)支持多种多样的图表和界面展示,比如 Grafana 等。

prometheus的工作流程

在这里插入图片描述

(1)配置监控目标:在 Prometheus 配置文件中定义监控目标及其相应的指标。
(2)拉取指标数据:Prometheus 会定期从监控目标拉取指标数据,并将数据存储到本地存储中。
(3)存储指标数据:Prometheus 会使用一种自定义的时间序列数据库(TSDB)存储指标数据,以便进行分析和查询。
(4)分析指标数据:Prometheus 提供了一个表达式语言,可以基于时间序列数据进行数据处理和分析操作,比如计算归一化指标、统计分位数、处理异常值等。
(5)查询指标数据:Prometheus 提供了一个基于 HTTP 的查询 API,可以用来执行査询操作和获取査询结果,获取到的查询数据可以通过图表和仪表盘的方式进行展示。

Grafana介绍

Grafana 是一款用 Go 语言开发的开源数据可视化工具,可以做数据监控和说几句统计,带有告警功能。其特点如下:

可视化:快速和灵活的客户端图形具有多种选项,面板插件为许多不同的方式可视化指标和日志。
报警:可视化地为最重要的指标定义警报规则,Granfana将持续评估他们,并发送通知。
通知:警报更改状态时,他会发出通知,接受电子邮件通知。
动态仪表盘:使用模板变量创建动态和可重用的仪表盘,这些模板变量作为下拉菜单出现在仪表板顶部。
混合数据源:在同一个图中混合不同的数据源,可以根据每个查询指定数据源,这甚至适用于自定义数据源。
注释:注释来自不同数据源图标,将鼠标悬停在事件上可以显示完整的事件元数据和标记。
过滤器:过滤器允许您动态创建新的键~值,这些过滤器将自动应用于该数据源的所有查询

Prometheus 的安装

资源列表

操作系统 配置 主机名 IP 角色
openeuler 24.03 2C4G prometheus 192.168.10.102 prometheus服务端
openeuler 24.03 2C4G grafana 192.168.10.103 grafana
openeuler 24.03 2C4G server01 192.168.10.101 被监控节点
openeuler 24.03 2C4G server02 192.168.10.110 被监控节点

基础环境

(1)关闭防火墙和内核

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=disabled/' /etc/selinux/config

(2)时间同步(前面写的有方法)

(3)修改主机名

hostnamectl set-hostname prometheus
hostnamectl set-hostname grafana
hostnamectl set-hostname server01

部署prometheus

部署Prometheus
Prometheus 的安装包可以前往官网下载:https://prometheus.io/download/

(1)Prometheus 的安装

tar zxvf prometheus-2.48.0.linux-amd64.tar.gz
mv prometheus-2.48.0.linux-amd64 /usr/local/prometheus
ln -s /usr/local/prometheus/prometheus /usr/local/bin
ln -s /usr/local/prometheus/promtool /usr/local/bin
prometheus --version

(2)注册prometheus的系统服务

在这里插入图片描述

(3)启动服务

systemctl daemon-reload
systemctl enable --now prometheus
ss -nlpt | grep prometheus

访问测试

(1)访问prometheus首页

http://192.168.10.102:9090/

(2)查看被监控端的状态

点击status下targets

在这里插入图片描述

(3)查看详细监控信息

http://192.168.10.102:9090/metrics

在这里插入图片描述

部署node_exporter

Exporter 是 Prometheus 的指标数据收集组件。它负责从目标 Jobs 收集数据,并把收集到的数据转换为 Prometheus 支持的时序数据格式。 和传统的指标数据收集组件不同的是,他只负责收集,并不向Server 端发送数据,而是等待Prometheus Server 主动抓取,node-exporter 默认的抓取 url地址:http://ip:9100/metrics

被监控端安装 node exporter

(1)Linux安装node exporter

tar zxvf node exporter-1.7.0.linux-amd64.tar.gz
mv node exporter-1.7.0.linux-amd64 /usr/local/node exporter

在这里插入图片描述
在这里插入图片描述

(2)Windows安装node exporte

上传 windows exporter-0.20.0-amd64.msi 文件
注意:可以把 windows 的防火墙关闭了
双击该文件即可
C:\Users\Lc>netstat -anofindstr :9182

Linux 主机的exporter 进程监听的是TCP 9100 端口。
windows 主机的exporter 进程监听的TCP 9182 端口。

配置prometheus

(1)进入prometheus配置文件添加target

vim /usr/local/prometheus/prometheus.yml
在这里插入图片描述

(2)重启prometheus服务

systemctl restart prometheus

重启完浏览器刷新访问 192.168.207.137:9090,打开普罗米修斯的监控页面 status
下 Targets查看有没有添加成功。如下图所示。
在这里插入图片描述

Grafana的部署与应用

部署Grafana

(1)安装

dnf -y install grafana-enterprise-10.2.2-1.x86_64.rpm

(2)启动服务

systemctl start grafana-server
systemctl status grafana-server
systemctl enable grafana-server
ss -nlpt | grep grafana

浏览器访问Grafana

(1)登录

http://192.168.10.103:3000

默认端口是3000
初始账号和密码都是admin

在这里插入图片描述

(2)设置数据源

进入Grafana,点击DATA SOURCRE添加数据源

在这里插入图片描述

(3)设置prometheus为数据源

在这里插入图片描述

(4)填写连接信息

192.168.10.102:9090写成自己的primetheus地址

然后save
在这里插入图片描述

用导入模板的方法添加Grafana监控面板

(1)在home页面点击添加dashboard

在这里插入图片描述

(2)选择导入模板的方法

在这里插入图片描述

(3)指定模板 ID

模板 ID 可以从 Grafana官网获得,Grafana为用户提供了大量的模板,简化了用户的管理难度。本案例中使用的模板 ID为 12633,填写好 ID 后点击“Load”按钮。https://grafana.com/grafana/dashboards/
注意:
12633:针对 Linux 的节点进行监控的模板14694:针对 Windows 的节点进行监控的模板用户也可以选择其他对应的模板进行创建。
在这里插入图片描述

(4)选择数据源

在这里插入图片描述

(5)导入后查看监控图像

在这里插入图片描述

prometheus告警

安装告警组件alertmanager

(1)安装alertmanager

tar zxvf alertmanager-0.26.0.linux-amd64.tar.gz
mv alertmanager-0.26.0.linux-amd64 /usr/local/alertmanager

(2)添加alertmanager服务

在这里插入图片描述

systemctl daemon-reload
systemcatl start alertmanager
systemctl enable alertmanager

(3)(3)访问alertmanager 的WEB 页面

alertmanager 的web 界面使用 9093 的端口,登录的url 如下http://192.168.10.102:9093
在这里插入图片描述

(4)将alertmanager添加到prometheus

在这里插入图片描述

mkdir /usr/local/prometheus/rules
vi /usr/local/prometheus/rules/hoststats-alert.rules
groups:
- name: node1_alerts
  rules:
  - alert: HighNodeCpu
    expr: instance:node_cpu:avg_rate1m > 10
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: Hgih Node CPU for 1 hour
      console: This is a Test


  - alert: HostOutOfMemory
    expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: Host out of memory (instance {{ $labels.instance }})
      description: "Node memory is filling up (< 10% left)\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"


  - alert: InstanceDown
    expr: up == 0
    for: 10s
    labels:
      severity: critical
    annotations:
      summary: Host {{ $labels.instance }} of {{ $labels.job }} is Down!

该规则文件总共添加了三条规则,第一个规则是检测 CPU负载,第二个是内存利用率的检测,第三个是主机 down 的检测。

在这里插入图片描述

(5)重启prometheus

systemctl restart prometheus

添加邮箱告警媒介

vim /usr/local/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.163.com:587'
  smtp_from: '15238625443@163.com'
  smtp_auth_username: '15238625443@163.com'
  smtp_auth_password: 'UMfhH35rstbrPAwV'
  smtp_hello: '163.com'
  smtp_require_tls: true

#路由配置
route:
  group_by: ['alertname', 'cluster']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 10s
  receiver: 'email'

#收信人员
receivers:
- name: 'email'
  email_configs:
  - to: '15238625443@163.com'
    send_resolved: true

#规则主动失效措施,如果不想用的话可以取消掉
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

测试

(1)关闭监控节点

等待邮箱
在这里插入图片描述

(2)启动关闭节点

等待邮箱
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到