【prometheus】监控linux/windows

一。基本原理:

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU 、网络等等)。

实验环境准备

服务器IP分配

Prometheus服务器:192.168.1.30

被监控Linux主机:10.1.187.231和10.1.187.233

被监控windows主机:10.1.187.232和10.1.187.234

二。Prometheus的安装:

前提:打开一台虚拟机,关闭防火墙和SELinux

cpp 复制代码
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
 
# 关闭SELinux
setenforce 0
  1. wget -c https://github.com/prometheus/prometheus/releases/download/v2.21.0/ prometheus-3.3.0.linux-amd64.tar.gz

2.tar xf prometheus-3.3.0.linux-amd64.tar.gz -C /usr/local/:压缩文件

cpp 复制代码
[root@genkins ~]#  echo "创建软链接"
创建软链接
[root@genkins ~]# cd /usr/local
[root@genkins local]# ln -sv prometheus-3.3.0.linux-amd64/ prometheus
'prometheus' -> 'prometheus-3.3.0.linux-amd64/'
[root@genkins local]# mkdir -p /usr/local/prometheus/data创建数据存储文件
[root@genkins local]# ll prometheus/

3.useradd prometheus -M -s /sbin/nologin:添加服务运行用户

4.chown -R prometheus.prometheus /usr/local/prometheus/*:添加权限

chown -h prometheus.prometheus /usr/local/prometheus

7.vim /usr/lib/systemd/system /prometheus.service:创建服务运行启动脚本

bash 复制代码
[Unit]
Description=prometheus
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/usr/local/prometheus/data
Restart=on-failure
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target

8.systemctl daemon-reload:加载内容

9.启动服务

cpp 复制代码
[root@genkins local]# systemctl daemon-reload
[root@genkins local]# systemctl start prometheus暂时启动/或者systemctl enable --now prometheus.service开机自启服务(永久)
[root@genkins local]# systemctl status prometheus

这样Prometheus就部署完成了

三、Prometheus监控案例

3.1 监控远程Linux主机

使用Node Exporter采集主机运行数据

在Prometheus的架构设计中, Prometheus Server并不直接服务监控特定的目标, 其主要任务负责数据的收集,存储并且对外提供数据查询支持。 因此为了能够能够监控到某些东西, 如主机的CPU使用率, 我们需要使用到Exporter。 Prometheus周期性的从Exporter暴露的HTTP服务地址( 通常是/metrics) 拉取监控样本数据。

从上面的描述中可以看出Exporter可以是一个相对开放的概念, 其可以是一个独立运行的程序独立于监控目标以外,也可以是直接内置在监控目标中。 只要能够向Prometheus提供标准格式的监控样本数据即可。

这里为了能够采集到主机的运行指标如CPU, 内存, 磁盘等信息。 我们可以使用Node Exporter。

配置过程:

前提:在另外一台主机上配置,不要在配置了prometheus的主机上配置

10.1.187.231和10.1.187.233(因为都是linux系统所以操作相同)

1.wget -c https://github.com/prometheus/node_exporter /releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz

2.tar xf node_exporter-1.9.1.linux-amd64.tar.gz -C /usr/local/:进行解压

  1. ln -sv /usr/local/node_exporter-1.9.1.linux-amd64/ /usr/local/node_exporter:创建软连接

4.useradd prometheus -M -s /sbin/nologin:创建用户

-M:不给用户创建主目录,适合仅运行服务的系统用户;

-s /sbin/nologin:禁止用户登录系统,提升安全性

5.chown -R prometheus.prometheus /usr/local/node_exporter/*:授予权限

6.vim /usr/lib/systemd/system/node_exporter.service:添加node_exporter的服务脚本

cpp 复制代码
[Unit]

Description=node_exporter

After=network.target

[Service]

Type=simple

User=prometheus

ExecStart=/usr/local/node_exporter/node_exporter

Restart=on-failure

[Install]

WantedBy=multi-user.target

7.systemctl daemon-reload:加载脚本

8.systemctl start node_exporter.service:开启服务

9.curl http://IP/metrics:测试主机是否被监控

在 prometheus 主机(192.168.1.30) 上执行:

cpp 复制代码
# 测试 node_exporter 是否正常工作(访问被监控端)
curl http://10.1.187.231:9100/metrics

或者你也可以在 node_exporter 主机(10.1.187.231) 本机执行:

bash 复制代码
# 在本机测试
curl http://localhost:9100/metrics
# 或
curl http://127.0.0.1:9100/metrics

测试:在prometheus的主机上内添加node

1.vi /usr/local/prometheus/prometheus.yml:进行配置内容

2.systemctl restart prometheus.service:重启

查看结果:是否存在两个监控内容:去浏览器页面刷新

3.2。监控windows的过程

先通过这个登上windows服务器主机(两台windows都一样)

登录 Windows 后:

  1. 点击左下角"开始"菜单

  2. 输入 powershell

  3. 右键点击"Windows PowerShell" → 选择"以管理员身份运行"

1.首先在需要监控的Windows机器上安装wmi_exporter。wmi_exporter下载地址:https://github.com/martinlindhe/wmi_exporter/releases1

(https://kd-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200923142822716.png)

安装完毕之后,会自动创建一个开机自启的服务。

确认服务状态

  1. Win + R,输入 services.msc,回车

  2. 在服务列表中找到 windows_exporter

  3. 查看"状态"列:

    • "正在运行" → 已经自动启动了,无需任何操作

    • 空白 → 手动启动(右键点击 → 启动)

  4. PowerShell 中执行:

    Get-Service windows_exporter

    如果状态是 Running,说明服务已经在运行,不需要任何操作。

    如果状态是 Stopped,可以手动启动:Start-Service windows_exporter

2、验证服务是否正常工作,默认wmi-exporter端口为9182

在 PowerShell 中执行: curl http://localhost:9182/metrics

或者打开浏览器,访问http://localhost:9182/metrics

正常情况 :会返回大量以 # HELP# TYPE 开头的 Prometheus 格式指标数据,最后有类似 windows_cpu_time_total{...} 123456 这样的内容

cpp 复制代码
PS C:\Users\Administrator> curl http://localhost:9182/metrics


StatusCode        : 200
StatusDescription : OK
Content           : # HELP go_build_info Build information about the main Go module.
                    # TYPE go_build_info gauge
                    go_build_info{checksum="",path="github.com/prometheus-community/windows_exporter",version="(devel)"
                    } 1
                    # HEL...
RawContent        : HTTP/1.1 200 OK
                    Process-Start-Time-Unix: 1775114254
                    Transfer-Encoding: chunked
                    Content-Type: text/plain; version=0.0.4; charset=utf-8; escaping=underscores
                    Date: Thu, 02 Apr 2026 07:25:54 GMT

                    #...
Forms             : {}
Headers           : {[Process-Start-Time-Unix, 1775114254], [Transfer-Encoding, chunked], [Content-Type, text/plain; ve
                    rsion=0.0.4; charset=utf-8; escaping=underscores], [Date, Thu, 02 Apr 2026 07:25:54 GMT]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : System.__ComObject
RawContentLength  : 263002

3.3。监控mysql进程

1.CREATE USER 'mysql_monitor'@'localhost' IDENTIFIED BY '1';在mysql中创建用户

2.GRANT SELECT, REPLICATION CLIENT, PROCESS ON *.* TO 'mysql_monitor'@'localhost';

  1. wget -c https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.17.2.linux-amd64.tar.gz:下载组件

  2. tar xf mysqld_exporter-0.17.2.linux-amd64.tar.gz -C /usr/local/:进行压缩

  3. ln -sv mysqld_exporter-0.17.2.linux-amd64/ /usr/local/mysqld_exporter:创建软连接

6.vi /usr/local/mysqld_exporter/.my.cnf:创建隐藏文件的用户内容脚本

7.vi /usr/lib/systemd/system/mysql_exporter.service:创建服务启动脚本

Unit

Description=mysqld_exporter

After=network.target

Service

Type=simple

User=prometheus

ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf

Restart=on-failure

Install

WantedBy=multi-user.target:添加用户

8.useradd prometheus -M -s /sbin/nologin

9.chown -R prometheus.prometheus /usr/local/mysqld_exporter/*:添加权限

10.systemctl daemon-reload:加载脚本

11.systemctl start mysql_exporter.service:启动服务

Prometheus配置:

1.vi /usr/local/prometheus/prometheus.yml

  1. systemctl restart prometheus.service

测试效果:查看是否被监控

3.4在 Prometheus 服务器上添加 Windows 监控目标

编辑 Prometheus 配置文件vim /usr/local/prometheus/prometheus.yml

cpp 复制代码
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  # Prometheus 自身监控
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  # ===== 公司 Windows 服务器 =====
  - job_name: 'windows_10.1.187.232'
    static_configs:
      - targets: ['10.1.187.232:9182']
        labels:
          os: 'windows'
          env: 'production'
          instance: 'win-server-01'

  - job_name: 'windows_10.1.187.234'
    static_configs:
      - targets: ['10.1.187.234:9182']
        labels:
          os: 'windows'
          env: 'production'
          instance: 'win-server-02'

  # ===== 公司 Linux 服务器(node_exporter) =====
  - job_name: 'linux_10.1.187.231'
    static_configs:
      - targets: ['10.1.187.231:9100']
        labels:
          os: 'linux'
          env: 'production'
          instance: 'linux-server-01'

  - job_name: 'linux_10.1.187.233'
    static_configs:
      - targets: ['10.1.187.233:9100']
        labels:
          os: 'linux'
          env: 'production'
          instance: 'linux-server-02'

  # ===== 阿里云服务器(可选,需要网络互通) =====
  # - job_name: 'aliyun_linux_139.196.235.214'
  #   static_configs:
  #     - targets: ['139.196.235.214:9100']
  #       labels:
  #         os: 'linux'
  #         env: 'aliyun'

检查配置语法

/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml

输出 SUCCESS,说明配置正确。注意缩进

systemctl restart prometheus重启 Prometheus 服务

访问 Prometheus Web 界面:刷新:http://192.168.1.30:9090/targets

后面是绿色的up

相关推荐
Java后端的Ai之路13 分钟前
23、Python - 策略模式
linux·python·策略模式
tangwangbi10 小时前
Linux 系统配置文件:/etc/profile、~/.bashrc 和 ~/.bash_profile 三者之间的区别与作用
linux·运维·bash
Akiyama_Mio-Kon10 小时前
2026 最新:Dify 本地 Docker 部署完整教程(Windows + Git Bash)
windows·git·docker
蜀道山老天师10 小时前
Shell Bash变量与运算符(含条件测试与流程控制)
linux·运维·bash
Mr.朱鹏10 小时前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
mengge.cloud10 小时前
存储技术基础小白教程
linux·运维·服务器·wpf·存储
霸道流氓气质11 小时前
Spring AI 输出解析器进阶
人工智能·windows·spring
tang7778911 小时前
反爬虫场景下代理IP池的动态扩容与失效IP自动清理方案实现
linux·服务器·网络·爬虫代理·住宅代理ip
新时代牛马12 小时前
Linux 系统调用与IPC 完整篇:从syscall 入口、VDSO 到pipe/shm/futex 选型
linux·运维·服务器
黄一一91124313 小时前
跨平台视频图片压缩互转!离线视频压缩工具!Github开源轻松无损压缩视频!Win/Mac/Linux三端通用开源工具
windows·macos·音视频·开源软件