首页 > 系统相关 >Docker 环境下 Nginx 监控实战:使用 Prometheus 实现 Nginx 性能监控的完整部署指南

Docker 环境下 Nginx 监控实战:使用 Prometheus 实现 Nginx 性能监控的完整部署指南

时间:2024-10-10 19:18:52浏览次数:9  
标签:status exporter nginx Nginx Prometheus 监控 Docker

Docker 环境下 Nginx 监控实战:使用 Prometheus 实现 Nginx 性能监控的完整部署指南

文章目录


本文详细介绍了如何在 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:latest
    container_name: ng_exporter
    hostname: ng_exporter_108
    restart: always
    network_mode: "host" # docker时使用 host 网络模式,否则403
    environment:
      - SCRAPE_URI=http://192.168.0.6/stub_status
    ports:
      - "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 会连接到这个地址和端口,按照设定的抓取周期拉取指标数据。

标签:status,exporter,nginx,Nginx,Prometheus,监控,Docker
From: https://blog.csdn.net/u014394049/article/details/142753364

相关文章

  • 使用Performance_schema监控SQL
    背景:在AWSAurora上如果设置slow_query_time=0,抓取全量日志分析,会导致日志文件过大,限制CPU性能发挥。因此使用Performance_schema分析sql。可根据需要的指标,在SQL语句上添加响应字段。#!/bin/bashsource/etc/profileshopt-sexpand_aliases##databasesdbs=`cat/data/......
  • Docker安装Nginx
    1.下载镜像文件dockerpullnginx2.创建挂载目录mkdir-p/docker/nginx/{conf,conf.d,html,logs}3.创建nginx.conf配置文件路径为:/docker/nginx/conf/nginx.confusernginx;worker_processes1;error_log/var/log/nginx/error.logwarn;pid/var/run/ngin......
  • AWS Linux2 安装 nginx
    如果您使用的是AWSLinux2,则必须从AWS“ExtrasRepository”安装 nginx。要查看可用包的列表:#Viewlistofpackagestoinstallamazon-linux-extraslist您会看到类似于以下内容的列表:0ansible2disabled[=2.4.2]1emacsdisabled[=25.3]2memcached1......
  • 硬货!Zabbix监控AIX系统服务案例
    本文将介绍如何使用Zabbix自定义键值脚本方式监控AIX系统IBMCICS中间件进程服务以及日志文件等信息。CustomerInformationControlSystem(CICS)TransactionServer是IBM针对z/OS的多用途事务处理软件。这是一个功能强大的应用程序服务器,用于大型和小型企业中的事务处......
  • 提升网站响应速度与可靠性:Nginx负载均衡最佳实践 转载
    负载均衡配置作为代理服务器,一般都需要向上游服务器的集群转发请求。这里的负载均衡是指选择一种策略,尽量把请求平均地分布到每一台上游服务器上。1.1upstream块语法:upstreamname{...}配置块:httpupstream块定义了一个上游服务器的集群,便于反向代理中的proxy_pa......
  • prometheus学习笔记之进程监控process_exporter
    项目地址:https://github.com/ncabatoff/process-exporter一、安装process-exporterhttps://github.com/ncabatoff/process-exporter/releases/download/v0.8.3/process-exporter-0.8.3.linux-amd64.tar.gztarxfprocess-exporter-0.8.3.linux-amd64.tar.gzmvprocess-expo......
  • Unbuntu nginx 安装
    1.下载源码下载页面:https://nginx.org/en/download.html下载地址:https://nginx.org/download/nginx-1.27.2.tar.gzcurl-Ohttps://nginx.org/download/nginx-1.27.2.tar.gz2.依赖配置sudoaptinstallgccmakelibpcre3-devzlib1g-devopenssllibssl-dev3.编译解压......
  • 线程池监控2-监控线程池状态、线程数量和队列任务数量等
    1.实现原理这篇博文是基于线程池监控1-监控任务执行时间,原理是:创建一个固定时间间隔执行的线程,来记录线程池的池状态、线程数量和队列任务数量等,具体方案:使用单例类缓存所有创建的线程池对象,类创建时启动定时任务线程,定期遍历缓存中线程池,记录线程池信息。2.实现代码packa......
  • 掌握Linux性能监控神器:atop实用指南
    在Linux系统管理中,性能监控是确保系统运行平稳的重要环节。atop是一款强大的性能监控工具,可以提供详细的系统性能数据,包括CPU、内存、磁盘和网络的使用情况。本文将介绍如何安装、配置和使用atop来监控Linux系统的性能。安装atop在绝大多数Linux发行版本中,atop工具能够便......
  • Django使用uwsgi和nginx进行手动部署
    在Django项目中使用uWSGI和Nginx进行部署是一种常见的生产环境配置。以下是一个详细的步骤指南,帮助你完成这个过程。前提条件有一个已经开发好的Django项目。服务器已安装Python、pip、Nginx和uWSGI。有一个有效的域名(可选,但推荐)。步骤一:准备Django项目收集静态文件:在项......