Nginx--监控

news2024/11/22 20:36:51

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

一、Nginx的基础监控

  • 进程监控
  • 端口监控

注意: 这两个是必须要加在zabbix监控加触发器有问题及时告警

nginx 提供了ngx_http_stub_status_modulengx_http_reqstat_module模块,这个模块提供了基本的监控功能

二、监控的主要指标

1、基本活跃指标

Accepts(接受)、Handled(已处理)、Requests(请求数)是一直在增加的计数器。Active(活跃)、Waiting(等待)、Reading(读)、Writing(写)随着请求量而增减

名称描述指标类型
Accepts(接受)NGINX 所接受的客户端连接数资源: 功能
Handled(已处理)成功的客户端连接数资源: 功能
Dropped(已丢弃,计算得出)丢弃的连接数(接受 - 已处理)工作:错误*
Requests(请求数)客户端请求数工作:吞吐量

2、每秒请求数 -- QPS

通过持续的 QPS 监控,可以立刻发现是否被恶意攻击或对服务的可用性进行评估。虽然当问题发生时,通过 QPS 不能定位到确切问题的位置,但是他却可以在第一时间提醒你环境可能出问题了

3、服务器错误率

通过监控固定时间间隔内的错误代码(4XX代码表示客户端错误,5XX代码表示服务器端错误),可以了解到客户端收到的结果是否是正确的错误率突然的飙升很可能是你的网站漏洞发出的信号;如果你希望通过 access log 分析错误率,那么你需要配置 nginx 的日志模块,让 nginx 将响应码写入访问日志

4、请求处理时间

请求处理时间也可以被记录在 access log 中,通过分析 access log,统计请求的平均响应时间,通过持续观察,可以发现上游服务器的问题

三、指标的收集

通过在编译时加入 nginx 的 ngx_http_stub_status_module 模块我们可以实时监控以下基本的指标:

1、nginx Stub Status监控模块安装

(1)先使用命令查看是否已经安装这个模块:

 [root@localhost ~]# nginx -V
 nginx version: nginx/1.26.0
 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
 built with OpenSSL 1.0.2k-fips  26 Jan 2017
 TLS SNI support enabled
 configure arguments: --prefix=/usr/local/nginx --group=nginx --user=nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx/client_body --http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module --with-stream

如果没有此模块,需要重新安装,编译命令如下:

 ./configure –with-http_stub_status_module

具体的使用方法是在执行 ./configure 时,指定 --with-http_stub_status_module,然后通过配置:

 server {
   listen 80;
   server_name localhost;
   location /nginx-status {
     stub_status on;
     access_log on;
   }
 }

2、nginx状态查看

配置完成后在浏览器输入:主机ip/nginx-status查看(或用curl localhost/nginx-status);显示信息如下:

 Active connections: 1 
 server accepts handled requests
  7 7 8 
 Reading: 0 Writing: 1 Waiting: 0 

3、Stub Status参数说明

正常情况下waiting数量是比较多的,并不能说明性能差。反而如果reading+writing数量比较多说明服务并发有问题

名称描述是否累加历史数据
Accepts(接受)Nginx接收的客户端连接数(包括Handled+Dropped+Waiting)
Handled(已处理)成功处理的客户端连接数(包含Waiting状态连接)
Active(活跃)当前活跃的客户端连接数
Dropped(已丢弃)已丢弃连接数(出错)
Requests(请求数)客户端请求数
Waiting(等待)正在等待的连接数
Reading(读)正在执行读操作的连接数
writing(写)正在执行写操作的连接数

4、Request模块监控--已经不支持了

4.1、Request模块描述:

  • ngx_http_reqstat_module 模块
  • 这个模块计算定义的变量,根据变量值分别统计 nginx 的运行状况
  • 可以监视的运行状况有:连接数、请求数、各种响应码范围的请求数、输入输出流量、rt、upstream访问
  • 可以指定获取所有监控结果或者一部分监控结果。
  • 利用变量添加自定义监控状态。总的监控状态最大个数为50个。
  • 回收过期的监控数据。
  • 设置输出格式
  • 跟踪请求,不受内部跳转的影响
  • 不要使用与响应相关的变量作为条件,比如"$status"

4.2、实验实现

(1)下载ngx_req_status_module 模块, 这是第三方模块需要添加

 wget https://github.com/zls0424/ngx_req_status/archive/master.zip -O ngx_req_status.zip
 unzip ngx_req_status.zip

(2) 复制模块到 Nginx 目录

 cp -r ngx_req_status-master/ /usr/local/

(3) 配置 Nginx 并添加模块

 cd /usr/local/nginx-1.16.0/
 ./configure --prefix=/usr/local/nginx 添加上原来的参数 --add-module=/usr/local/ngx_req_status-master

(4) 安装补丁工具并应用补丁

 yum -y install patch
 patch -p1 < ../ngx_req_status-master/write_filter-1.7.11.patch

(5) 编译并安装 Nginx

make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak
cp objs/nginx /usr/local/nginx/sbin/

(6)重启Nginx

systemctl restart nginx
# 编译安装的可以杀死进程,在重新启动
ps aux | grep nginx
kill -9 进程id
/usr/local/nginx/sbin/nginx

(7) 配置 Nginx 使用 ngx_req_status

[root@localhost nginx-1.16.0]# vim /etc/nginx/nginx.conf
...
req_status_zone server_name $server_name 256k;
req_status_zone server_addr $server_addr 256k;
req_status_zone server_url $server_name$uri 256k;
req_status server_name server_addr server_url;
server {
	server_name localhost;
	location /req-status {
	req_status_show on;
	}
}

指令介绍

req_status_zone
语法: req_status_zone name string size
默认值: None
配置块: http
定义请求状态ZONE,请求按照string分组来排列,例如: req_status_zone server_url $server_name$uri 256k;
域名+uri将会形成一条数据,可以看到所有url的带宽,流量,访问数

req_status
语法: req_status zone1[ zone2]
默认值: None
配置块: http, server, location
在location中启用请求状态,你可以指定更多zones。

req_status_show
语法: req_status_show on
默认值: None
配置块: location
在当前位置启用请求状态处理程序

(8) 重启 Nginx 并应用配置

[root@localhost nginx-1.16.0]# nginx -t | nginx -s reload

(9)浏览器访问测试

4.3、请求状态分析

状态说明
zone_name利用req_status_zone定义的分组标准;例如,按照服务器名称对请求进行分组后
key请求按分组标准分组后的分组标识(即组名)。例如按服务器名称分组时,组名可能是localhost
max_active该组的最大并发连接数
max_bw该组的最大带宽
traffic该组的总流量
requests该组的总请求数
active该组当前的并发连接数
bandwidth该组当前带宽

四、补充(扩展)

1、查看Web服务器TCP连接状态

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

其结果各字段说明如下:

字段说明
LISTEN侦听来自远方的TCPport的连接请求
SYN-SENT再发送连接请求后等待匹配的连接请求
SYN-RECEIVED再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED代表一个打开的连接
FIN-WAIT-1等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2从远程TCP等待连接中断请求
CLOSE-WAIT等待从本地用户发来的连接中断请求
CLOSING等待远程TCP对连接中断的确认
LAST-ACK等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED没有不论什么连接状态

2、nginx access log分析

nginx 的 access log 中可以记录很多有价值的信息,通过分析 access log,可以收集到很多指标

1、制作nginx的日志切割,每天凌晨切割并压缩

  • PV:PV(访问量): 即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次。
  • UV:UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。

3、面试题

1、根据访问统计UV

 awk '{print $1}'  access.log|sort | uniq -c |wc -l

2、统计访问URL统计PV

 awk '{print $7}' access.log|wc -l

3、查询访问最频繁的URL

awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more

4、查询访问最频繁的IP

 awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more

5、查询访问最频繁的前10的IP

 awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|head -n 10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8-9月强化速成|30天带刷《严选题》《660》

如果你的目标是90-100分&#xff0c;肯定是够了&#xff0c;但是像下面这样微调一下更好 你的基础阶段做的是辅导讲义上的题目&#xff0c;那么你的基础阶段的题量肯定是够了。 但是强化阶段如果只做660题和严选题&#xff0c;这个题量还有有一些薄弱的&#xff0c;建议可以把…

在线BLOG网

TOC springboot0785在线BLOG网 第1章 绪论 1.1课题背景 计算机的普及和互联网时代的到来使信息的发布和传播更加方便快捷。人们可以通过计算机上的浏览器访问多个应用系统&#xff0c;从中获取一些可以满足用户生活需求的管理系统。网站系统有时更像是一个大型“展示平台”…

【MySQL】半同步模式

1 半同步模式原理 1. 用户线程写入完成后 master 中的 dump 会把日志推送到 slave 端 2.slave 中的 io 线程接收后保存到 relaylog 中继日志 3. 保存完成后 slave 向 master 端返回 ack 4. 在未接受到 slave 的 ack 时 master 端时不做提交的&#xff0c;一直处于等待当收到…

Linux离线安装fontconfig

Linux离线下载yum包&#xff0c;安装字体库 一、下载安装包 以CentOS Linux release 7.9.2009下载fontconfig的rpm包的为例 http://mirror.centos.org/centos/7/按提示跳转历史库 找到对应版本的centos https://vault.centos.org/7.9.2009/os/x86_64/Packages/在Packages目…

5个免费的文章生成器,为你在线生成高质量原创文章

在ai技术发展的今天&#xff0c;我们面对文章创作再也不用感到苦恼&#xff0c;无论是没有创作灵感&#xff0c;还是不擅长写作&#xff0c;只要有了文章生成器&#xff0c;那么它就能帮助我们轻松完成任何类型的文章创作。文章生成器虽然很强大&#xff0c;但是市面上众多的文…

服务器备份

服务器备份 一、方案 FreeFileSync freeSSHd Windows任务计划程序 FreeFileSync&#xff1a;设置文件备份方案&#xff08;双向同步、镜像同步、更新同步、自定义同步&#xff09;&#xff0c;适用于本地的文件同步之外&#xff0c;还支持 Google Driver、SFTP 和 FTP 三种…

【Docker】安装Docker环境遇到的坑(VirtualBox)

利用vagrant工具在VirtualBox安装CentOS7环境后&#xff0c;安装Docker环境遇到的坑 前期准备工作 1、卸载原有环境 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engi…

10 Java数据结构:包装类、数组(Array工具类)、ArrayList

文章目录 前言一、包装类1、Integer&#xff08;1&#xff09;基本用法&#xff08;2&#xff09;JDK5前的包装类用法&#xff08;了解即可&#xff0c;能更好帮助我们理解下面的自动装箱和自动拆箱机制&#xff09;&#xff08;3&#xff09;自动装箱与自动拆箱机制 --- 导致&…

bbr 收敛动力学背后的数学原理

我进一步把 bbr 模型简化为更一般的形式。设 x 为 bbr 流的 estimated bw&#xff0c;wₓ 为 bbr 流的 inflight&#xff0c;C 为瓶颈带宽&#xff0c;R 为传播时延&#xff0c;R_s 为总时延&#xff0c;pacing_rate 增益为 g&#xff1a; I ( t ) t o t a l _ i n f l i g h …

火绒使用详解 为什么选择火绒?使用了自定义规则及其高级功能的火绒,为什么能吊打卡巴斯基,360,瑞星,惠普联想戴尔的电脑管家等?

目录 前言 必看 为什么选择火绒&#xff1f; 使用了自定义规则及其高级功能的火绒&#xff0c;为什么能吊打卡巴斯基&#xff0c;360&#xff0c;瑞星&#xff0c;惠普联想戴尔的电脑管家等&#xff1f; 原因如下&#xff1a; 火绒的主要优势 1. 轻量化设计 2. 强大的自…

CocosCreator 3.8 IOS 热更新失败问题解决方案

CocosCreator 3.8 IOS 热更新失败问题解决方案 问题描述 Creator 版本&#xff1a; 3.8.0目标平台&#xff1a; ios 模拟器/真机重现方式&#xff1a;安卓构建版本生成的热更新包&#xff0c;上传到OSS&#xff0c;使用ios进行更新。 19:18:36 [ERROR]: [ERROR] file /Applica…

自动化测试—等待方式详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在自动化测试中&#xff0c;等待是一个重要的技术&#xff0c;用于处理页面加载、元素定位、元素状态改变等延迟问题。 等待能够确保在条件满足后再进行后续操作…

Web前端:CSS篇(三)盒子模型,弹性盒子

CSS 盒子模型 所有HTML元素可以看作盒子&#xff0c;在CSS中&#xff0c;"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子&#xff0c;封装周围的HTML元素。 盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。 盒子模型的作用…

8.18 day bug

bug1 搞懂了用法和特性&#xff0c;bug自然而然就没了 Git branch -a 列出所以分支 git branch&#xff1a; 输入该命令后&#xff0c;会列出当前仓库中所有的分支。当前所在的分支会以星号(*)标记出来 gitpod /workspace/project (reset-orphan-branch|CHERRY-PICKING) $ g…

C# SolidWorks 二次开发-103.模拟库拖拽

最近躺平状态&#xff0c;所有没有更新。 为了搜索量再高一点&#xff0c;我决定让排名上升一个名次&#xff0c;今天来写一篇关于如何假装自己有个库。 如上图&#xff0c;进行一个拖拽示例&#xff0c;从自己的窗体中将文件带入solidworks中打开 或者 装配动作。与手动从文…

Jenkins汉化配置详解

Window安装构建神器Jenkins Window安装构建神器Jenkins详细教程-CSDN博客DevOps&#xff0c;CI&#xff0c;CD&#xff0c;自动化简单介绍选择其他需要和Jenkins一起安装的服务&#xff0c;点击Next。https://blog.csdn.net/qq_37237487/article/details/141299623 登录进入J…

从新手到专家必读书籍:官方推荐.NET技术体系架构指南

前言 Microsoft 官方推荐了一系列有关 .NET 体系结构的指南&#xff0c;旨在帮助开发人员掌握最新的技术和最佳实践。这些资源覆盖了从微服务架构到云原生应用开发等多个主题&#xff0c;是开发高质量 .NET 应用程序不可或缺的参考资料。 通过这些指南&#xff0c;可以深入了…

图纸操作权限守护者:彩虹图纸管理系统的权限功能详解

在产品研发设计过程中&#xff0c;图纸作为核心机密资料&#xff0c;其安全性与保密性至关重要。一旦图纸发生泄密或丢失&#xff0c;将给企业带来不可估量的损失。因此&#xff0c;图纸管理系统的权限功能成为保障数据安全的重要防线。彩虹图纸管理系统凭借其强大的权限管理功…

不同主机之间的网络通信学习

IPC 进程间通信方式 共享内存 //最高效的进程间通信方式 共享内存: 1.是一块&#xff0c;内核预留的空间 2.最高效的通信方式 //避免了用户空间 到 内核空间的数据拷贝 IPC通信方式 ---操作流程类似的 操作: system v &#xff1a; …

全面解析去中心化应用,深入了解 DApps 构建与发展,掌握区块链核心知识!

来源&#xff1a;https://cointelegraph.com/learn/what-are-dapps-everything-there-is-to-know-about-decentralized-applications 编译&#xff1a;TinTinLand 社区 关键要点 ➤ 去中心化应用程序&#xff08;DApps&#xff09;类似于人们每天使用的应用程序&#xff0c;但…