Docker 环境下 Nginx 监控实战:使用 Prometheus 实现 Nginx 性能监控的完整部署指南
Docker 环境下 Nginx 监控实战:使用 Prometheus 实现 Nginx 性能监控的完整部署指南
文章目录
- Docker 环境下 Nginx 监控实战:使用 Prometheus 实现 Nginx 性能监控的完整部署指南
- 一 查看模块是否安装
- 二 配置 status 访问端点
- 三 Docker 部署 nginx-prometheus-exporter
- 1)使用 nohup 启动
- 2)Docker run 启动
- 3)docker compose 启动
- 四 验证部署成功
- 五 配置 prometheus
本文详细介绍了如何在 Docker 环境下,通过配置 Nginx 的
stub_status 模块,并结合 Prometheus 和 Nginx Prometheus Exporter,实现对 Nginx 服务的性能监控。文章首先讲解如何确认 Nginx 是否已启用
with-http_stub_status_module 模块,随后通过修改 Nginx 配置文件,设置监控访问端点。接着,文章提供了三种部署 Nginx Prometheus Exporter 的方式,包括使用 nohup、Docker run 和 Docker Compose。最后,通过 Prometheus 的配置示例,确保可以定期拉取 Nginx 性能指标数据,帮助开发者和运维人员实现高效的监控解决方案。
预备课:
Docker 安装与配置:从入门到部署
Docker 部署 Prometheus+Grafana 监控系统快速指南
Docker 环境下安装和配置 Nginx 实践
一 查看模块是否安装
确认 with-http_stub_status_module 模块已安装。运行命名查看参数:
$ nginx -V
获取启动参数:
configure arguments: --prefix=/etc/nginx ... --with-http_stub_status_module --with-http_sub_module
二 配置 status 访问端点
修改 nginx 的配置文件指定 status 页面的 URL 。
server {listen 80; # 监听80端口,可以自行修改端口号,注意在外层的nginx.conf中也需要对应修改配置location /stub_status {allow 192.168.0.6; # 允许IP地址192.168.0.6访问(当使用Docker部署时,这个IP应该是当前宿主机的IP)deny all; # 拒绝所有其他IP的访问stub_status on;# 打开Nginx的stub_status模块,用于监控Nginx的状态access_log off;# 关闭该location的访问日志,减少日志写入的开销}
}
三 Docker 部署 nginx-prometheus-exporter
1)使用 nohup 启动
# 使用 nohup 命令在后台启动 nginx-prometheus-exporter,并将标准输出和错误输出重定向,使得命令在退出终端时不会被终止。
nohup ./nginx-prometheus-exporter -nginx.scrape-uri http://127.0.0.1:80/nginx_status &
# ./nginx-prometheus-exporter 表示执行当前目录下的 nginx-prometheus-exporter 可执行文件。
# -nginx.scrape-uri http://127.0.0.1:80/nginx_status 指定了 Prometheus Exporter 抓取 Nginx 状态指标的 URL。
# & 将命令放在后台执行。
2)Docker run 启动
# 使用 Docker 运行 nginx-prometheus-exporter 容器,映射主机的 9113 端口到容器的 9113 端口。
docker run -p 9113:9113 nginx/nginx-prometheus-exporter:0.11.0 -nginx.scrape-uri=http://<nginx>:8080/stub_status
# docker run 是 Docker 的命令,用于运行一个新的容器。
# -p 9113:9113 映射主机的 9113 端口到容器的 9113 端口,以便外部可以访问容器提供的服务。
# nginx/nginx-prometheus-exporter:0.11.0 指定使用的容器镜像和版本号。
# -nginx.scrape-uri=http://<nginx>:8080/stub_status 指定容器内部的 Prometheus Exporter 抓取 Nginx 状态指标的 URL。此处 <nginx> 需替换为 Nginx 服务器的实际地址或主机名。
3)docker compose 启动
docker-compose.ng06.yml
version: '3'
services:ng_exporter:image: nginx/nginx-prometheus-exporter:latestcontainer_name: ng_exporterhostname: ng_exporter_108restart: alwaysnetwork_mode: "host" # docker时使用 host 网络模式,否则403environment:- SCRAPE_URI=http://192.168.0.6/stub_statusports:- "9113:9113"
注:nohup、docker run 和 docker compose 任意选择其一。
四 验证部署成功
当使用 host 网络模式时,系统会提示“ng_exporter Published ports are discarded when using host network mode”。在这种模式下,外部网络无法访问验证的 URL,但本机可以访问。主要问题在于 allow 192.168.0.6 的配置,因为在 host 模式下,正确配置 allow 选项的网络地址难以确定。
在使用 Docker 容器的 host 网络模式时,容器不是使用独立的虚拟网络,而是直接使用宿主机的网络。因此,容器内的应用(如 nginx)看到的 IP 地址是直接来自外部网络或宿主机网络,而不是像通常在桥接或覆盖网络模式下通过 Docker 网络抽象看到的。
在这种情况下,配置 nginx 的 allow 选项,即指定哪些 IP 地址可以访问特定的服务,变得复杂。因为宿主机可能有多个网络接口和动态变化的 IP 地址,所以预先确定和配置哪个或哪些 IP 地址应被允许访问服务可能不是一个明确或静态的决策。
访问地址 URL :http://192.168.0.6:9113/metrics
五 配置 prometheus
prometheus.yml 的配置,按照设定的抓取周期拉取指标数据。
global:scrape_interval: 15s # 定义了 Prometheus 抓取(拉取)指标的默认周期,这里设置为每15秒一次external_labels:monitor: 'your-ng-exporter'# 定义了一个外部标签,用于所有从 Prometheus 发送的指标。这里定义的标签名为 monitor,值为 'your-ng-exporter'。# 这有助于在 Prometheus 的监控环境中识别和区分不同的数据源或者监控代理。scrape_configs:# 定义抓取配置的数组,每个元素描述了一组特定的抓取规则和目标。- job_name: 'nginx_status_module'# 每个抓取任务的名称,这里定义了一个名为 'nginx_status_module' 的任务,通常用于区分 Prometheus 中不同的抓取任务。metrics_path: '/metrics'# 定义 Prometheus 抓取指标的 HTTP 路径,默认为 '/metrics'。这是暴露指标数据的端点,Prometheus 会访问这个路径收集数据。static_configs:# 静态配置,用于定义固定的目标,这些目标的网络位置不会改变。- targets: ['192.168.0.6:9113']# 列表定义了具体的抓取目标,这里的目标是 '192.168.0.6:9113'。# '192.168.0.6' 是 nginx-prometheus-exporter 服务的 IP 地址,'9113' 是服务监听的端口。# Prometheus 会连接到这个地址和端口,按照设定的抓取周期拉取指标数据。相关文章:
Docker 环境下 Nginx 监控实战:使用 Prometheus 实现 Nginx 性能监控的完整部署指南
Docker 环境下 Nginx 监控实战:使用 Prometheus 实现 Nginx 性能监控的完整部署指南 文章目录 Docker 环境下 Nginx 监控实战:使用 Prometheus 实现 Nginx 性能监控的完整部署指南一 查看模块是否安装二 配置 status 访问端点三 Docker 部署 nginx-prome…...
网络安全-IPv4和IPv6的区别
1. 2409:8c20:6:1135:0:ff:b027:210d。 这是一个IPv6地址。IPv6(互联网协议版本6)是用于标识网络中的设备的一种协议,它可以提供比IPv4更大的地址空间。这个地址由八组十六进制数字组成,每组之间用冒号分隔。IPv6地址通常用于替代…...
【移动端】事件基础
一、移动端事件分类 移动端事件主要分为以下几类: 1. 触摸事件(Touch Events) 触摸事件是移动设备特有的事件,用来处理用户通过触摸屏幕进行的操作。主要的触摸事件有: touchstart:手指触摸屏幕时触发。…...
软件测试比赛-学习
一、环境配置 二、浏览器适配 //1.设置浏览器的位置,google浏览器位置是默认且固定在电脑里的//2.设置浏览器驱动的位置,C:\Users\27743\AppData\Local\Google\Chrome\ApplicationSystem.setProperty("webdriver.chrome.driver", "C:\\Users\\27743\\AppData\\…...
力扣LeetCode-链表中的循环与递归使用
标题做题的时候发现循环与递归的使用差别: 看两道题: 两道题都是不知道链表有多长,所以需要用到循环,用到循环就可以把整个过程分成多个循环体,就是每一次循环要执行的内容。 反转链表: 把null–>1…...
AFSim仿真系统 --- 系统简解_08 传感器与特征
传感器与特征 传感器是平台的一部分,为拥有该平台提供了探测其他平台及其组成部分的能力。 特征是平台的一种属性,用于确定特定传感器是否能够探测到特征所拥有的平台。 以下是用于探测平台的一些特征属性列表: 声学红外光学雷达 AFSIM …...
已经安装了qt,想添加mingw组件,包含gcc等
1、已经安装了qt,想添加mingw组件, 步骤1 双击打开MaintenanceTool.exe, 步骤2: 选择清华大学开源软件镜像网站,选择相应QT版本添加网址https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepository/windows_x8…...
数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎(一)(20241009)
数据库管理250期 2024-10-09 数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎(一)(20241009)1 简介2 引擎构成3 引擎架构4 文件分布5 分布式MVCC6 限制/要求总结 数据库管理-第250期 深入浅出多主多活数据库技术…...
信号用wire类型还是reg类型定义
wire类型就是一根线,线有两端,一端发生改变,经过线传递的信号当然也会发生改变,reg类型则不同,可以把reg类型理解为存储数据的寄存器,当满足一定条件时,数值才被激活发生改变。 那么࿰…...
与鸿蒙同行,Java Solon v3.0 正式发布(向下兼容)
与 HarmonyOS NEXT 10月8日公测同行。Solon (开放原子开源基金会,孵化项目) v3.0 正式发布, 且将在 2025 年启动华为编程语言 “仓颉” 版开发(届时会有 Solon-Java 和 Solon-CJ 两大版本)。本次大版本更新…...
数据驱动投资:AI在股票市场的应用
当ChatGPT首次亮相时,其卓越的语言处理能力立刻引起了许多行业的广泛关注,投资界也不例外。关于ChatGPT是否能应用于投资决策的问题,迅速成为热门讨论的焦点。 近期,加拿大多伦多大学和印度孟买理工学院的研究人员联合开展了一项…...
Tita使用小技巧:项目类型自定义,业务管理个性化
应用场景 某互联网企业,企业内部有研发部,有销售部 研发部通常需要管理各种技术研发类型项目,因此需要管理「研发型」项目,该类型项目需要明确「所属产品」、「级别管理:国家级/省市级」、「项目类别:创新…...
国药准字:您购药的可靠指南
益安宁丸为同溢堂药业有限公司所独家生产的一款中成药,在内地市场和港澳地区均有上市。 益安宁丸真品的唯一标准:无论港版还是内地版,包装盒必然有国药准字Z20063087标识,但凡没有国药准字标识的必为假药。...
Python类学习(2)——未完待续
函数和类的参数传递 实例方法 class House:# 类构造方法,也是实例方法def __init__(self, area, price):self.area areaself.price pricedef cls_func(self, arg):print(arg)my_house House(America, 330) # 实例化类对象,需要传入init中的两个参数 print(f…...
微前端框架 qiankun 全面解析到源码实现
微前端(Micro Frontends)是一种将大型前端应用拆分为多个独立模块的架构设计思想,旨在解决复杂应用开发与维护的难题。qiankun 是目前流行的微前端解决方案之一,基于 single-spa 进行封装,提供了一种简单且完整的微前端…...
初始化数据的正确方式?
关于这篇文章 https://proandroiddev.com/loading-initial-data-in-launchedeffect-vs-viewmodel-f1747c20ce62 pl的视频解读 当在viewmodel中需要进行数据的初始化的时候 viewmodel.initData() 放在哪里合适呢,大部分情况下可以放在 viewmodel的init{}模块&…...
Flutter平台嵌入器
When you build a Flutter app, it’s not just about the code you write in Dart and the Flutter framework. There’s also a crucial piece called the platform embedders that enable your Flutter app to run on different operating systems like Android, iOS, and s…...
微信小程序——婚礼邀请函
一、界面设计 首页: 精美的婚礼主题背景图,可能是新人的婚纱照或浪漫的插画。温馨的欢迎语,如 “欢迎参加我们的婚礼”。一个 “打开邀请函” 的按钮,引导用户进入邀请函详情页面。 邀请函详情页面: 顶部展示新人的照片…...
WebRTC Connection Negotiate解决
最近有个项目 ,部署之后一直显示,查了一些资料还是没有解决,无奈只有自己研究解决?经过排查,应该是内网穿透的问题 什么是内网穿透? 我们访问我们自己的官网产品页面,我们的服务器是一个单独…...
Redis面试篇1
1、为什么要用缓存? 使用缓存的目的就是提升读写性能。在实际的业务场景下,更多的是为了提升读性能,带来更好的性能和并发量。Redis的读写性能比MySQL好的多,我们就可以把MySQL中的热点数据缓存到Redis,提升读取性能&…...
NSSCTF做题记录十 | [巅峰极客 2022 决赛]开端:strangeTempreture
[巅峰极客 2022 决赛]开端:strangeTempreture随便点击一个流量包,右击点击追踪流,TCP 流把这几个字母拼接到一起,下面还有很多ZmxhZ3s5N2JmZWIwMy1mYTVjLWFhNmYtYWQxZS05YzVkMzhjNzQ0OWV9base64 解码,得到 flagflag{97…...
ChatGPT_JCM前端构建工具对比:Webpack、Vite与Rollup
ChatGPT_JCM前端构建工具对比:Webpack、Vite与Rollup 【免费下载链接】ChatGPT_JCM 项目地址: https://gitcode.com/gh_mirrors/ch/ChatGPT_JCM ChatGPT_JCM是一个基于AI技术的前端项目,在开发过程中选择合适的构建工具对于提升开发效率和优化项…...
如何在5分钟内快速上手Wade搜索库:终极快速入门指南
如何在5分钟内快速上手Wade搜索库:终极快速入门指南 【免费下载链接】wade :ocean: Blazing fast 1kb search library 项目地址: https://gitcode.com/gh_mirrors/wa/wade Wade是一个轻量级、高性能的JavaScript搜索库,仅1kb大小却提供了强大的全…...
Go语言中的字符串处理
Go语言中的字符串处理 1. 字符串的基本概念 在Go语言中,字符串是一种不可变的字节序列,使用UTF-8编码。字符串的类型为string,是Go语言的基本类型之一。 package mainimport "fmt"func main() {// 字符串字面量s1 : "Hello, W…...
seo推广如何策划
SEO推广如何策划:全面指南 在当今数字化时代,搜索引擎优化(SEO)推广已成为企业提升网站流量、增加品牌曝光的关键手段。如何有效地策划一套适合自己业务的SEO推广方案却不是件容易的事。本文将从SEO推广的基础概念、问题分析、原…...
别再只用L2损失了!手把手教你用PyTorch实现MS-SSIM+L1混合损失,图像修复效果大提升
超越L1/L2:用MS-SSIM混合损失打造专业级图像修复模型 当你在深夜调试一个图像超分辨率模型时,屏幕上的结果让你皱起了眉头——那些应该清晰锐利的边缘却像被水浸湿的水彩画一样模糊不清,而平坦的天空区域则布满了令人不快的颗粒状伪影。这可能…...
深度解析 Claude Code v2.1.88 源码:技术栈与底层实现全揭秘(基于流出架构资料)
深度解析 Claude Code v2.1.88 源码:技术栈与底层实现全揭秘(基于流出架构资料) 摘要:2026年3月31日,Claude Code v2.1.88 相关技术资料(含TypeScript工程架构、核心模块实现逻辑,合计51.2万行代码量级)公开流出,包含其核心架构、工具系统、安全机制等全部实现细节。…...
告别烧脑报文!用ESP8266+51单片机零基础玩转OneNet MQTT(附报文生成工具)
从零到一:ESP8266与51单片机轻松对接OneNet MQTT全指南 当你第一次听说MQTT协议时,是否被那些晦涩的十六进制报文吓退?作为物联网领域最流行的轻量级通信协议,MQTT本应让设备间的对话变得简单,但传统教程中复杂的报文…...
DeepSeek-Coder-V2本地化部署指南:构建企业级代码智能助手
DeepSeek-Coder-V2本地化部署指南:构建企业级代码智能助手 【免费下载链接】DeepSeek-Coder-V2 DeepSeek-Coder-V2: Breaking the Barrier of Closed-Source Models in Code Intelligence 项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Coder-V2 …...
SeamlessM4T v2:构建跨语言沟通的无缝桥梁
SeamlessM4T v2:构建跨语言沟通的无缝桥梁 【免费下载链接】seamless-m4t-v2-large 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/seamless-m4t-v2-large SeamlessM4T v2是Meta AI推出的新一代大规模多语言多模态机器翻译模型,能够在…...
