第1部:Prometheus监控

基础概念

1:Prometheus是什么

Prometheus是一个开源系统监控和警报工具,最初由SoundCloud创建。自2012年以来,许多公司和 组织都采用了 Prometheus,该项目拥有非常活跃的开发者和用户社区。

它现在是一个独立的开源项目,独立于任何公司进行维护。为了强调这一点,并明确项目的治理结构, Prometheus于2016年作为继Kubernetes之后的第二个托管项目加入了云原生计算基金会(CNCF)。

Prometheus将其指标收集并存储为时间序列数据,即指标信息与记录时的时间戳以及称为标签的可选 键值对一起存储。

2:Prometheus特征

  • 多维数据模型,使用指标名称和键值对标识时间序列数据。
  • 灵活的查询语言PromQL,可以利用数据的多维特性进行查询。
  • 不依赖分布式存储,单个服务器节点是自治的。
  • 通过HTTP的拉取模型进行时间序列数据的收集。
  • 支持通过中间网关进行时间序列的推送。
  • 可以通过服务发现或静态配置发现监控目标。
  • 提供多种图形和仪表盘支持模式。

3:什么事指标

通俗来说,指标是数值型的测量结果。时间序列意味着随着时间的推移记录变化。不同的应用程序需要 测量的内容各不相同。对于一个网页服务器来说,可能是请求的响应时间;对于一个数据库来说,可能是 活动连接数或活动查询数等。

指标在理解应用程序为什么以某种方式工作中起着重要作用。假设你在运行一个网络应用程序,并发现 应用程序很慢。你需要一些信息来找出应用程序出了什么问题。例如,当请求的数量很大时,应用程序 可能变慢。如果你有请求计数的指标,你可以找出原因,并增加服务器数量来处理负载。

4:Prometheus组件

普罗米修斯生态系统由多个组成部分组成,其中许多是可选的:

  • 主要的Prometheus服务器,用于抓取和存储时间序列数据。
  • 用于仪表化应用程序代码的客户端库。
  • 用于支持短期作业的推送网关。
  • 用于服务(如HAProxy、StatsD、Graphite等)的特定用途的导出器。
  • 用于处理告警的告警管理器。
  • 各种支持工具。

大部分Prometheus组件都是使用Go语言编写的,这使得它们易于构建和部署为静态二进制文件。

5:Prometheus架构

在这里插入图片描述

  • Prometheus Server:
    • retrieval:定时抓取监控目标(Targets)的指标数据。
    • TSDB:时序数据库
    • HTTP Server:对数据提供查询接口
  • Exporter(指标导出器):负责将应用程序或系统指标转换为 Prometheus 可抓取的格式。
  • **Push Gateway:**用于短生命周期作业无法被 Prometheus 定期抓取的场景。这类任务可以主动将指标推送到 Push Gateway,由 Prometheus 抓取。
  • Alertmanager:Prometheus 自身不发送告警,而是将规则触发的告警发送给 Alertmanager。
  • PromQL:查询语言
  • Service Discovery(服务发现):Prometheus 可以自动发现抓取目标。

Prometheus可以直接从提供Prometheus兼容的HTTP端点的目标中抓取指标数据。这使得它可以收集 各种指标,例如CPU使用率、内存消耗、请求延迟以及自定义的应用程序特定指标。此外,对于短暂的 作业或无法直接访问的目标,Prometheus可以利用一个称为"推送网关"的中间组件。作业可以将其指标 推送到推送网关,然后Prometheus定期从网关中抓取数据。

一旦Prometheus收集到指标数据,它会将其本地存储在时间序列数据库中。它根据指标名称和相关标 签的组合来组织数据。这使得可以高效地查询和检索特定的指标或指标集。

Prometheus提供了一种强大的查询语言,称为PromQL(Prometheus查询语言),允许用户对收集到的 数据执行复杂的查询和聚合操作。用户可以定义规则,对时间序列数据进行处理,生成新的衍生指标, 执行聚合操作,或者根据特定条件计算告警。

为了可视化收集到的指标,并创建仪表盘,Prometheus可以与Grafana集成,Grafana是一个流行的开源数据可视化工具。Grafana可以通过其APl消费Prometheus的数据,并创建丰富的可视化效果、图表和 图形。它提供了一个用户友好的界面,用于探索和监控收集到的指标数据。

总而言之,Prometheus是一个功能强大的监控和告警工具,可以从被监控的作业或服务中收集指标数 据,将其本地存储,并对数据进行规则处理,同时通过Grafana或其他APl消费者进行可视化。这种组合 为实时监控和故障排除应用程序和基础设施提供了强大的功能。

6:Prometheus应用场景

涉及容器都是prometheus监控

Prometheus非常适合记录任何纯数字的时间序列。它适用于机器中心的监控,也适用于高度动态的面 向服务的架构监控。在微服务的世界中,它对多维数据的收集和查询支持是其特点之一。

Prometheus的设计注重可靠性,它成为你在故障期间快速诊断问题的系统。每个Prometheus服务器都 是独立的,不依赖于网络存储或其他远程服务。在基础架构的其他部分出现故障时,你可以依赖它,并 且不需要建立复杂的基础设施来使用它。

7:Prometheus不适用场景

Prometheus非常重视可靠性。即使在故障情况下,仍然可以查看有关系统的可用统计信息。如果需要 100%的准确性,例如对每个请求进行计费,那么Prometheus可能不是一个好的选择,因为收集到的数据可能不够详细和完整。在这种情况下,最好使用其他系统来收集和分析计费数据,而将Prometheus 用于其他监控方面。

8:Prometheus官方网址

https://prometheus.io/docs/introduction/overview/

Prometheus部署

1:环境准备

序号 主机名 IP地址 角色
1 prometheus-server 192.168.108.30/24 server
2 prometheus-agent 192.168.108.31/24 agent

官方网站:https://prometheus.io/

2:源码包下载

下载源码包

[root@prometheus-server ~]# wget https://github.com/prometheus/prometheus/releases/download/v3.5.1/prometheus3.5.1.linux-amd64.tar.gz

3:安装Prometheus

[root@prometheus-server ~]# tar zxvf prometheus-3.5.1.linux-amd64.tar.gz 
prometheus-3.5.1.linux-amd64/
prometheus-3.5.1.linux-amd64/NOTICE
prometheus-3.5.1.linux-amd64/LICENSE
prometheus-3.5.1.linux-amd64/prometheus.yml
prometheus-3.5.1.linux-amd64/promtool
prometheus-3.5.1.linux-amd64/prometheus
[root@prometheus-server ~]# mv prometheus-3.5.1.linux-amd64 /usr/local/src/prometheus
[root@prometheus-server ~]# cd /usr/local/src/prometheus/
[root@prometheus-server prometheus]# ls
LICENSE  NOTICE  prometheus  prometheus.yml  promtool

修改配置文件prometheus.yml

[root@prometheus-server prometheus]# vim prometheus.yml
...
- job_name: "prometheus-server"    #23行 监控本地节点名称

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["192.168.108.30:9090"]  #29行 设置本地节点IP

启动服务

[root@prometheus-server prometheus]# nohup ./prometheus --config.file=prometheus.yml & 
[1] 3910
[root@prometheus-server prometheus]# nohup: ignoring input and appending output to ‘nohup.out’

nohup:用于忽略“挂起”信号,用于在 Linux 后台长期运行 Prometheus 监控服务,即使你关闭终端或断开 SSH 连接,服务也不会停止。

查看端口

[root@prometheus-server prometheus]# ps -ef | grep "9090"
root       3922   3561  0 14:30 pts/1    00:00:00 grep --color=auto 9090

4:使用systemd管理服务

先结束当前运行的进程

[root@prometheus-server prometheus]# ps -ef | grep "prometheus"
root       3910   3561  0 14:29 pts/1    00:00:00 ./prometheus --config.file=prometheus.yml
root       3938   3561  0 14:30 pts/1    00:00:00 grep --color=auto prometheus
[root@prometheus-server prometheus]# kill -9 3910
[root@prometheus-server prometheus]# ps -ef | grep "prometheus"
root       3948   3561  0 14:30 pts/1    00:00:00 grep --color=auto prometheus
[1]+  Killed                  nohup ./prometheus --config.file=prometheus.yml

添加service文件

[root@prometheus-server prometheus]# vim /usr/lib/systemd/system/prometheus.service
[Service]
ExecStart=/usr/local/src/prometheus/prometheus --config.file=/usr/local/src/prometheus/prometheus.yml   # 指定可执行文件绝对路径和配置文件的路径

[Install]
WantedBy=multi-user.target   # 自动启动

[Unit]
Description=prometheus
After=network.target     # 在网络服务启动之后启动Prometheus

启动服务

[root@prometheus-server prometheus]# systemctl daemon-reload
[root@prometheus-server prometheus]# systemctl enable prometheus.service --now
[root@prometheus-server prometheus]# systemctl status prometheus.service 
● prometheus.service - prometheus
   Loaded: loaded (/usr/lib/systemd/system/prometheus.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2026-02-26 14:36:42 CST; 5s ago
 Main PID: 4241 (prometheus)
    Tasks: 7
   CGroup: /system.slice/prometheus.service
           └─4241 /usr/local/src/prometheus/prometheus --config.file=/usr/local/src/prometheus/prome...

Feb 26 14:36:42 prometheus-server prometheus[4241]: time=2026-02-26T14:36:42.126+08:00 level=INFO...6ms
Feb 26 14:36:42 prometheus-server prometheus[4241]: time=2026-02-26T14:36:42.126+08:00 level=INFO so…ms
Feb 26 14:36:42 prometheus-server prometheus[4241]: time=2026-02-26T14:36:42.131+08:00 level=INFO...GIC
Feb 26 14:36:42 prometheus-server prometheus[4241]: time=2026-02-26T14:36:42.131+08:00 level=INFO...ed"
Feb 26 14:36:42 prometheus-server prometheus[4241]: time=2026-02-26T14:36:42.131+08:00 level=INFO...yml
Feb 26 14:36:42 prometheus-server prometheus[4241]: time=2026-02-26T14:36:42.133+08:00 level=INFO...090
Feb 26 14:36:42 prometheus-server prometheus[4241]: time=2026-02-26T14:36:42.133+08:00 level=INFO...090
Feb 26 14:36:42 prometheus-server prometheus[4241]: time=2026-02-26T14:36:42.242+08:00 level=INFO so…ms
Feb 26 14:36:42 prometheus-server prometheus[4241]: time=2026-02-26T14:36:42.242+08:00 level=INFO...s."
Feb 26 14:36:42 prometheus-server prometheus[4241]: time=2026-02-26T14:36:42.242+08:00 level=INFO...er"
Hint: Some lines were ellipsized, use -l to show in full.

关闭防火墙和selinux

[root@prometheus-server prometheus]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@prometheus-server prometheus]# setenforce 0

5:访问Prometheus网站

http://192.168.108.30:9090/

在这里插入图片描述

5:查看监控目标

在这里插入图片描述

查看到本节点被监控

在这里插入图片描述

点击metrics查看指标数据
在这里插入图片描述

Prometheus监控主机

下载监控主机源码包

在这里插入图片描述

在被监控端下载

[root@prometheus-server ~]# wget https://github.com/prometheus/node_exporter/releases/download/v1.10.2/node_exporter-1.10.2.linux-amd64.tar.gz

1:使用exporter监控本地节点

[root@prometheus-server ~]# tar zxvf node_exporter-1.10.2.linux-amd64.tar.gz 
node_exporter-1.10.2.linux-amd64/
node_exporter-1.10.2.linux-amd64/node_exporter
node_exporter-1.10.2.linux-amd64/LICENSE
node_exporter-1.10.2.linux-amd64/NOTICE
[root@prometheus-server ~]# mv node_exporter-1.10.2.linux-amd64 /usr/local/src/node_exporter
[root@prometheus-server ~]# cd /usr/local/src/node_exporter
[root@prometheus-server node_exporter]# ls
LICENSE  node_exporter  NOTICE

添加service文件

[root@prometheus-server node_exporter]# vim /usr/lib/systemd/system/node_exporter.service
[Service]
ExecStart=/usr/local/src/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target

[Unit]
Description=node_exporter
After=network.target

启动服务

[root@prometheus-server node_exporter]# systemctl daemon-reload
[root@prometheus-server node_exporter]# systemctl enable node_exporter.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/node_exporter.service to /usr/lib/systemd/system/node_exporter.service.
[root@prometheus-server node_exporter]# systemctl status node_exporter.service 
● node_exporter.service - node_exporter
   Loaded: loaded (/usr/lib/systemd/system/node_exporter.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2026-02-26 14:47:51 CST; 11s ago
 Main PID: 4624 (node_exporter)
    Tasks: 4
   CGroup: /system.slice/node_exporter.service
           └─4624 /usr/local/src/node_exporter/node_exporter

修改Prometheus配置文件,增加监控配置项

[root@prometheus-server ~]# vim /usr/local/src/prometheus/prometheus.yml 
...末尾添加
  - job_name: "node_exporter_prometheus-server"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'. 
    
    static_configs:
      - targets: ["192.168.108.30:9100"]

重启Prometheus服务

[root@prometheus-server ~]# systemctl restart prometheus.service 

打开页面查看target监控到目标

在这里插入图片描述

2:使用exporter监控其他节点

关闭防火墙及selinux

[root@prometheus-agent ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@prometheus-agent ~]# setenforce 0

解压软件包

[root@prometheus-agent ~]# tar zxvf node_exporter-1.10.2.linux-amd64.tar.gz 
[root@prometheus-agent ~]# mv node_exporter-1.10.2.linux-amd64 /usr/local/src/node_exporter

添加service文件

[root@prometheus-agent ~]# vim /usr/lib/systemd/system/node_exporter.service
[Service]
ExecStart=/usr/local/src/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target

[Unit]
Description=node_exporter
After=network.target

重启服务

[root@prometheus-agent ~]# systemctl daemon-reload
[root@prometheus-agent ~]# systemctl enable node_exporter.service --now
[root@prometheus-agent ~]# systemctl status node_exporter.service 
● node_exporter.service - node_exporter
   Loaded: loaded (/usr/lib/systemd/system/node_exporter.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2026-02-26 15:23:07 CST; 7s ago
 Main PID: 4756 (node_exporter)
    Tasks: 4
   CGroup: /system.slice/node_exporter.service
           └─4756 /usr/local/src/node_exporter/node_exporter

回到Prometheus-server服务上添加配置

[root@prometheus-server ~]# vim /usr/local/src/prometheus/prometheus.yml 
...末尾添加
  - job_name: "node_exporter_agent"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'. 

    static_configs:
      - targets: ["192.168.108.31:9100"]

重启Prometheus服务

[root@prometheus-server ~]# systemctl restart prometheus.service

在这里插入图片描述

Grafana展现数据

prometheus服务端端口9090,被监控端端口9100,grafana端口3000

grafana介绍

此实验是源码下载

Grafana 是一个开源的可视化和监控工具,能把各种数据源(比如 Prometheus、InfluxDB、MySQL) 的指标和日志,统一展示在酷炫的仪表盘上,特别适合监控系统状态和分析业务数据。

核心功能

  • 数据统一 :不用把数据都导入一个地方,它能直接连上现有数据源,比如云服务、数据库甚至 Google Sheets,统一可视化。
  • 灵活仪表盘 :支持多种图表类型(折线图、热力图等),还能自定义查询和告警,团队协作和分享 也方便。
  • 多数据源支持 :兼容 Prometheus、MySQL、Elasticsearch 等主流数据源。

软件包下载

选择downloads

在这里插入图片描述

点击开始使用Grafana,进入下载页面

在这里插入图片描述

选择开源下载进入页面后,选择最新版本,开源OSS,Linux系统
在这里插入图片描述

开启新节点进行部署,注意关闭防火墙

[root@grafana ~]# tar zxvf grafana_12.3.1_20271043721_linux_amd64.tar.gz
[root@grafana ~]# mv grafana-12.3.1/ /usr/local/src/grafana

启动服务

[root@grafana ~]# nohup /usr/local/src/grafana/bin/grafana-server --config=/usr/local/src/grafana/conf/defaults.ini --homepath=/usr/local/src/grafana &
[1] 3920
[root@grafana ~]# nohup: ignoring input and appending output to ‘nohup.out’

[root@grafana ~]# ps -ef |grep grafana
root       3920   3371 22 09:30 pts/1    00:00:05 grafana server --config=/usr/local/src/grafana/conf/defaults.ini --homepath=/usr/local/src/grafana
root       3933   3371  0 09:30 pts/1    00:00:00 grep --color=auto grafana

查看3000端口

[root@grafana ~]# ss -anput |grep 3000
tcp    LISTEN     0      128    [::]:3000               [::]:*                   users:(("grafana",pid=3920,fd=16))

使用systemd启动

[root@grafana ~]# kill 3920
[root@grafana ~]# vim /usr/lib/systemd/system/grafana.service
[1]+  Done                    nohup /usr/local/src/grafana/bin/grafana-server --config=/usr/local/src/grafana/conf/defaults.ini --homepath=/usr/local/src/grafana
[root@grafana ~]# systemctl daemon-reload
[root@grafana ~]# systemctl enable grafana.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana.service to /usr/lib/systemd/system/grafana.service.
[root@grafana ~]# systemctl status gra
grafana.service   graphical.target  
[root@grafana ~]# systemctl status grafana.service 
● grafana.service - grafana
   Loaded: loaded (/usr/lib/systemd/system/grafana.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2026-02-27 09:33:35 CST; 19s ago
 Main PID: 4096 (grafana)
    Tasks: 7
   CGroup: /system.slice/grafana.service
           └─4096 grafana server --config=/usr/local/src/grafana/conf/defaults.ini --homepath=/usr/l...

访问网站:http://192.168.18.150:3000

用户名:admin,密码:admin

在这里插入图片描述

跳过重置密码

在这里插入图片描述

进入首页
在这里插入图片描述

添加数据源

在这里插入图片描述

在这里插入图片描述

选择prometheus数据源

在这里插入图片描述

添加连接prometheus-server

在这里插入图片描述

点击测试,完成通过

在这里插入图片描述

点击,save保存,然后再点击Data sources

在这里插入图片描述

添加仪表盘

监控四大指标:CPU、内存、磁盘I/O、网络流量

官网地址:https://grafana.com/grafana/dashboards/

在这里插入图片描述

选择对主机进行监控的仪表盘,输入8919

在这里插入图片描述

回到grafana网页界面,点击dashboards->new->import

在这里插入图片描述

输入8919,点击load加载,需要等1-2分钟

在这里插入图片描述

选择之前添加的prometheus数据源

在这里插入图片描述

点击import

在这里插入图片描述

可以看到主机状态

在这里插入图片描述

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐