如何分析 Nginx 日志

分析 Nginx 日志可以帮助我们了解服务器性能、流量来源、用户行为,以及诊断问题(如错误和攻击)。以下是详细的分析方法:


1. 日志类型

Nginx 有两种主要日志:

  • 访问日志 (Access Log):记录客户端对服务器的每个请求。
  • 错误日志 (Error Log):记录服务器运行中出现的错误。
访问日志格式

典型日志格式:

$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"

字段解释

  • $remote_addr: 客户端 IP 地址。
  • $remote_user: 认证的用户(如果有)。
  • $time_local: 本地时间。
  • $request: 请求方法、路径和协议。
  • $status: HTTP 状态码。
  • $body_bytes_sent: 发送的响应大小。
  • $http_referer: 请求的来源页面。
  • $http_user_agent: 客户端的 User-Agent 字符串。

2. 常见分析场景

(1) 流量分析

统计访问量、热门资源和请求来源:

  • 统计访问 IP

    awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
    

    说明:统计每个 IP 的访问次数。

  • 统计访问 URL

    awk '{print $7}' access.log | sort | uniq -c | sort -nr | head
    

    说明:统计最常访问的路径。

  • 统计 Referer

    awk -F'"' '{print $4}' access.log | sort | uniq -c | sort -nr | head
    

    说明:查看流量来源。

(2) 状态码分析

找出出现错误的请求:

  • 统计状态码分布

    awk '{print $9}' access.log | sort | uniq -c | sort -nr
    

    说明:统计每种 HTTP 状态码的次数。

  • 筛选特定状态码请求(如 404 错误):

    awk '$9 == 404 {print $0}' access.log
    
(3) 排查慢请求

找出处理时间最长的请求(需要启用 $request_time$upstream_response_time 变量):

  • 按处理时间排序
    awk '{print $10 " " $7}' access.log | sort -nr | head
    
    说明:找到耗时最长的请求。
(4) 攻击检测
  • 检测频繁访问的 IP

    awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
    

    说明:可能是攻击者尝试暴力请求。

  • 检测恶意 User-Agent

    awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -nr | head
    
(5) 错误日志排查

查看 Nginx 错误日志,定位问题:

tail -f /var/log/nginx/error.log

结合时间、错误码和描述信息,找出具体问题(如后端服务连接失败、配置错误等)。


3. 工具辅助分析

日志切割工具

日志可能很大,按日期切割以便于管理:

  • 使用 logrotate 配置自动切割。
  • 手动切割:
    mv access.log access.log.$(date +%Y%m%d)
    systemctl reload nginx
    
分析工具
  • GoAccess(实时分析):
    安装后运行:

    goaccess /path/to/access.log --log-format=COMBINED -o report.html
    

    生成直观的 HTML 报告。

  • AWStats(流量统计):
    对 Nginx 访问日志进行详细的统计分析。


4. 性能优化思路

通过分析日志,发现问题后可采取以下措施:

  1. 高频 IP 限制
    配置 limit_req 或使用防火墙阻止恶意 IP。

    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    
  2. 静态文件缓存
    减少重复请求对服务器的压力。

  3. 优化后端服务
    根据慢请求分析,优化后端接口或数据库查询。


5. 示例综合分析

假设你收到很多 502 错误,分析步骤:

  1. 查看错误日志中的时间点和原因:
    grep '502' /var/log/nginx/error.log
    
  2. 对比访问日志,找到 502 错误对应的请求和 IP:
    awk '$9 == 502 {print $1, $7}' access.log
    
  3. 检查后端服务是否正常,查看响应时间。

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

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

相关文章

博客摘录「 【UnityEditor编辑器扩展】遍历子节点,带中断实现」2024年11月28日

Unity项目内,全局搜索预制体 var title ""; var progress 0; var files SearchFiles(Application.dataPath, new []{"*.prefab"}); EditorUtility.DisplayProgressBar(title, assetPath, progress / filesCount); EditorUtility.ClearProgr…

数据结构入门(C语言复习)malloc开辟free释放

/*void* malloc(size_t) 如果成功&#xff0c;会返回从堆内存上分配的内存指针 如果失败&#xff0c;会返回空指针*/ #include<stdio.h> #include<stdlib.h>//malloc要用 #include<string.h> typedef struct { int x;//如果是char x&#xff0c;内存对齐…

Git仓库迁移到远程仓库(源码、分支、提交)

单个迁移仓库 一、迁移仓库 1.准备工作 > 手动在电脑创建一个临时文件夹&#xff0c;CMD进入该目录 > 远程仓库上创建一个同名的空仓库 2.CMD命令&#xff1a;拉取旧Git仓库&#xff08;包含提交、分支、源码&#xff09; $ git clone --bare http://git.domain.cn/…

鸿蒙千帆启新程,共绘数字生态蓝图

华为的鸿蒙千帆起计划&#xff1a;共筑数字未来&#xff0c;学习华为创新之路 在当今全球科技竞争日益激烈的背景下&#xff0c;华为作为中国科技企业的代表&#xff0c;正通过其自主创新的鸿蒙系统&#xff0c;引领一场移动应用生态的变革。鸿蒙千帆起计划&#xff0c;作为华…

React Native 组件详解之 ActivityIndicator、Button、FlatList、Image、ImageBackground

React Native 组件详解&#xff1a;ActivityIndicator、Button、FlatList、Image 和 ImageBackground 在 React Native 中&#xff0c;组件是构建用户界面的基本单元。它们可以是简单的 UI 元素&#xff0c;如按钮或图像&#xff0c;也可以是复杂的列表或表单。了解这些组件的…

高级java每日一道面试题-2024年11月28日-JVM篇-调优命令有哪些?

如果有遗漏,评论区告诉我进行补充 面试官: 调优命令有哪些? 我回答: 在Java高级面试中&#xff0c;调优命令是面试官常问的问题之一。以下是对Java调优命令的详细介绍&#xff1a; 一、主要调优命令 1. jps&#xff08;JVM Process Status Tool&#xff09; 功能&#x…

Qt-系统相关(2)多线程网络

Qt多线程 在 Qt 中&#xff0c;多线程的处理⼀般是通过 QThread类 来实现。 QThread 代表⼀个在应⽤程序中可以独⽴控制的线程&#xff0c;也可以和进程中的其他线程共享数据。 QThread 对象管理程序中的⼀个控制线程。 QThread 常⽤ API&#xff1a; 使用线程 关于创建线程…

永久免费的PDF万能水印删除工具

永久免费的PDF万能水印删除工具 1.简介 PDF万能水印删除工具&#xff0c;可以去除99.9%的PDF水印。例如&#xff1a;XObject水印&#xff08;含图片水印&#xff09;、文本水印、绘图水印/曲线水印、注释水印、工件水印、剪切路径水印等等。本软件是永久免费&#xff0c;无有…

华三(HCL)和华为(eNSP)模拟器共存安装手册

接上章叙述&#xff0c;解决同一台PC上同时部署华三(HCL)和华为(eNSP&#xff09;模拟器。原因就是华三HCL 的老版本如v2及以下使用VirtualBox v5版本&#xff0c;可以直接和eNSP兼容Oracle VirtualBox&#xff0c;而其他版本均使用Oracle VirtualBox v6以上的版本&#xff0c;…

Group Convolution(分组卷积)

分组卷积的优点&#xff1a; 减少参数数量&#xff1a; 在分组卷积中&#xff0c;每个分组只与一部分输入通道进行卷积运算&#xff0c;这意味着模型的参数数量会减少。例如&#xff0c;如果一个卷积层有8个输入通道和8个输出通道&#xff0c;且不使用分组&#xff0c;那么将有…

深度理解进程的概念(Linux)

目录 一、冯诺依曼体系 二、操作系统(OS) 设计操作系统的目的 核心功能 系统调用 三、进程的概念与基本操作 简介 查看进程 通过系统调用获取进程标识符 通过系统调用创建进程——fork() 四、进程的状态 操作系统中的运行、阻塞和挂起 理解linux内核链表 Linux的进…

SQLite 管理工具 SQLiteStudio 3.4.5 发布

SQLiteStudio 3.4.5 版本现已发布&#xff0c;它带来了大量的 bug 修复&#xff0c;并增加了一些小功能。SQLiteStudio 是一个跨平台的 SQLite 数据库的管理工具。 具体更新内容包括&#xff1a; 现在可以使用 Collations Editor 窗口在数据库中注册 Extension-based collatio…

scala统计词频

目标&#xff1a;统计词频 &#xff08;1&#xff09;从文件1.tst&#xff0c;读入内容&#xff0c;保存在一个字符串中。 &#xff08;2&#xff09;统计字符串中&#xff0c;每个单词出现的频率 &#xff08;3&#xff09;对结果进行排序 &#xff08;4&#xff09;把最后…

非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 2

七、创建前端项目 你下载了nodejs吗&#xff1f;从cn官网下载&#xff1a;http://nodejs.cn/download/&#xff0c;或者从一个国外org网站下载&#xff0c;选择自己想要的版本https://nodejs.org/download/release/&#xff0c;双击下载好的安装文件&#xff0c;选择安装路径安…

继续完善wsl相关内容:基础指令

文章目录 前言一、我们需要安装wsl,这也是安装docker desktop的前提,因此我们在这篇文章里做了介绍:二、虽然我们在以安装docker desktop为目的时,不需要安装wsl的分发(distribution),但是装一个分发也是有诸多好处的:三、在使用wsl时,不建议把东西直接放到系统里,因…

20241124 Typecho 视频插入插件

博文免不了涉及到视频插入这些,网上的插件都或多或少的比较重,和Typecho的风格不搭配 后面就有了DPlay插件精简而来的VideoInsertion插件 VideoInsertion: Typecho 视频插入插件 目录结构 rockhinlink-ht2:/var/www/html/typecho/usr/plugins/VideoInsertion$ tree -h [4.…

css:项目

这是一个完整的网站制作的流程 美工会先制作一个原型图&#xff1a; 原型图写的不详细&#xff0c;就是体现一个网页大致的布局 然后美工再做一个psd样例图片 然后再交给程序员 项目 模块化开发&#xff1a;把代码的不同的样式封装起来&#xff0c;需要用到相同样式的标签就…

AWS EC2设置用户名密码登录

使用AWS EC2 设置用户名密码登录 步骤 1: 访问控制台 登录到AWS管理控制台。导航至 EC2 Dashboard。在左侧导航栏中选择 Instances。选择需要配置的实例。使用 EC2 Instance Connect 访问实例控制台。 步骤 2: 切换到 root 用户 打开终端或命令行工具&#xff0c;通过SSH连…

【通俗理解】Adaptive Gradient Algorithm(自适应梯度算法)——从梯度下降到优化器选择

【通俗理解】Adaptive Gradient Algorithm&#xff08;自适应梯度算法&#xff09;——从梯度下降到优化器选择 关键词提炼 #自适应梯度算法 #梯度下降 #学习率 #优化器 #Adam #RMSprop #机器学习 #深度学习 第一节&#xff1a;自适应梯度算法的类比与核心概念【尽可能通俗】…

Qt桌面应用开发 第九天(综合项目一 飞翔的鸟)

目录 1.鸟类创建 2.鸟动画实现 3.鼠标拖拽 4.自动移动 5.右键菜单 6.窗口透明化 项目需求&#xff1a; 实现思路&#xff1a; 创建项目导入资源鸟类创建鸟动画实现鼠标拖拽实现自动移动右键菜单窗口透明化 1.鸟类创建 ①鸟类中包含鸟图片、鸟图片的最小值下标和最大值…