nginx日志管理

日志 / 806人浏览 / 0人评论

    无论是统计业务数据或服务器的运行状况,nginx都是可参考的重要数据来源,分析nginx日志能快速统计数据和更好的排查系统bug。

一、nginx日志介绍

Nginx日志主要分为两种:access_log(访问日志)error_log(错误日志)。通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。

1、日志的标准格式

默认日志:

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

记录的形式如下: 

192.168.28.22 - - [28/Feb/2018:04:01:11 +0800] "GET /UserRecommend.php HTTP/1.1" 200 870 "http://wwww.kevin.www/grace/index.html"
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)" 320

日志格式说明: 
$remote_addr             远程请求使用的IP地址 
$remote_user             远端登录名 
$time_local                 时间,用普通日志时间格式(标准英语格式) 
$request                     请求的第一行 
$status                       状态。 
$body_bytes_sent     请求返回的字节数,包括请求头的数据 
$http_referer             请求头Referer的内容 
$http_user_agent     请求头User-Agent的内容 
$request_time           处理完请求所花时间,以秒为单位

再举个例子

10.1.1.1 - - [22/Aug/2014:16:48:14 +0800] "POST /ajax/MbpRequest.do HTTP/1.1" 200 367 "-" "Dalvik/1.6.0 (Linux; U; Android 4.1.1; ARMM7K Build/JRO03H)" "119.189.56.175" 127.0.0.1:8090 0.022 0.022 


1.客户端(用户)IP地址。如:上例中的 10.1.1.1 (内网负载均衡地址)

2.访问时间。如:上例中的 [22/Aug/2014:16:48:19 +0800]

3.访问端口。如:上例中的 127.0.0.1:8080

4.响应时间。如:上例中的 0.022

5.请求时间。如:上例中的 0.022

6.用户地理位置代码(国家代码)。

7.请求的url地址(目标url地址)的host。如:上例中的 /....

8.请求方式(GET或者POST等)。如:上例中的 GET

9.请求url地址(去除host部分)。如:上例中的 /html/test.html

10.请求状态(状态码,200表示成功,404表示页面不存在,301表示永久重定向等,具体状态码可以在网上找相关文章,不再赘述)。如:上例中的 "200"

11.请求页面大小,默认为B(byte)。如:上例中的 2426

12.来源页面,即从哪个页面转到本页,专业名称叫做“referer”。如:上例中的 "http://a.com"

13.用户浏览器语言。如:上例中的 "es-ES,es;q=0.8"

14. 用户浏览器其他信息,浏览器版本、浏览器类型等。如:上例中的  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"


二、切割日志


nginx的日志文件没有rotate功能。编写每天生成一个日志,我们可以写一个nginx日志切割脚本来自动切割日志文件。

第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,Linux是靠文件描述符而不是文件名定位文件。

第二步向nginx主进程发送USR1信号。nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。工作进程立刻打开新的日志文件并关闭重名名的日志文件。然后你就可以处理旧的日志文件了。[或者重启nginx服务]。


nginx日志按每分钟自动切割脚本如下:

新建shell脚本:vi/usr/local/software/nginx/nginx_log.sh

输入一下内容:

        

        #!/bin/bash
        #设置日志文件存放目录
        LOG_HOME="/usr/local/software/nginx/logs/"

        #备分文件名称
        LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".abc.access.log

        #重命名日志文件
        mv ${LOG_HOME}/abc.access.log ${LOG_HOME}/${LOG_PATH_BAK}.log

        #向nginx主进程发信号重新打开日志 
        kill -USR1 `cat /usr/local/software/nginx/logs/nginx.pid`


创建crontab设置作业

#设置日志文件存放目录crontab -e

*/1 * * * *  sh /usr/local/software/nginx/nginx_log.sh


感谢博主,喝杯咖啡~

0 条评论

还没有人发表评论

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我