亲爱的读者们👋
欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀
Prometheus是云原生和DevOps的核心监控工具,我们将从基础概念开始,逐步涵盖配置、查询、告警和可视化。💪
在接下来的30天里,我们将解锁Prometheus的实战技巧,通过案例和分享,助你深入理解其工作原理。📆
目标:30天后,你将熟练掌握Prometheus,为未来的项目挑战做好准备!💯
这是一段精彩旅程,期待你的加入!🎉
文章目录
一、nginx-prometheus-exporter概述📘
定义
nginx-prometheus-exporter是一个开源工具,它的主要作用是将Nginx服务器的性能指标转化为Prometheus可以理解和采集的数据格式。通过这个工具,Prometheus可以轻松地监控和分析Nginx服务器的运行状态。
功能
数据转换:它能够将Nginx的stub_status或API提供的性能指标转换成Prometheus监控系统所需的格式。这些指标包括但不限于连接数、请求数、处理中的请求数等。
HTTP接口暴露:该工具还通过HTTP协议暴露转换后的指标数据,使得Prometheus可以通过其拉取机制定期收集这些数据。
灵活配置:用户可以通过配置文件或命令行参数来指定需要监控的Nginx实例以及数据收集的详细设置。
应用场景
Nginx服务器监控:对于运行着Nginx的网络服务,管理员需要实时监控其性能和健康状态。nginx-prometheus-exporter能够将Nginx的内部状态信息转换为Prometheus可采集的格式,从而实现这一点。
性能调优和故障排查:当Nginx服务器出现性能瓶颈或故障时,管理员可以利用该工具提供的详细指标数据进行问题定位和分析。
与Prometheus和Grafana集成:结合Prometheus强大的数据收集、存储和查询能力,以及Grafana的可视化功能,nginx-prometheus-exporter为运维团队提供了一个全面、直观的Nginx监控解决方案。
二、安装nginx-prometheus-exporter💾
注意事项和常见问题
1.环境配置:确保服务器上已经安装了Nginx,并且Nginx正常运行。确认Nginx已经配置了stub_status模块,这个是nginx-prometheus-exporter获取数据必需要的。
2.依赖安装:nginx-prometheus-exporter是用Go语言编写的,因此确保服务器上安装了适当版本的Go环境(如果需要从源码编译安装)。如果是通过包管理器或预编译的二进制文件安装,则可能不需要Go环境。
3.端口配置:选择一个未被占用的端口来运行nginx-prometheus-exporter。确保Prometheus服务器能够访问该端口以收集数据。
4.配置文件:准备一个配置文件或使用环境变量来指定Nginx服务器的地址和端口等信息。确保配置文件中的信息准确无误,并与实际Nginx服务器设置相匹配。
2.1 访问nginx-prometheus-exporter官方网站 🌐
- 打开浏览器,访问nginx-prometheus-exporter的官方下载页面,通常位于Github官方网站的nginx-prometheus-exporter下:https://github.com/nginxinc/nginx-prometheus-exporter/releases
2.2 选择适合的版本🔍
- 在下载页面,你将看到不同操作系统的nginx-prometheus-exporter二进制包。根据你的操作系统选择适合的版本。例如,如果你使用的是Linux 64位系统,就选择nginx-prometheus-exporter_1.2.0_linux_amd64.tar.gz(其中x.x.x是版本号)。
2.3 下载nginx-prometheus-exporter⬇️
- 点击所选版本的下载链接,将nginx-prometheus-exporter的二进制包下载到你的本地计算机。
2.4 解压安装包📂
- 将下载的nginx-prometheus-exporter压缩包解压到你想要安装的目录。你可以使用命令行工具(如tar)来完成这个步骤。解压后,你将看到一个名为nginx-prometheus-exporter_1.2.0_linux_amd64的目录,其中包含nginx-prometheus-exporter的二进制文件和其他相关文件。
tar -xzf nginx-prometheus-exporter_1.2.0_linux_amd64.tar.gz
2.5 运行nginx-prometheus-exporter🚀
- 进入解压后的目录,并运行nginx-prometheus-exporter服务器。在Linux下,你可以使用如下命令。如果一切正常,你应该能在终端看到nginx-prometheus-exporter的启动日志。
cd nginx-prometheus-exporter_1.2.0_linux_amd64
./nginx-prometheus-exporter --nginx.scrape-uri=http://127.0.0.1:8080/stub_status
三、nginx-prometheus-exporter指标和配置详解📖
- 黑色:作为默认文本颜色。
- 绿色:表示常规配置项
- 橙色:表示具有互斥参数的配置项 / 建议开启(根据自己的场景确定需求)
- 蓝色:不重要的配置项 / 建议不开启
- 红色:表示关键信息和警告 / 最好开启
注意:
- 1.相关参数配置建议仅供参考,具体要以自己生产的实际需要自行配置。
- 2.以下配置参数介绍是基于nginx-prometheus-exporter_1.2.0_linux_amd64版本说明的,其它版本会有不同。
3.1 nginx-prometheus-exporter.service
-
- -[no-]web.systemd-socket
是否使用 systemd 的 socket 激活功能来监听 web 请求。如果启用了该选项(即没有 no- 前缀),则 exporter 会尝试使用 systemd 提供的 socket。通常用于与 systemd 的服务单元集成,允许 systemd 管理监听 socket。加上 no- 前缀就是禁用此功能 -
- -web.listen-address=:9113
指定 exporter 监听的地址和端口。在这个例子中,它监听所有地址(由 : 表示)的 9113 端口。如果不使用 systemd socket 激活,这个参数将决定 exporter 如何接收来自 Prometheus 的抓取请求 -
- -web.config.file=“”
指定一个配置文件,其中可以包含更多的 web 服务设置。如果留空(如示例所示),则使用默认设置 -
- -web.telemetry-path=“/metrics”
设置 exporter 暴露指标数据的路径 -
- -[no-]nginx.plus
指定是否启用对 Nginx Plus(Nginx 的商业版本)的支持。如果启用,exporter 将尝试抓取 Nginx Plus 提供的额外指标。加上 no- 前缀会禁用对 Nginx Plus 的支持,只抓取开源版本 Nginx 的信息 -
- -nginx.scrape-uri=http://127.0.0.1:8080/stub_status
指定 exporter 从哪里抓取 Nginx 的状态信息。在这个例子中,设置为从本地机器的 8080 端口上的 /stub_status 路径抓取数据。通常是 Nginx 配置中启用的 stub_status 模块提供的状态信息。确保这个 URI 是可访问的,并且返回了有效的 Nginx 状态数据 -
- -[no-]nginx.ssl-verify
控制在与 Nginx 服务器通信时是否验证 SSL 证书。如果启用(即不加 no- 前缀),则会验证 Nginx 服务器的 SSL 证书。如果加上 no- 前缀(即 --no-nginx.ssl-verify),则不会验证 SSL 证书 -
- -nginx.ssl-ca-cert=“”
指定 CA(证书颁发机构)证书的路径,用于验证 Nginx 服务器的 SSL 证书。如果配置此参数,nginx-prometheus-exporter 将使用这个 CA 证书来验证 Nginx 服务器的 SSL 证书。留空则表示不使用特定的 CA 证书 -
- -nginx.ssl-client-cert=“”
指定客户端证书的路径,该证书用于与 Nginx 服务器进行双向 SSL 认证。在安全设置中,服务器可能要求客户端提供有效的客户端证书才能建立连接。如果留空,则不会使用客户端证书 -
- -nginx.ssl-client-key=“”
指定与客户端证书匹配的私钥的路径。这个私钥用于签名发送给 Nginx 服务器的数据,以证明客户端的身份。如果留空,则不会使用客户端私钥 -
- -nginx.timeout=5s
设置与 Nginx 服务器通信的超时时间。在这个例子中,超时时间被设置为 5 秒 -
- -prometheus.const-label=PROMETHEUS.CONST-LABEL
允许为所有由 nginx-prometheus-exporter 导出的指标添加一个或多个常量标签
四、实战演练:生产环境搭建指南🔨
4.1 创建普通用户管理nginx-prometheus-exporter👤
useradd deploy
4.2 解压nginx-prometheus-exporter.tar.gz📦
注意:
我的是x86,所以使用snmp_exporter-0.25.0.linux-amd64.tar.gz,您可以使用uname -a命令查看系统架构
mkdir /home/deploy/nginx-prometheus-exporter
tar xvf nginx-prometheus-exporter_1.2.0_linux_amd64.tar.gz -C /home/deploy/nginx-prometheus-exporter/
4.3 将nginx-prometheus-exporter集成到Prometheus配置中✂️
将nginx-prometheus-exporter集成到Prometheus配置中,确保数据能够正常采集。编辑Prometheus的配置文件(通常是prometheus.yml),在scrape_configs部分添加nginx-prometheus-exporter的配置。告诉Prometheus将采集nginx-prometheus-exporter:9113的数据。
- job_name: 'nginx-prometheus-exporter'
static_configs:
- targets:
- targets: ["localhost:9113"]
labels:
exporter: nginx-prometheus-exporter
4.4 编辑nginx-prometheus-exporter.service文件📝
-
注意:
此处我的–nginx.scrape-uri=http://127.0.0.1:80/nginx_status之所以这样配置是因为nginx.conf的stub_status模块我定义的访问路径是nginx_status,需要自行根据自己的配置进行更改
cat > /etc/systemd/system/nginx-prometheus-exporter.service <<EOF
[Unit]
Description=nginx-prometheus-exporter
After=network.target
[Service]
Type=simple
User=deploy
Group=deploy
ExecStart=/home/deploy/nginx-prometheus-exporter/nginx-prometheus-exporter \
--nginx.scrape-uri=http://127.0.0.1:8080/nginx_status \
--nginx.timeout=15s \
--web.listen-address=:9113
ExecReload=/bin/kill -HUP
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
4.5 启动nginx-prometheus-exporter.service🔌
sudo systemctl daemon-reload
sudo systemctl enable --now nginx-prometheus-exporter.service
4.6 查看服务是否正常启动🔍
# 查看service服务是否启动
sudo systemctl status nginx-prometheus-exporter.service
# 查看端口是否存在
sudo ss -ntulp | grep 9113