大家好,今天来介绍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服务。
本文地址:https://gpu.xuandashi.com/73372.html,转载请说明来源于:渲大师
声明:本站部分内容来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。分享目的仅供大家学习与参考,不代表本站立场!