Nginx 日志

一.nginx错误日志

nginx软件会把自身运行的故障信息及用户访问的日志信息记录到指定的日志文件里

一般在nginx.conf配置文件第二行添加:
error_log    logs/error.log    error ;

 ↓                  ↓                  ↓

关键字             日志文件       日志级别

其实如果不添加这行的话,默认就是这样

关于日志级别:

错误日志常见的级别有 :
debug | info|notice | warn|error|crit | alert | emerg

按照经验来说,级别越高,记录的信息越少,生产环境一般是warn 、error 、crit这三个级别

注意:不要配置info等较低级别,会带来巨大磁盘I/O消耗

小技巧:清空日志文件

[[email protected] logs]#  > error.log

nginx错误日志的配置就这么简单

二 .nginx访问日志

nginx软件会把每个用户访问网站的日志信息记录到指定的日志文件里,供网站提供者分析用户的浏览行为等,此功能由ngx_http_log_module 模块负责

我们看一下默认安装完成nginx后没有修改过的nginx.conf ,一般访问日志都放在httpd区块那

修改nginx.conf 添加黄色部分

worker_processes  1;
error_log       logs/error.log  error;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;

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

sendfile        on;
    keepalive_timeout  65;
    include extra/*.conf;

}

访问日志的参数说明如下:

log_format  main → 这个是日志格式的定义

$remote_addr -    记录访问网站的客户端地址

$remote_user        远程客户端用户名称

$time_local        记录用户访问时间和时区

$request        用户的http请求其实行信息

$status        http状态码,记录请求返回的状态,例如200 403 301

$body_bytes_sent        服务端发送给客户端的响应body字节数

$http_referer        记录此次连接是从哪个连接跳转过来的,防盗链

$http_user_agent        记录客户端访问信息,例如浏览器、手机客户端等

$http_x_forwarded_for        当前端有代理服务器时,设置web节点记录客户端配置

首先主配置文件修改完成后,然后在每个虚拟主机里面进行配置,使其使用上述格式记录用户访问日志,已www.vipdailiang.com 为例

修改

server {
        listen       80;
        server_name  www.vipdailiang.com ;
        location / {
            root   html/www;
            index  www.html;
            access_log  logs/www_access.log  main;

}

}

最后检查配置及重新加载nginx配置:

/app/zpy/nginx/sbin/nginx -t
/app/zpy/nginx/sbin/nginx -s reload

浏览器访问www.vipdailiang.com 然后

[[email protected] logs]# tail -f www_access.log 
192.169.21.191 - - [15/Jul/2016:15:59:58 +0800] "GET / HTTP/1.1" 200 20 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0" "-"

与这个比较一下:

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

$remote_addr -         记录访问网站的客户端地址    192.169.21.191

$remote_user            远程客户端用户名称

$time_local            记录用户访问时间和时区 [15/Jul/2016:15:59:58 +0800]

$request                用户的http请求其实行信息 "GET / HTTP/1.1" 

$status                http状态码,记录请求返回的状态,例如200 403 301 等200

$body_bytes_sent        服务端发送给客户端的响应body字节数 20

$http_referer            记录此次连接是从哪个连接跳转过来的,防盗链 

$http_user_agent        记录客户端访问信息,例如浏览器、手机客户端等"Mozilla/5.0 (Windows NT 6.1; WOW64;                         rv:47.0) Gecko/20100101 Firefox/47.0"

$http_x_forwarded_for    当前端有代理服务器时,设置web节点记录客户端配置 


至此 nginx 访问日志收集完成。。。

但是我们又有了新问题,时间长了访问日志一直往里面写就会导致这个日志个头太大,不利于日志的分割和处理,有必要对nginx日志进行分割处理,我还是比较倾向于用天分割


三 .nginx 日志分割

通过脚本实现:

1)将正在写入的nginx日志(www_access.log)改名为带日期的格式文件(20160715_www_access.log)

然后重新加载nginx ,生成新的nginx日志(www_access.log)

2)将此脚本加入到crontab

#!/bin/bash 
DATE01=`date +%Y%m%d`
BASEDIR="/app/zpy/nginx"
LOGDIR="$BASEDIR/logs"
[ -d $LOGDIR ] && cd $LOGDIR || exit 1
[ -f www_access.log ] || exit 2
/bin/mv www_access.log  www_access_$DATE01.log
$BASEDIR/sbin/nginx -s reload

注释:

[[email protected] scripts]# date +%Y%m%d
20160715
[[email protected] scripts]# date +%Y/%m/%d
2016/07/15
-d 判断目录是否存在

-f 判断文件是否存在

[  ] 内部要有空格啊

添加crontab(每天凌成执行)

vim /etc/crontab 添加

00 00  *  *  *   root  /bin/sh /software/tools/scripts/cut_nginx_log.sh\

注释:

注意用户,crontab -e的话就不用写用户了

cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做 一些事情。用crontab -e 配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务

最后我们查看一下效果:

-rw-r--r--. 1 root root   489 7月  15 15:59 www_access_20160715.log
-rw-r--r--. 1 root root     0 7月  15 16:39 www_access.log


时间: 2024-12-07 15:09:52

Nginx 日志的相关文章

shell脚本分析nginx日志

第一版,比较粗糙,仅限于能用 正在写入的文件不能用tar进行压缩 --------压缩日志---------------------- 94 access.log 95 tar: access.log: file changed as we read it 96 #### 压缩日志失败 #### #!/bin/sh #分析nginx日志 DATE=`date '+%Y%m%d-%H%M'` ARCHIVE=/usr/log_bak/nginx_$DATE.tar.gz MESSAGE=/usr/

Goaccess---良心nginx日志分析工具

Goaccess是一个非常良心的开源软件,它的良心之处体现在如下方面: 1)安装简单: 2)操作容易: 3)界面酷炫: 安装Goaccess十分的简单,在centos里直接#yum install goaccess,如果yum源里没有goaccess,可以先安装epel.安装epel的方法如下: wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm wget http://rpms.famil

Nginx日志切割并计划任务自动上传到FTP服务器

枫城浪子原创,转载请标明出处! 微信bh19890922 QQ445718526,490425557 更多技术博文请见个人博客: https://fengchenglangzi.000webhostapp.com http://fengchenglangzi.blog.51cto.com 一.简述 Nginx WEB服务器每天会产生大量的访问日志,而且不会自动地进行切割,如果持续天数访问,将会导致该access.log日志文件容量非常大,不便于SA查看相关的网站异常日志,并且后期进行分割非常不易

Flume采集Nginx日志到HDFS

下载apache-flume-1.7.0-bin.tar.gz,用 tar -zxvf 解压,在/etc/profile文件中增加设置: export FLUME_HOME=/opt/apache-flume-1.7.0-bin export PATH=$PATH:$FLUME_HOME/bin 修改$FLUME_HOME/conf/下的两个文件,在flume-env.sh中增加JAVA_HOME: JAVA_HOME=/opt/jdk1.8.0_121 最重要的,修改flume-conf.pr

Nginx日志变量说明

# Nginx日志变量说明|   |   || ------------ | ------------ ||  $remote_addr |  记录访问网站的客户端ip地址. ||  $http_x_forwarded_for |  当前端有代理服务器时,设置Web节点记录客户端地址的配置,此参数生效的前提是代理服务器上也要进行相关的x_forwarded_for设置. ||$remote_user|远程客户端用户名称||$time_local|记录访问时间和时区||$request|用户的ht

Nginx 日志分析及性能排查

最近一直在做性能排查,思路就是根据分析Nginx日志,得到响应耗时的url.以及请求时间,再得到这段时间的请求量,并发量,分析是并发的原因,还是本身就比较慢,如果是应用本身的原因,只需要找到对应的代码,然后进行优化就好了 找到的几个原因,基本就是后端sql运行的比较多,单次访问看不出来,但是人比较多的时候就比较慢了,人少的时候20-200毫秒,人多的时候,200-6000毫秒,优化之后基本保持在几十毫秒,优化策略就是减少不必要的sql,加上缓存,基本解决了卡顿的问题,顺便把这次用的一系列命令记录

Linux nginx日志按天分割实例

Linux nginx日志按天分割实例 nginx的日志有个小缺点,日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将导致日志文件非常大,不便于管理 这就需要我们自己来实现了,按日期每天生产一个日志文件 思路 每天零点把默认日志文件改名为当天日期,再重新打开新的日志文件 使用定时任务来执行脚本,脚本中执行改名和重新打开日志文件的操作 向Nginx主进程发送 USR1 信号,就可以重新打开日志文件 实现 #/bin/bash #备份日志的路径bakpath='/home/nginx/

rsync同步Nginx日志遇到问题总结

一.目的 将nginx 日志通过普通用户利用rsync公钥认证的方式实时同步到本地服务器上,之后使用elk程序进行处理. 二.遇到问题及解决方法思路 问题1.文件权限:nginx 的日志默认权限如下: [[email protected] ~]# ll /var/log/nginx/access.log -rw-r----- 1 nginx adm 36330 Sep 11 10:26 /var/log/nginx/access.log 我新建的是普通用户,标准的用户组,用rsync同步时,报个

用Hive分析nginx日志

这里用到的nginx日志是网站的访问日志,比如: [java] view plain copy 180.173.250.74 - - [08/Jan/2015:12:38:08 +0800] "GET /avatar/xxx.png HTTP/1.1" 200 968 "http://www.iteblog.com/archives/994" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (