nginx那点事儿——nginx日志详解


前言

Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。每个虚拟主机也可以设置独立的访问日志。本文就主要介绍nginx日志的配置、切割及简单的日志分析。

一、日志配置、格式

日志格式通过配置文件 log_format 定义。
默认格式:

log_format  main  '$remote_addr - remote_user [time_local] "$request" ' 
'$status body_bytes_sent "http_referer" ' 
'"http_user_agent" "http_x_forwarded_for"';

注:如果Nginx作为负载均衡器,web服务器无法直接获取到客户端真实的IP地址。$remote_addr获取的是反向代理的IP地址。此时,http_x_forwarded_for可以记录客户端的IP地址。

二、日志格式包含的变量

$remote_addr     $http_x_forwarded_for         # 记录客户端的IP地址

$remote_user        # 记录客户端用户名称  如果网站不加密 显示"-"

$time_local         # 通用日志格式的本地时间

$request            # 客户端请求的URL(get下载 post上传)和 http协议

$status             # 请求的状态码

$body_bytes_sent        # 发送给客户端的字节数,不包括响应头的大小

$http_referer           # 从哪个页面跳转过来的

$http_user_agent        # 客户端浏览器的信息

$bytes_sent             # 发送给客户端的总字节数

$msec                   # 日志写入时间。单位为秒,精度是毫秒。

$request_time           # 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。

$time_iso8601           # ISO8601标准格式下的本地时间。 

三、日志缓存

1、缓存设置

对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置(默认是OFF)

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

max:         # 设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭

inactive:    # 设置存活时间,默认是10s

min_uses:    # 设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次

valid:       # 设置检查频率,默认60s

off:         # 禁用缓存

2、作用位置

http{} 将整个服务器所有网站,所有页面的日志进行缓存

server{} 将某一个网站的所有页面日志,进行缓存

location{}某一个页面的日志,进行缓存。

四、日志切割

  除了我们编写脚本配合crontab去判断日志大小从而实现日志切割以外,我们还可以使用Linux系统logrotate去实现日志切割。我更推荐第二种方法,但是如果你的日志文件增长过快,甚至几个小时会增长十几G,以至于每天切割一次日志文件都太大,这种情况logrotate就不太实用,因为logrotate只会每天切割一次,不过这种情况还是建议优化程序的日志输出及控制下日志级别,屏蔽无用的日志。

1、切割配置文件

日志的切割配置文件都是在/etc/logrotate.d下,logrotate会读取这个目录下的配置文件,从而实现切割。以nginx切割配置为例

cd /etc/logrotate.d/

cat nginx

/var/log/nginx/*.log {                # 待切割的日志

  daily           # 每天轮转一次

  missingok       # 丢失不提醒

  rotate 52       # 保留52份

  compress        # 压缩

  delaycompress      # 不要将最近一次轮转的日志压缩

  notifempty         # 空日志不轮转

  create 640 root root  # 创建新的日志文件 ,属主属组

  copytruncate          # 将原始文件拷贝,并清空原始文件(程序无pid文件时候使用)

  sharedscripts         # 轮转后脚本

  postrotate

    if [ -f /var/run/nginx.pid ]; then

      kill -HUP `cat /var/run/nginx.pid`

    fi                

  endscript

}

2、日志切割原理

切割的原理我们通过查看/etc下所有cron相关文件来看
在这里插入图片描述

ls /etc/cron*

# cron.deny 为写入不能执行计划任务的用户  crontab 为计划任务的主配置文件
/etc/cron.deny  /etc/crontab

# cron.d为子配置文件,cron服务或者执行crontab时会读取0hourly,0hourly再调用cron.hourly
/etc/cron.d:
0hourly  raid-check  sysstat

# 运行cron.hourly 此时任务被anacron接管  执行 anacron 如果轮转过或者电池供电将不轮转
# 这里 0anacron 会读取 anacron 的配置文件,也就是 /etc/anacrontab
/etc/cron.hourly:
0anacron

# 0anacron的配置文件包含以下三种轮转模式(日月周) nginx为每天轮转 所以在cron.daily下轮转  此时任务被logrotate接管
/etc/cron.daily:
# logrotate默认配置就在/etc/cron.daily目录下,所以每日都会执行logrotate
logrotate  man-db.cron  mlocate

/etc/cron.monthly:

/etc/cron.weekly:


logrotate具体执行时间在/etc/anacrontab配置:
cat /etc/anacrontab 
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
RANDOM_DELAY=45   # 延迟时间,最大延迟45min
START_HOURS_RANGE=3-22  # logrotate允许执行的时间范围

# period in days(轮询周期)   delay in minutes(延迟时间)   job-identifier   command
1  5  cron.daily    nice run-parts /etc/cron.daily
7  25  cron.weekly    nice run-parts /etc/cron.weekly
@monthly 45  cron.monthly    nice run-parts /etc/cron.monthly

整个流程:
crond服务加载 /etc/cron.d/0hourly —> 在每小时的01分执行/etc/cront.hourly/0anacron —>调用anacron —>读取/etc/anacrontab的配置 —> 读取/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly —>读取/etc/cron.daily/下的logrotate脚本 —>执行logrotate —>读取/etc/logrotate.d下配置文件 —>切割日志成功

五、日志分析

nginx常用的统计案例:

eg1:统计2020年11月15日的PV量

grep '15/Nov/2020' /var/log/nginx/access.log |wc -l

eg2:统计2020年11月15日访问量最高的10个IP

grep '15/Nov/2020' /var/log/nginx/access.log |awk '{ips[$1]++} END{for(i in ips){print i,ips[i]}}' |sort -k2 -rn |head -10

eg3:统计2020年11月15日访问量超过100的IP

grep '15/Nov/2020' /var/log/nginx/access.log |awk '{ips[$1]++} END{for(i in ips){if(ips[i]>100)print i,ips[i]}}'

eg4:统计2020年11月15日访问量最高的10个URL

grep '15/Nov/2020' /var/log/nginx/access.log |awk '{url[$7]++} END{for(i in url){print i,url[i]}}' |sort -k2 -rn |head -10

eg5:统计2020年11月15日每个URL访问内容总大小($body_bytes_sent)

grep '15/Nov/2020' /var/log/nginx/access.log |awk '{ urls[$7]++; size[$7]+=$10}END{for(i in urls){print urls[i],size[i],i}}'|sort -k1 -rn | head -n10

eg6:统计2020年11月15日访问量状态码为404的ip及出现次数

grep '15/Nov/2020' /var/log/nginx/access.log | awk '{if($9="404"){ip_code[$1" "$9]++}}END{for(i in ip_code){print i,ip_code[i]}}'

eg7:统计2020年11月15日前一分钟的访问量

date=(date -d '-1 minute' +%d/%b/%Y:%H:%M);awk  -v date=date '$0 ~ date {i++} END{print i}' /var/log/nginx/access.log

eg8:统计2020年11月15日 8:30到9:30,访问代码是404

awk '$4>="[15/Nov/2020:08:30:00" && $4<="[15/Nov/2020:09:00:00" {if($9="404"){ip_code[$1" "$9]++}}END{for(i in ip_code){print i,ip_code[i]}}' /var/log/nginx/access.log
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: LinuxNginx是两个不同的东西,Linux是一种操作系统,而Nginx是一种Web服务器软件。在Linux上安装和配置Nginx可以提供高性能的Web服务。 Nginx的配置文件是nginx.conf,其中包含了Nginx的各种配置选项。常见的配置选项包括监听端口、虚拟主机、反向代理、负载均衡等。 在配置Nginx时,需要注意以下几点: 1. 监听端口:Nginx默认监听80端口,可以通过修改nginx.conf文件中的listen选项来修改监听端口。 2. 虚拟主机:Nginx支持虚拟主机,可以通过配置server块来实现。每个server块代表一个虚拟主机,可以配置不同的域名、端口、SSL证书等。 3. 反向代理:Nginx可以作为反向代理服务器,将请求转发到后端的应用服务器。可以通过配置proxy_pass选项来实现。 4. 负载均衡:Nginx可以实现负载均衡,将请求分发到多个后端服务器上。可以通过配置upstream块和proxy_pass选项来实现。 以上是Nginx配置的一些基本知识,具体的配置方法可以参考Nginx官方文档或者相关的教程。 ### 回答2: Linux是一种开源的操作系统,消费者可以免费使用和修改。NGINX是一种高性能、开源的HTTP服务器和反向代理服务器,已经成为互联网枢纽的关键组件之一。在本文中,我们将详细介绍如何在Linux安装和配置NGINX。 第一步:安装Linux操作系统 首先,需要为服务器选择操作系统。建议选择Ubuntu、Debian、Red Hat、CentOS或Fedora等Linux操作系统,并确保最新版本已经安装。必须确保操作系统安全和保护服务器免受隐患的影响。 第二步:安装NGINX 接下来,需要在Linux服务器上安装NGINX。这里以Ubuntu操作系统为例,使用以下命令: $sudo apt-get update $sudo apt-get install nginx 这个命令将在Linux系统上自动安装NGINX,并为您配置必要的文件和目录。您可以使用以下命令检查NGINX是否正确安装: $nginx -v 第三步:运行NGINX 安装NGINX之后,需要使用以下命令启动该服务器: $sudo systemctl start nginx 启动NGINX后,可以使用以下命令检查该服务器是否在监听: $sudo systemctl status nginx 这个命令将返回一个类似于以下的响应: nginx.service – A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-10-18 00:42:30 UTC; 15min ago Main PID: 15611 (nginx) Tasks: 2 (limit: 2297) Memory: 5.5M CGroup: /system.slice/nginx.service ├─15611 nginx: master process /usr/sbin/nginx -g daemon on; master_proces └─15612 nginx: worker process Oct 18 00:42:30 ubuntu systemd[1]: Starting A high performance web server Oct 18 00:42:30 ubuntu systemd[1]: Started A high performance web server 以上响应证明NGINX已经成功启动。 第四步:配置NGINX 为了使NGINX服务器适应您的需求,必须修改其配置文件。此文件通常命名为nginx.conf并位于以下目录中:/etc/nginx/nginx.conf。 编辑此配置文件后,使用以下命令重新启动服务器: $sudo systemctl restart nginxLinux中安装NGINX可以为您的网站提供高质量的服务。可以利用其反向代理功能,使网站具有高效性和扩展性。NGINX的优势在于它可以通过主动配置和细致的优化,将其性能提高到极限。 总的来说,LinuxNGINX的安装和配置相对简单,通过掌握这些技能,可以帮助您更好地管理并保护服务器。 ### 回答3: Nginx是一个热门的开源Web服务器软件,具有出色的性能和灵活性,成为了许多网页服务器的首选。在Linux系统中搭建Nginx服务器相对简单,可以通过一些简单的命令来实现。下面我们来详细了解一下Linux Nginx配置的方法。 1.安装NginxLinux中,可以使用apt-get命令来安装Nginx。要安装Nginx,您需要输入以下命令: sudo apt-get update sudo apt-get install nginx 这将安装最新版本的Nginx,并启动Web服务器,默认情况下,Nginx的网站的根目录是/var/www/html/,您可以在此处添加你自己的网站内容。 2.配置Nginx 要配置Nginx,您需要编辑Nginx的配置文件。在Ubuntu中,配置文件默认位于/etc/nginx/nginx.conf。使用以下命令打开这个文件: sudo nano /etc/nginx/nginx.conf 你可以在这里定义 Nginx 的主要设置,例如worker_processes, worker_connections等等。此外,您也可以编辑Nginx的虚拟主机设置,通过编辑/etc/nginx/sites-available/default文件来修改网站的设置。 3.启动和重启Nginx 在安装和配置完Nginx后,您可以使用以下命令来启动Web服务器: sudo systemctl start nginx 要重启Nginx服务器,您可以使用以下命令: sudo systemctl restart nginx 4.反向代理设置 Nginx也可以用作反向代理服务器。反向代理服务器充当两个Web服务器之间的中介,可以通过将请求从客户端传递给Web服务器来帮助加强安全性和可扩展性。在Nginx中,您可以使用以下指令来设置反向代理: location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 这将将请求传递给本地主机的端口8080上运行的Web服务器,并设置适当的代理头以正确显示源IP地址和客户机IP地址。 总之,Linux Nginx服务器的配置非常简单,只需要按照上面的步骤进行即可。通过灵活性和性能,Nginx 成为了许多网站服务器的首选,因此掌握 Linux Nginx 的配置和使用对于Web开发人员来说是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷学技术的梁胖胖yo

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值