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-10-08 23:36:15

nginx日志之错误日志及访问日志及日志分割的相关文章

nginx日志不记录静态文件访问和缓存

nginx访问日志nginx和apache的访问日志一样可以记录的指定信息,如记录服务器时间,访问的客户端ip.访问的url和访问状态码等信息,这些信息会规律的记录到访问日志中主配置文件中定义的日志格式,记录的格式参数解释如下 $remote_addr ? ? ? ? ? ? ? ? ? 客户端访问IP(公网IP) $http_x_forwarded_for ? ? ? ? ? 记录代理服务器的IP $time_local ? ? ? ? ? ? ? ? ? ? 日志中服务器本地时间 $host

nginx日志及错误日志详解

nginx错误日志信息介绍 配置记录nginx的错误信息是调试nginx服务的重要手段,属于核心功能模块(ngx_core_module)的参数,该参数名字为error_log,可以放在Main区块中全局配置,也可以放置不同的虚拟主机中单独记录虚拟主机的错误信息. error_log的语法格式及参数语法说明如下: error_log    file    level; 关键字        日志文件    错误日志级别 其中,关键字error_log不能改变,日志文件可以指定任意存放日志的目录,

编写脚本:访问一网站,每5分钟访问一次,如果访问成功,将访问记录保存到日志,如果访问失败,则发送邮件至指定邮箱

今天由于业务需求,要把检查公司的网站是否能被外网访问到,就在同事的指导下做一个计划任务,首先得了解需求: 每五分钟访问公司网站一次,如果访问成功,将访问记录保存到日志,如果访问失败,就发送邮件到指定邮箱中. 需求拿到了,怎么去实现呢? 怎么去实现这个功能,在下愚钝,没有多想,肯定是crontab这个功能,于是直接就写出一个脚本(水平仅限于今天上午),脚本如下: [email protected] */5 * * * * curl http://www.baidu.com 这个肯定不行,最后我询问

解决Apache的错误日志巨大的问题以及关闭Apache web日志记录

调整错误日志的级别 这几天 apache错误日志巨大 莫名其妙的30G  而且 很多都是那种页面不存在的  网站太多了  死链接相应的也很多于是把错误警告调低了 因为写日志会给系统带来很大的损耗.关闭日志以后,甚至最高可以提高整体性能近40%(粗略估计)那么如何关闭日志呢? 可以通过降低log级别的办法来减少日志读写. 这里要提醒的是,这么做将给"入侵检测"以及其他基于日志分析的工作带来麻烦.所以请谨慎使用.网上相关文章很多,但说的都不详细,擦边而过,下面详细说一下具体操作步骤. 编辑

Zabbix监控之检测程序日志中错误发生的次数

最近开发人员提了一个新的监控需求,当一个日志文件中出现的错误的次数增加时(日志文件中的错误关键字出现数量增加)则触发报警. 我觉得这是一个无聊的问题,问题之所以无聊,是因为该问题本身就具有局限性(自己给自己挖坑).首先,日志文件不可能无穷的增大,因此当日志文件因为人为维护时发生的任何变化必会触发报警: 其次,通过检测错误关键字或者错误代码的方法也可能不靠谱,例如日志中可能出现一些并不是错误代码但与错误代码相同的数字,因此错误关键字和错误代码需要同时监测: 再如产生日志的进程的重新启动或者挂起,日

nginx关闭图片,js,css等的日志

一般来说这些日志的分析价值不高,而且还占用硬盘空间,一般都会关掉. nginx配置: location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ {                        access_log off;                        proxy_pass              http://cdel_jxjy;                        proxy_redirect          off;   

Nginx以服务方式启动并用定时任务每天备份日志

1.安装Nginx以服务方式启动: a.下载 instsrv.exe.srvany.exe 以管理员方式启动CMD执行以下命令: instsrv Nginx D:\nginx\srvany.exe b.添加注册表关键附带运行Nginx Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NGINX\Parameters] "Application"=&quo

SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid不正确、数据库日志文 件丢失

客户名称:深圳某科技信息有限公司 数据库类型:sql2000 数据库大小:20g 故障经过 电脑突然断电,软件就显示某数据库错误,无法连接,打开企业管理器,显示数 据库质疑,DBCC查询显示" SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid不正确.数据库日志文件丢失". 处理经过 客户找到我们,然后我们让客户把数据库压缩发给我们,首先我们先对数据进行 检测分析,确定是" I/O 错误 ",然后我们就开始用我们的修复工具对数据进 行全面性的分

httpd 虚拟主机建立之访问机制及其日志定义

注:关闭防火墙,selinux VirtualHost定义: 基于IP地址VirtualHost: 编辑httpd.conf文件: #DocumentRoot "/web/html"                 #注释主服务配置 下面来建立虚拟主机,如果不在httpd.conf文件内编辑虚拟主机,也可以新建一个虚拟主机文件来工作. 在/etc/httpd/conf.d/下新建虚拟主机配置文件 vim /etc/httpd/conf.d/virtualhost.conf 编辑 <