Prometheus Exporter 实战宝典:从零开始监控你的所有服务

发布时间:2026/7/7 3:58:53
Prometheus Exporter 实战宝典:从零开始监控你的所有服务 前言在上一篇文章中我们学习了 Prometheus 的核心概念——时间序列、样本、指标类型以及 Job 与 Instance。理论学完了接下来最实际的问题就是我怎么才能用 Prometheus 监控我自己的服务器和业务应用答案是Exporter。本文将带你从零开始一步步部署和配置 8 种最常用的 Exporter覆盖从基础设施到业务应用的完整监控链路。一、什么是 Exporter在开始动手之前先搞清楚一个核心概念什么是 Exporter简单来说Exporter 是一个采集监控数据并通过 Prometheus 监控规范对外提供数据的组件。更通俗地讲大多数应用如 MySQL、Redis、Nginx本身并不支持 Prometheus 的数据格式。Exporter 就像一个 “翻译官” 它负责从这些应用中拉取监控数据然后翻译成 Prometheus 能够理解的格式最后通过一个 HTTP 接口通常是/metrics暴露出来供 Prometheus 定期抓取。Exporter 的整个工作流程可以概括为三个环节采集从目标系统操作系统、数据库、应用等获取原始监控数据加工与转换将数据标准化为 Prometheus 的指标格式暴露通过 HTTP 端点/metrics让 Prometheus 来拉取Exporter 的两种类型官方 Exporter由 Prometheus 官方团队维护如 Node Exporter、mysqld_exporter第三方 Exporter由社区开发者维护如 redis_exporter、rabbitmq_exporter所有能够向 Prometheus 提供监控样本数据的程序都可以被称为一个 Exporter。而每一个 Exporter 的运行实例在 Prometheus 中被称为一个Target目标。现在让我们开始动手吧二、准备工作在开始部署各种 Exporter 之前请确保你已经具备以下条件一台 Linux 服务器CentOS 7/8 或 Ubuntu 20.04用于部署所有组件已经安装好 Prometheus参考上一篇文章基本的 Linux 命令行操作能力服务器防火墙已开放相应端口或临时关闭防火墙进行测试 小贴士如果你是初次接触建议先在虚拟机或测试环境上操作熟练后再应用到生产环境。三、监控 Linux 服务器Node Exporter3.1 什么是 Node ExporterNode Exporter 是 Prometheus 官方提供的用于采集主机级别系统指标的组件。通过部署 Node Exporter你可以监控服务器的 CPU 使用率、内存占用、磁盘 I/O、网络流量等核心指标。3.2 安装步骤步骤一下载 Node Exporter进入 Prometheus 官方 GitHub 仓库下载最新版本bash# 下载 Node Exporter以 v1.7.0 为例 wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz # 解压 tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz # 将二进制文件移动到系统路径 sudo mv node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/步骤二创建专用系统用户安全最佳实践bash# 创建一个无登录权限的系统用户来运行 Node Exporter[reference:11] sudo useradd --no-create-home --shell /bin/false node_exporter步骤三创建 Systemd 服务实现开机自启创建服务配置文件bashsudo tee /etc/systemd/system/node_exporter.service EOF [Unit] DescriptionNode Exporter Afternetwork.target [Service] Usernode_exporter Groupnode_exporter Typesimple ExecStart/usr/local/bin/node_exporter [Install] WantedBymulti-user.target EOF步骤四启动并验证bash# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启动 Node Exporter sudo systemctl start node_exporter # 设置开机自启 sudo systemctl enable node_exporter # 查看运行状态 sudo systemctl status node_exporterNode Exporter 默认监听在9100 端口。你可以通过浏览器或 curl 访问验证bashcurl http://localhost:9100/metrics | head -20如果能看到以# HELP和# TYPE开头的 Prometheus 格式输出说明 Node Exporter 运行成功步骤五配置防火墙如有需要bash# CentOS 7 sudo firewall-cmd --permanent --add-port9100/tcp sudo firewall-cmd --reload # Ubuntu sudo ufw allow 9100/tcp3.3 配置 Prometheus 抓取编辑 Prometheus 配置文件prometheus.yml添加以下内容yamlscrape_configs: - job_name: node static_configs: - targets: [你的服务器IP:9100]重启 Prometheus 使配置生效bashsudo systemctl restart prometheus在 Prometheus Web UIhttp://服务器IP:9090/targets中如果node作业的状态显示为UP说明抓取成功四、监控 Nginx 服务器Nginx Exporter4.1 前置条件开启 stub_status 模块Nginx Prometheus Exporter 是通过 Nginx 的stub_status模块来获取监控数据的。因此首先需要确保 Nginx 已启用该模块。检查是否已启用bashnginx -V 21 | grep -o with-http_stub_status_module如果输出with-http_stub_status_module说明已启用。如果没有输出任何结果则需要重新编译 Nginx 添加该模块。server { listen 8080; server_name localhost; location /stub_status { stub_status; } }配置 stub_status 页面在 Nginx 配置文件中添加以下 locationnginxserver { listen 8080; server_name localhost; location /stub_status { stub_status; } }重新加载 Nginx 配置bashnginx -t nginx -s reload验证 stub_status 是否可用bashcurl http://localhost:8080/stub_status正常输出类似textActive connections: 45 server accepts handled requests 1056958 1156958 4491319 Reading: 0 Writing: 25 Waiting: 74.2 安装 Nginx ExporterNginx Exporter 由 Nginx 官方维护GitHub 地址为nginxinc/nginx-prometheus-exporter。bash# 下载 Nginx Exporter wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v1.1.0/nginx-prometheus-exporter_1.1.0_linux_amd64.tar.gz # 解压 tar xvfz nginx-prometheus-exporter_1.1.0_linux_amd64.tar.gz # 移动到系统路径 sudo mv nginx-prometheus-exporter /usr/local/bin/4.3 启动 Nginx Exporterbash# 直接启动指定 stub_status 的访问地址 nohup /usr/local/bin/nginx-prometheus-exporter \ -nginx.scrape-urihttp://localhost:8080/stub_status # 或创建 Systemd 服务推荐Nginx Exporter 默认监听9113 端口。验证bashcurl http://localhost:9113/metrics | head -204.4 配置 Prometheus 抓取在prometheus.yml中添加yamlscrape_configs: - job_name: nginx static_configs: - targets: [服务器IP:9113]五、监控 Redis 服务器redis_exporter5.1 什么是 redis_exporterRedis 本身不支持直接输出 Prometheus 格式的指标而 redis_exporter 就是一个“中间翻译官”。它独立部署无需修改 Redis 配置兼容 Redis 单机、哨兵、集群等几乎所有部署形态。redis_exporter 可以采集的指标非常全面资源指标内存使用、内存碎片率连接指标客户端连接数、拒绝连接数数据指标Key 总数、缓存命中率命令指标各命令调用次数和耗时持久化指标RDB/AOF 状态集群/哨兵指标节点状态、主从同步延迟5.2 安装 redis_exporterbash# 下载 redis_exporter wget https://github.com/redis-performance/redis_exporter/releases/download/v1.55.0/redis_exporter-v1.55.0.linux-amd64.tar.gz # 解压 tar xvfz redis_exporter-v1.55.0.linux-amd64.tar.gz # 移动到系统路径 sudo mv redis_exporter-v1.55.0.linux-amd64/redis_exporter /usr/local/bin/5.3 启动 redis_exporter监控单个 Redis 实例bash# 如果 Redis 没有密码 nohup /usr/local/bin/redis_exporter -redis.addr localhost:6379 # 如果 Redis 有密码 nohup /usr/local/bin/redis_exporter \ -redis.addr localhost:6379 \ -redis.password 你的Redis密码 监控多个 Redis 实例bashnohup /usr/local/bin/redis_exporter \ -redis.addr redis://localhost:6379,redis://localhost:6380 redis_exporter 默认监听9121 端口。验证bashcurl http://localhost:9121/metrics | grep redis5.4 配置 Prometheus 抓取在prometheus.yml中添加yamlscrape_configs: - job_name: redis static_configs: - targets: [服务器IP:9121]六、监控 RabbitMQrabbitmq_exporter6.1 前置条件rabbitmq_exporter 通过 RabbitMQ 的Management Plugin来获取监控数据。因此需要确保 RabbitMQ 已启用 Management 插件bashrabbitmq-plugins enable rabbitmq_management6.2 安装 rabbitmq_exporter⚠️ 重要提示kbudde/rabbitmq_exporter 仅支持 RabbitMQ 3.x 版本。如果你使用的是 RabbitMQ 4.x 或更新版本请使用 RabbitMQ 官方提供的 Prometheus 插件。bash# 下载 rabbitmq_exporter wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v1.0.0-RC22/rabbitmq_exporter_1.0.0-RC22_linux_amd64.tar.gz # 解压 tar xvfz rabbitmq_exporter_1.0.0-RC22_linux_amd64.tar.gz # 移动到系统路径 sudo mv rabbitmq_exporter /usr/local/bin/6.3 启动 rabbitmq_exporterrabbitmq_exporter 通过环境变量进行配置bash# 设置 RabbitMQ 管理接口地址、用户名和密码 export RABBIT_URLhttp://localhost:15672 export RABBIT_USERguest export RABBIT_PASSWORDguest # 启动默认监听 9419 端口 nohup /usr/local/bin/rabbitmq_exporter 注意RabbitMQ 的用户需要拥有monitoring标签才能被 exporter 采集数据。验证bashcurl http://localhost:9419/metrics | head -206.4 配置 Prometheus 抓取yamlscrape_configs: - job_name: rabbitmq static_configs: - targets: [服务器IP:9419]七、监控 MongoDBmongodb_exporter7.1 安装 mongodb_exporterbash# 下载 mongodb_exporter wget https://github.com/percona/mongodb_exporter/releases/download/v0.40.0/mongodb_exporter-0.40.0.linux-amd64.tar.gz # 解压 tar xvfz mongodb_exporter-0.40.0.linux-amd64.tar.gz # 移动到系统路径 sudo mv mongodb_exporter-0.40.0.linux-amd64/mongodb_exporter /usr/local/bin/7.2 启动 mongodb_exporter通过--mongodb.uri参数指定 MongoDB 连接地址bash# 无认证的 MongoDB nohup /usr/local/bin/mongodb_exporter \ --mongodb.urimongodb://localhost:27017 # 有认证的 MongoDB nohup /usr/local/bin/mongodb_exporter \ --mongodb.urimongodb://用户名:密码localhost:27017/admin mongodb_exporter 默认监听9216 端口。验证bashcurl http://localhost:9216/metrics | grep mongodb7.3 配置 Prometheus 抓取yamlscrape_configs: - job_name: mongodb static_configs: - targets: [服务器IP:9216]八、监控 Docker多种方案选择Docker 的监控方案比较特殊主要有以下几种选择8.1 方案一cAdvisor推荐cAdvisorContainer Advisor是 Google 开源的项目专门用于监控容器资源使用情况是 Kubernetes 中默认的容器监控组件。bash# 使用 Docker 运行 cAdvisor docker run -d \ --namecadvisor \ -p 8080:8080 \ --volume/:/rootfs:ro \ --volume/var/run:/var/run:ro \ --volume/sys:/sys:ro \ --volume/var/lib/docker/:/var/lib/docker:ro \ --volume/dev/disk/:/dev/disk:ro \ google/cadvisor:latestcAdvisor 默认监听8080 端口访问http://服务器IP:8080/metrics即可看到 Prometheus 格式的指标。8.2 方案二docker-exporter轻量级如果只需要基础的容器监控CPU、内存、网络、I/O可以使用轻量级的 docker-exporter。bash# 使用 Docker 运行 docker-exporter[reference:39] docker run -d \ --name docker-exporter \ -v /var/run/docker.sock:/var/run/docker.sock \ -p 12345:12345 \ kerams/docker-exporterdocker-exporter 默认监听12345 端口。8.3 配置 Prometheus 抓取yamlscrape_configs: # cAdvisor - job_name: cadvisor static_configs: - targets: [服务器IP:8080] # docker-exporter如使用 - job_name: docker static_configs: - targets: [服务器IP:12345]九、监控 MySQL 8.0mysqld_exporter9.1 创建 MySQL 监控用户首先需要在 MySQL 中创建一个专用的监控用户并授予最小化权限。登录 MySQLbashmysql -u root -p执行以下 SQLsql-- 创建监控用户MySQL 8.0 需要分开执行 CREATE USER 和 GRANT[reference:43] CREATE USER exporterlocalhost IDENTIFIED BY StrongExporterPass123!;-- 授予必要权限GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO exporterlocalhost;-- 刷新权限 FLUSH PRIVILEGES;权限说明PROCESS允许读取进程列表和 InnoDB 状态REPLICATION CLIENT暴露复制延迟指标SELECT允许读取表统计信息9.2 安装 mysqld_exporterbash# 下载 mysqld_exporter wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz # 解压 tar xvfz mysqld_exporter-0.15.1.linux-amd64.tar.gz # 移动到系统路径 sudo mv mysqld_exporter-0.15.1.linux-amd64/mysqld_exporter /usr/local/bin/9.3 创建凭证文件为了安全不建议在命令行中直接传递密码而是使用配置文件。bash# 创建配置目录 sudo mkdir -p /etc/mysqld_exporter # 创建凭证文件[reference:46] sudo tee /etc/mysqld_exporter/.my.cnf EOF [client] userexporter passwordStrongExporterPass123! EOF # 设置文件权限仅允许 mysqld_exporter 用户读取 sudo chmod 600 /etc/mysqld_exporter/.my.cnf9.4 启动 mysqld_exporterbash# 使用凭证文件启动 nohup /usr/local/bin/mysqld_exporter \ --config.my-cnf/etc/mysqld_exporter/.my.cnf # 或直接使用 DSN 连接字符串[reference:47] nohup /usr/local/bin/mysqld_exporter \ --mysql.addrlocalhost:3306 \ --mysql.userexporter \ --mysql.passwordStrongExporterPass123! mysqld_exporter 默认监听9104 端口。验证bashcurl http://localhost:9104/metrics | grep mysql9.5 配置 Prometheus 抓取yamlscrape_configs: - job_name: mysql static_configs: - targets: [服务器IP:9104]十、监控 Spring Boot 2.0 应用Spring Boot 应用的监控与其他组件不同——它不需要额外安装 Exporter因为 Spring Boot Actuator 本身就支持暴露 Prometheus 格式的指标。10.1 添加 Maven 依赖在 Spring Boot 项目的pom.xml中添加以下依赖xml!-- Spring Boot Actuator -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId /dependency !-- Micrometer Prometheus 注册器 -- dependency groupIdio.micrometer/groupId artifactIdmicrometer-registry-prometheus/artifactId /dependency10.2 配置 application.properties在application.properties或application.yml中暴露 Prometheus 端点properties# 暴露所有 actuator 端点生产环境建议按需暴露 management.endpoints.web.exposure.include* # 或只暴露 Prometheus 端点 management.endpoints.web.exposure.includeprometheus # 设置 Actuator 端口默认与主端口相同 management.server.port8080如果是application.yml格式yamlmanagement: endpoints: web: exposure: include: prometheus server: port: 808010.3 验证指标端点启动 Spring Boot 应用后访问bashcurl http://localhost:8080/actuator/prometheus你应该能看到大量以jvm_、tomcat_、http_server_requests_等开头的 Prometheus 格式指标。Spring Boot Actuator 默认提供的指标包括JVM 指标内存、GC、线程Tomcat 指标连接数、请求数HTTP 请求指标请求次数、响应时间、状态码分布系统指标CPU 使用率、系统负载10.4 配置 Prometheus 抓取yamlscrape_configs: - job_name: spring-boot-app metrics_path: /actuator/prometheus static_configs: - targets: [应用服务器IP:8080]10.5 自定义业务指标进阶你还可以在代码中自定义业务指标javaimport io.micrometer.core.instrument.MeterRegistry; import org.springframework.stereotype.Service; Service public class OrderService { private final Counter orderCounter; public OrderService(MeterRegistry registry) { // 创建一个计数器统计订单创建数量 this.orderCounter Counter.builder(orders.created.total) .description(Total number of orders created) .register(registry); } public void createOrder() { // 业务逻辑... orderCounter.increment(); // 每次创建订单计数器 1 } }十一、总结与速查表本文介绍了 8 种常用的 Prometheus Exporter涵盖了从基础设施到业务应用的完整监控链路监控目标Exporter默认端口关键命令/配置Linux 服务器Node Exporter9100./node_exporterNginxNginx Exporter9113-nginx.scrape-urihttp://localhost:8080/stub_statusRedisredis_exporter9121-redis.addr localhost:6379RabbitMQrabbitmq_exporter9419环境变量RABBIT_URL、RABBIT_USERMongoDBmongodb_exporter9216--mongodb.urimongodb://localhost:27017DockercAdvisor8080Docker 容器运行MySQL 8.0mysqld_exporter9104--config.my-cnf/etc/mysqld_exporter/.my.cnfSpring BootActuator Micrometer应用端口/actuator/prometheus快速上手三步走下载并启动 Exporter → 访问http://localhost:端口/metrics验证配置 Prometheus → 在prometheus.yml中添加scrape_configs重启 Prometheus → 在 Targets 页面确认状态为UP监控数据采集只是第一步后续你还可以使用 Grafana 创建可视化仪表盘配置 Alertmanager 实现告警编写 PromQL 查询进行深入分析希望这篇教程能帮助你快速上手 Prometheus 监控如果在部署过程中遇到任何问题欢迎留言交流。