用Prometheus细化Nginx监控

本文介绍如何使用Nginx-module-vts、nginx-vts-exporter与Prometheus进行Nginx监控,涵盖模块编译、配置、数据类型及Prometheus汇总表达式,助您实现高效Nginx监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

国内用Nginx的比较多,Nginx的监控比较老的方案可能是通过跑脚本定期收集nginx的status模块的数据,或者监控nginx的日志;后来阿里的tengine在国内开始流行,于是诞生了很多不错的lua模块;但是这些监控方案在有新的监控需求的时候,可能就需要再修改脚本或者更改nginx conf配置,有时候不是特别的方便。用Prometheus进行nginx的监控可以自动的对相关server_name和upstream进行监控,你也可以自定义Prometheus的数据标签,实现对不同机房和不同项目的nginx进行监控。
监控Nginx主要用到以下三个模块:
nginx-module-vts:Nginx virtual host traffic status module,Nginx的监控模块,能够提供JSON格式的数据产出。
nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。主要用于收集Nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。
Prometheus:监控Nginx-vts-exporter提供的Nginx数据,并存储在时序数据库中,可以使用PromQL对时序数据进行查询和聚合。

一、nginx-module-vts模块的编译
nginx_vts_exporter依赖nginx-module-vts模块,安装此模块无需任何其他依赖。模块与Nginx的版本兼容性如下:

1.11.x (last tested: 1.11.10)
1.10.x (last tested: 1.10.3)
1.8.x (last tested: 1.8.0)
1.6.x (last tested: 1.6.3)
1.4.x (last tested: 1.4.7)
同时适用于tengine,其他nginx早期版本未做验证。
安装步骤:

  1. 下载模块
    shell> git clone git://github.com/vozlt/nginx-module-vts.git
  2. 编译配置
    在nginx编译时添加vts模块
    --add-module=/path/to/nginx-module-vts
    下载官方的软件包并编译进vts模块,例如:

    ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_sysguard_module  --add-module=nginx-module-vts
  3. 安装:
    make && make install
    二、Nginx Conf配置
    更改Nginx Conf的配置,添加监控接口/status/:

    http {
    vhost_traffic_status_zone;
        vhost_traffic_status_filter_by_host on;
    
    ...
    
    server {
    
        ...
    
        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
    }

配置建议:

  1. 打开vhost过滤:
    vhost_traffic_status_filter_by_host on;
    开启此功能,在Nginx配置有多个server_name的情况下,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个server_name上。
  2. 在不想统计流量的server区域禁用vhost_traffic_status,配置示例:
    server {
    ...
    vhost_traffic_status off;
    ...
    }

    假如nginx没有规范配置server_name或者无需进行监控的server上,那么建议在此vhost上禁用统计监控功能。否则会出现“127.0.0.1”,hostname等的域名监控信息。
    三、监控数据的查看
    安装完vts模块后,可以通过nginx status接口进行监控数据的查看,比如:http://127.0.0.1/status

用Prometheus细化Nginx监控

在页面的最下方可以指定监控页面刷新的时间间隔,点击JSON,可以转为JSON格式输出。

用Prometheus细化Nginx监控
三、nginx-vts-exporter的使用
exporter会收集nginx性能指标的JSON格式数据,并汇总后暴露监控接口给Prometheus。

它的安装使用很简单,开箱即用:

  1. 下载当前最新版本的软件包:
    # wget -c https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.9.1/nginx-vts-exporter-0.9.1.linux-amd64.tar.gz
  2. 解压后运行:
    # nginx-vts-exporter-0.9.1.linux-amd64/nginx-vts-exporter -nginx.scrape_timeout 10 -nginx.scrape_uri http://127.0.0.1/status/format/json
    推荐exporter和nginx安装在同一台机器上,如果不在同一台主机,把scrape_uri改为nginx主机的地址。
    nginx_vts_exporter的默认端口号:9913,对外暴露监控接口http://xxx:9913/metrics.

四、Nginx的监控数据类型

nginx-vts-exporter的数据类型命名空间默认以“nginx”开头,主要有如下9个:

HELP是对监控条目的解释,TYPE的格式是:监控条目名称+Prometheus数据类型:

# HELP nginx_server_bytes request/response bytes
# TYPE nginx_server_bytes counter
# HELP nginx_server_cache cache counter
# TYPE nginx_server_cache counter
# HELP nginx_server_connections nginx connections
# TYPE nginx_server_connections gauge
# HELP nginx_server_requestMsec average of request processing times in milliseconds
# TYPE nginx_server_requestMsec gauge
# HELP nginx_server_requests requests counter,可以区分状态码
# TYPE nginx_server_requests counter
# HELP nginx_upstream_bytes request/response bytes
# TYPE nginx_upstream_bytes counter
# HELP nginx_upstream_requestMsec average of request processing times in milliseconds
# TYPE nginx_upstream_requestMsec gauge
# HELP nginx_upstream_requests requests counter,可以区分状态码
# TYPE nginx_upstream_requests counter
# HELP nginx_upstream_responseMsec average of only upstream/backend response processing times in milliseconds
# TYPE nginx_upstream_responseMsec gauge

五、Nginx监控在Prometheus的数据汇总
常用监控汇总表达式:
DomainName对应nginx conf里的server_name,这里可以根据不同的server_name和upstream分别进行qps、2xx/3xx/4xx/5xx的状态码监控,另外也可以监控nginx每台后端server的qps和后端接口响应时间。

如果不需要区分server_name,可以把表达式里的$DomainName改为星号,“*****”代表所有;

  1. 求Nginx的QPS:
    sum(irate(nginx_server_requests{code="total",host=~"$DomainName"}[5m]))
  2. 求4xx万分率(5xx类似,code=“5xx”):
    (sum(irate(nginx_server_requests{code="4xx",host=~"$DomainName"}[5m])) / sum(irate(nginx_server_requests{code="total",host=~"$DomainName"}[5m]))) * 10000
  3. 求upstream的QPS(示例求group1的qps):
    sum(irate(nginx_upstream_requests{code="total",upstream="group1"}[5m]))
  4. 求upstream后端server的响应时间(示例求group1的后端响应时间):
    nginx_upstream_responseMsec{upstream=“group1”}

六、Nginx监控的展示
Dashboard的展示当然是使用grafana,自己根据表达式画图即可,监控图类似:
用Prometheus细化Nginx监控

<think>好的,我现在需要回答用户关于如何使用Python开发智慧校园系统的方案和实现方法。首先,我得先理解用户的需求。他们可能想要一个整体的架构设计,包括技术选型、模块划分、具体实现步骤以及可能遇到的挑战和解决方案。 根据用户提供的三个引用,系统涉及到考试系统、外卖点餐和数据共享平台。这些都属于智慧校园的不同模块,所以可能需要整合多个子系统。我需要确保覆盖到这些方面,并参考现有的引用内容来支持回答。 首先,系统架构方面,分层设计是常见的做法,比如分成基础设施层、数据层、服务层和应用层。Python的后端框架Django和Flask都是不错的选择,考虑到引用中提到了Django的使用,可能优先推荐Django,因为它自带ORM、Admin界面等,适合快速开发。前端方面,Vue.js或React比较流行,可以结合RESTful API进行前后端分离。 数据设计方面,需要确定核心数据模型。比如用户管理,可能需要学生、教师、管理员等角色,引用2提到用户注册和权限控制,这里需要设计RBAC模型。数据库选型可以用MySQL或PostgreSQL,或者NoSQL如MongoDB,但考虑到结构化数据,可能关系型数据库更合适。Django的ORM可以方便地进行数据库迁移和管理。 模块实现方面,根据引用中的例子,需要包括用户认证、考试系统、外卖点餐、数据共享等模块。每个模块的具体功能需要细化,比如考试系统可能包括在线考试、自动阅卷、成绩分析,而外卖系统涉及商家管理、订单处理等。代码示例可能需要展示Django的模型和视图,比如用户模型和订单处理逻辑。 集成与优化部分,引用2提到了支付接口、异常处理等,需要集成第三方服务如支付宝或微信支付,同时使用缓存技术如Redis提升性能。安全方面,HTTPS、数据加密、防止SQL注入和XSS攻击都是必须的。 部署方案可以选择云服务,比如阿里云或腾讯云,使用Nginx和Gunicorn部署Django应用,数据库和缓存服务也可以使用云服务提供的托管服务,这样更稳定。 挑战方面,高并发可能在选课或抢购时出现,需要负载均衡和异步任务处理。数据安全需要遵守相关法律法规,如GDPR。用户体验方面,前端性能优化和响应式设计也很重要。 最后,相关问题的生成需要围绕开发过程中的关键点,比如技术选型、安全措施、性能优化和第三方服务集成。这些问题能帮助用户进一步深入理解开发中的各个细节。 需要确保回答结构清晰,分点说明,并引用提供的参考文献来支持各个部分,比如提到外卖系统时引用[^2],数据共享平台引用[^3]。同时,注意使用正确的中文表达和LaTeX格式,但用户的问题中没有涉及数学公式,所以可能不需要用到太多LaTeX,但如果有技术名词或代码,需要正确格式化。</think>### 基于Python的智慧校园系统开发方案与实现方法 #### 一、系统架构设计 1. **分层架构模型** 智慧校园系统通常采用**基础设施层+数据层+服务层+应用层**结构: - **基础设施层**:云服务器(如阿里云ECS)、容器化部署(Docker+K8s)、CDN加速 - **数据层**:MySQL/PostgreSQL(结构化数据) + Redis(缓存) + MongoDB(非结构化日志) - **服务层**:Django REST Framework构建API网关,提供统一身份认证、数据交换接口 - **应用层**:Web端(Vue/React)、移动端(Uni-app/Flutter)、小程序多端适配 2. **技术选型建议** ```markdown - 后端框架:Django(全功能)或FastAPI(高性能接口) - 前端框架:Vue3 + Element Plus(管理后台)、Uni-app(跨端应用) - 消息队列:Celery + RabbitMQ(异步任务处理) - 大数据分析:Pandas + Scikit-learn(成绩预测模型)[^1] ``` --- #### 二、核心模块实现 1. **统一身份认证系统** ```python # Django模型示例(models.py) class User(AbstractUser): ROLE_CHOICES = [ ('student', '学生'), ('teacher', '教师'), ('admin', '管理员') ] role = models.CharField(max_length=10, choices=ROLE_CHOICES) campus_id = models.CharField(max_length=20, unique=True) # 学号/工号 wechat_openid = models.CharField(max_length=64, null=True) # 微信绑定 ``` 2. **智能考试子系统** - 实现功能: - 在线组卷(遗传算法智能选题) - 人脸识别监考(OpenCV集成) - 自动阅卷(正则表达式匹配填空题) 3. **校园服务整合** ```python # 外卖订单状态机(参考引用[2]) class Order(models.Model): STATUS = [ ('unpaid', '待支付'), ('preparing', '备餐中'), ('delivering', '配送中'), ('completed', '已完成') ] status = models.CharField(max_length=20, choices=STATUS, default='unpaid') # 使用状态模式实现流程控制 def change_status(self, new_status): # 状态转换校验逻辑 pass ``` --- #### 三、关键技术实现 1. **数据共享平台建设** - 采用GraphQL实现灵活数据查询 - 数据脱敏处理(使用`python-decouple`管理敏感字段) - 建立标准API规范(参考RESTful最佳实践) 2. **性能优化方案** ```python # 使用缓存装饰器(Redis) from django.core.cache import cache @cache_page(60 * 15) # 缓存15分钟 def get_course_schedule(request): # 课程表查询逻辑 pass ``` --- #### 四、部署与运维 | 环境 | 工具链 | 监控指标 | |------------|--------------------------|--------------------------| | 开发环境 | PyCharm + Postman | 代码覆盖率 | | 测试环境 | Jenkins + Selenium | 接口响应时间 | | 生产环境 | Nginx + Gunicorn | 服务器负载 | | 运维监控 | Prometheus + Grafana | 数据库连接池使用率 | --- #### 五、典型应用场景 1. **教学管理**:课堂签到(GPS+蓝牙信标定位) 2. **生活服务**:宿舍报修(图片识别故障分类) 3. **校园安全**:异常行为监测(OpenPose姿态分析) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值