nginx日志能看到数据包情况吗(nginx日志影响性能吗)

nginx日志能看到数据包情况吗(nginx日志影响性能吗)

扫码添加渲大师小管家,免费领取渲染插件、素材、模型、教程合集大礼包!

大家好,今天来介绍nginx日志能看到数据包情况吗的问题,以下是渲大师小编对此问题的归纳和整理,感兴趣的来一起看看吧!

nginx log日志有什么用

Linux系统下Nginx 日志可以查看系统运行记录和出错说明,对Nginx 日志的分析可以了解系统运行的状态。那么Linux系统Nginx日志怎么分析呢?

  Nginx 日志相关配置有 2 个地方:access_log 和 log_format 。
  默认的格式:
  access_log /data/logs/nginx-access.log;
  log_format old ‘$remote_addr [$time_local] $status $request_time $body_bytes_sent ’
  ‘“$request” “$http_referer” “$http_user_agent”’;
  相信大部分用过 Nginx 的人对默认 Nginx 日志格式配置都很熟悉,对日志的内纯此容也很熟悉。但是默认配置和格式虽然可读,但是难以计算。
  Nginx 日志刷盘相关策略可配置:
  比如,设置 buffer,buffer 满 32k 才刷盘;假如 buffer 不满 5s 钟强制刷盘的配置如下:
  access_log /data/logs/nginx-access.log buffer=32k flush=5s;
  这决定了是否实时看到日志以及日志对磁盘 IO 的影响。
  Nginx 日志能够记录的变量还有很多没出现在默认配置中:
  比如:
  请求数据大小:$request_length
  返回数据大小:$bytes_sent
  请求耗时:$request_time
  所用连接序号:$connection
  当前连接发生请求数:$connection_requests
  Nginx 的默认格式不可计算,需要想办法转换成可计算格式,比如用控制字符 ^A (Mac 下 ctrl+v ctrl+a 打出)分割每个字段。
  log_format 的格式可以变成这样:
  log_format new ‘$remote_addr^A$http_x_forwarded_for^A$host^A$time_local^A$status^A’
  ‘$request_time^A$request_length^A$bytes_sent^A$http_referer^A$request^A$http_user_agent’;
  这样之后就通过常见的 Linux 命令行工具进行分析了:
  查找访问频率最高的 URL 和次数:
  cat access.log awk -F ‘^A’ ‘{print $10}’ sort uniq -c
  查找当前日志文件 500 错误的访问:
  cat access.log awk -F ‘^A’ ‘{if($5 == 500) print $0}’
  查找当前日志文件 500 错误的数量:
  cat access.log awk -F ‘^A’ ‘{if($5 == 500) print $0}’ wc -l
  查找某一分钟内 500 错误访问的数量:
  cat access.log awk -F ‘^A’ ‘{if($5 == 500) print $0}’ grep ’09:00’ wc-l
  查找耗时超过 1s 的慢请求:
  tail -f access.log awk -F ‘^A’ ‘{if($6》1) print $0}’
  假如只想查做册看某些位:
  tail -f access.log awk -F ‘^A’ ‘{if($6》1) print $3″”$4}’
  查找 502 错误最多的 URL:
 纯裤宏 cat access.log awk -F ‘^A’ ‘{if($5==502) print $11}’ sort uniq -c
  查找 200 空白页
  cat access.log awk -F ‘^A’ ‘{if($5==200 && $8 《 100) print $3″”$4″”$11″”$6}’
  查看实时日志数据流
  tail -f access.log cat -e
  或者
  tail -f access.log tr ‘^A’ ‘’
  照着这个思路可以做很多其他分析,比如 UA 最多的访问;访问频率最高的 IP;请求耗时分析;请求返回包大小分析;等等。
  这就是一个大型 Web 日志分析系统的原型,这样的格式也是非常方便进行后续大规模 batching 和 streaming 计算。
  以上就是Linux系统Nginx日志怎么分析的全部内容了,可以看出来Nginx日志还是有很强大的作用的。

Rhit:高效可视化 Nginx 日志查看工具每秒处理百万行日志数据

【导语】:一个格式化 Nginx 日志,可快速阅读、查看 Nginx 日志的工具。

Rhit 可以从标准文件夹中读取 Nginx 的日志文件(gzipped 的压缩文件也可以),并进行分析统计,在控制台中以可视化的表格形式展示,并且不会产生任何多余的临时文件或数据。

可以按照日期、响应值、请求来昌做源等进行过滤匹配,并进行分析,Rhit 具有很高的效率,每秒可以处理百万行日志数据。

以下是在一月份的日志中查找状态码为 1xx、2xx 的结果:

项目地址是:

https://github.com/Canop/rhit

rhit可以自动打开默认目录下的nginx日志文件,也可以在命令行参数中指定日志路径:

nginx常见的日志行是这样的:游大

它由几个字段组成:日期、远程IP地址、路径、发送的字节等。rhit可以执行对表格进行排序的字段列表,如果未指定,默认按照日期、状态码、来源和路径来显示,如果要耐磨衡制定多个字段,使用逗号进行分割,如-f date,status;显示所有字段,使用-f all。

Rhit提供了一些过滤器,用于筛选结果列表,展示自己想看到或者不想看到的一些数据。

默认情况下,所有表都按照hits进行排序,这就是排序键,排序键的所有值都以粉红色显示,包括直方图。如果对发送字节数更感兴趣,可以将排序键修改为bytes,使用-k b进行更改:

写一个查看当天nginx的错误日志

首先要查看nginx错误日志,我们可以笑液用 

cat /usr/local/nginx/logs/error.log 

一查你就会发现有一大堆数据,看的眼睛都疼,那这时候呢,可以加一个管道命令,然后添加一个查询条件

cat /usr/local/nginx/logs/error.log grep "$(date +"%Y/%m/%d")"

其中 就是一个管道命令,那这个命令里面我们要加的条件是什么呢?那就是查找当天的日志

于是:grep "$(date +"%Y/%m/%d")"

grep 就是查找的意思,然后date指的是当天时间,后面加上一个 +"%Y/%m/%d" 意思就是显示今天的时间有年/月/日的格式,$()这个作用就是,先将括号里面的内容完成,然后在生成一个新的命令行,比如今天日期是 2019/03/04 那碰嫌物执行完那一句的结果就是grep "2019/03/04"

这句执行以后,数据就显示是今天的日志了

今天的错误日志就出现了,但是如果每天都要查看一次,那每次都要打一遍那就很累了,因此就有了shell脚本者陪这个东西。

新建一个文件,就叫做 nginx_error.sh

然后第一行输入 #!/bin/bash   (执行bash)

第二行就是注释了

第三行就是获取当天ng的错误日志,并且重定向到root目录里面的nginx.txt

保存文件,然后设置权限,chmod +x nginx.sh (给该脚本设置一个执行权限)

然后 ./nginx.sh   接着就会多出一个nginx.txt。你直接cat nginx.txt。就可以查看当天的错误日志拉

使用命令如何动态查看nginxlog日志文件的内容

可以看
输入固定的查看镇举日志的代码,nglnx日志查看御唯碧的文山察件代码主要如下:cat /var/log/nginx/error.log。

Nginx基础篇虚拟主机、日志、模块、请求限制

在企业中,我们有很多的业务服务A,B,C等等,按照最最传统的财大气粗方式就是在一台机器上搭建一个Nginx,并且一个Nginx只为一个业务进行服务,如下图所示,我们有3个业务服务,我们就在3个机器上搭建3个Nginx,这显然是很浪费资源的一种不合理方式。

  虚拟主机嫌亮的方式是指,我们在同一个Nginx上运行多套单独服务,而且这些服务是独立的,如下图所示:

  基于主机多IP的方式有两种:

第一步 :在单网卡上添加多个IP--ip a add ip地址 设备名
第二步 :我们找到nginx.conf中的http中的include的配置,找到其include的文件路径
第三步 :找到默认配置文件,进行复制,将server中的listen进行改动,改为ip:port,在这里如果我们要为3个业务服务的话,我们就设置三个.conf的配置文件,每个配置文件中的ip不同即可。
第四步 :nginx -s stop -c /etc/nginx/nginx.conf
nginx -s表示给nginx的主进程发送敏者氏信号,停止应用。-c表示启动的时候使用哪个配置文件。

第一步 :我们找到nginx.conf中的http中的include的配置,找到其include的文件路径
第二步 :找到默认配置文件,进行复制,将server中的listen 端口进行改动即可,每个配置文件中的端口不同即可。
第三步 :nginx -tc /etc/nginx/nginx.conf 对刚才修改的配置文件进行语法检查
第四步 :nginx -c /etc/nginx/nginx.conf 启动nginx

更改server_name

  Nginx的日志类型有error.log和access_log两类。error.log用于记录错误类型的日志,access_log记录的是请求访问的相关的日志。Nginx使用了log_format把各种类型的变量进行组织,然后记录到access_log当中去。
  log_format只能配置到http模块下,所以我们看到nginx.conf中,会看到log_format的使用方式如下图所示:

  Nginx的模块分为官方的模块和第三方的模块,我们可以通过命令行nginx -V看到很多的--with-XXXX,这些就是Nginx中的模块。

  编译选项--with-http_stub_status_module,用于桥散展示Nginx当前处理连接的状态。这个模块默认是没有打开的,它必须要用户显示的server和location模块中进行配置。

  我们在nginx.conf中配置好后,通过IP:PORT/mystatus进行访问,会看到以下结果:

该模块使用的比较少,它表示是从目录中随机选取一个主页。语法规则 random_index on off,默认情况下是random_index off;只能放在location的上下文中。

这个模块也用的不多,它主要用于对http的响应内容作替换。包含了很多用法:
  sub_filter string replacement 默认是不开启的,可以用在http,server,location中,作用是替换html中的字符。
  sub_filter_last_modified on off,默认是off,可以用在http,server,location中,作用是否阻止response header中写入Last-Modified,防止缓存,默认是off,即防止缓存。
  sub_filter_once on off,默认是on,可以用在http,server,location中,作用sub_filter指令是执行一次,还是重复执行,默认是只执行一次。

  Nginx中可以对连接频率和请求频率做限制。其中连接频率限制的模块是limit_conn_module,请求频率限制的模块是limit_req_module。
  请求和连接到底有什么区别呢?我们知道HTTP协议是建立在TCP协议之上的,客户端在向服务端发起请求的时候,必须先建立三次握手连接,建立完连接之后才开始发送请求,为了保持这个连接我们使用FIN和ACK,这样就可以在一个连接中多次发起请求,因此我们可以说HTTP请求建立在一次TCP连接基础上,一次TCP请求至少产生一次HTTP请求。

  连接限制的语法:
  定义空间:
  limit_conn_zone key zone=name:size 默认是没有的,只能在http中配置,如果说我们想对用户的IP地址做限制,那么这里的key我们可以配置成$remote_addr,这里的name可以随便命名,size设置大小
  limit_conn zone number;这里的zone必须和上面的limit_conn_zone中的name对应,number表示的是连接数,默认是没有的,可以在http,server,location中配置。
  请求限制的语法:
  定义空间:
  limit_req_zone key zone=name:size rate=rate默认是没有的,只能在http中配置
  limit_req zone name [burst=number] [nodelay];这里的zone必须和上面的limit_req_zone中的name对应,number表示的是连接数,默认是没有的,可以在http,server,location中配置;burst爆发的意思,这个配置的意思是设置一个大小为N的缓冲区,当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内;nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队.

  $binary_remote_addr是限制同一客户端ip地址,binary_remote_addr和remote_addr其实是一样的,但是binary_remote_addr要更节省空间。1m 可以储存 32000 个并发会话。zone=req_zone:1m表示生成一个大小为1M,名字为req_one的内存区域,用来存储访问的频次信息;rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。这里我使用abtest来演示一下各种情况:

配置每秒钟最多一次请求:

使用abtest发起请求,设置并发数20,发起20次请求。测试结果,成功1次,失败19次,符合预期:

查看nginx错误日志,图中刚好有19个error记录,而且是被限制了,符合预期:

设置一个大小为3的缓冲区,超过访问频次限制的请求将会放入到缓冲区中:

使用abtest发起请求,设置并发数20,发起20次请求。测试结果,成功4次,失败16次,符合预期,因为第一次成功后,超过了请求限制,放了3个请求到缓冲区中,所以总共成功4个:

查看nginx错误日志,图中刚好有16个error记录,而且是被限制了,符合预期:

设置最大连接数为1:

使用abtest发起请求,设置并发数20,发起20次请求。测试结果,成功20次,失败0次,符合预期:

查看nginx错误日志,无任何错误日志,符合预期。

  nginx的http_access_module模块实现的,相关语法如下图所示:

~表示模式匹配,这里我们表示凡是访问admin.html的请求,阻止180.158.232.219的访问,同时允许所有的IP访问。结果如下图所示:

请求成功:

  是nginx的http_auth_basic_module模块实现的,使用方式可以具体参考 http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html 这里不再赘述
  Nginx的基础篇就讲到这里,欢迎大家指正,下一篇文章我将介绍如何使用Nginx作为静态资源Web服务。

分享到 :
相关推荐

阿联酋云主机好不好如何判断

很多国内企业都有在阿联酋发展业务。阿联酋云主机由于其免备案且中东访问速度快等独特优势...

服务器托管中如何应对硬盘故障问题(服务器托管中如何应对硬盘故障问题)

我们都知道。硬盘是服务器很重要的配件。因为所有的资料和数据都存储在硬盘上。一旦硬盘出...

外贸企业选择香港云主机有哪些优势

外贸企业选择香港云主机的优势有:1。香港云主机机房的数据中心有防火。防震等方面的防范...

虚拟主机如何选择(虚拟主机如何选择端口)

虚拟主机选择的方法:1。看网站需要空间的大小。根据网站的实际情况来估算;2。看网站程...

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注