阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux下定时切割Nginx日志并删除指定天数前的日志记录

424次阅读
没有评论

共计 4961 个字符,预计需要花费 13 分钟才能阅读完成。

nginx 的 log 日志分为 access.log 和 error.log;其中 access.log 记录了哪些用户、哪些页面以及用户浏览器、ip 和其他的访问信息;error.log 则是记录服务器错误日志.

error.log 日志 的形式如下:
201.158.69.116 – – [03/Jan/2013:21:17:20 -0600] fwf[-] tip[-] 127.0.0.1:9000 0.007 0.007 MX Pythontab.com GET /html/test.html HTTP/1.1 “200” 2426 “http://a.com” “es-ES,es;q=0.8” “Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11”
187.171.69.177 – – [03/Jan/2013:21:17:20 -0600] fwf[-] tip[-] 127.0.0.1:9000 0.006 0.006 MX pythontab.com GET /html/test2.html HTTP/1.1 “200” 2426 “http://a.com” “es-ES,es;q=0.8” “Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11”

从上面我们可以看出几部分信息:

1. 客户端(用户)IP 地址。如:上例中的 201.158.69.116

2. 访问时间。如:上例中的 [03/Jan/2013:21:17:20 -0600]

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

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

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

6. 用户地理位置代码(国家代码)。如:上例中的 MX(墨西哥)

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

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/53 7.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11”

access.log 日志 的格式不是一成不变的,是可以自定义的。在 nginx 的 nginx.conf 配置文件找到: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”‘;

    #access_log  logs/access.log  main;

log_format 是 Nginx 的 HttpLog 模块指令,用于指定 Nginx 日志的输出格式。main 为此日志输出格式的名称,可以在下面的 access_log 指令中引用。

eg:
192.168.21.1 – – [27/Jan/2014:11:28:53 +0800] “GET /2.php HTTP/1.1” 200 133 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1707.0 Safari/537.36” “-“192.168.21.128 200 127.0.0.1:9000 0.119 0.119

$remote_addr:客户端地址 192.168.21.1

$remote_user:客户端用户 –

$time_local:时间和时区 27/Jan/2014:11:28:53 +0800

$request:请求的 URL 路径和 HTTP 协议 GET /2.php HTTP/1.1

$status:HTTP 状态 200

$body_bytes_sent:发送给客户端页面大小 133

$http_referer:页面 跳转来源 –

$http_user_agent:用户访问终端 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1707.0 Safari/537.36

$http_x_forwarded_for:HTTP 代理中,请求端真实 IP  –

$http_host:用户在浏览器中输入的 URL(IP 或着域名)地址 192.168.21.128

$upstream_status:upstream 状态 200

$upstream_addr:后端 upstream 地址及端口  127.0.0.1:9000

$request_time:页面访问总时间  0.119

$upstream_response_time:页面访问中 upstream 响应时间 0.119

如果在客户端和 Web 服务器之间增加了中间层(比如反向代理服务器),此时 Web 服务器无法直接拿到客户端的 lP,通过 $remote_addr 变量拿到的将是反向代理服务器的 IP 地址。但是,反向代理服务器在转发请求的 HTTP 头信息中,可以增加 X -Forwarded-For 信息,用以记录原有的客户端 lP 地址和原来客户端请求的服务器地址。

这时候,就要用 log_format 指令来设置日志格式,让日志记录 X -Forwarded-For 信息中的 lP 地址,即客户的真实 IP。例如,创建一个名为 mylogformat 的日志格式,再用 $http_x_forwarded_for 变量记录用户的 X -Forwarded-For lP 地址:
    log_format  mylogformat  ‘$http_x_forwarded_for – $remote_user [$time_local] “$request” ‘
                      ‘$status $body_bytes_sent “$http_referer” ‘
                      ‘”$http_user_agent” “$http_x_forwarded_for”‘;

如果不想记录日志,可以使用以下指令关闭日志记录:
 access_log off

nginx 日志文件的切割

生产环境中的服务器,由于访问日志文件增长速度非常快,日志太大会严重影响服务器效率。同时,为了方便对日志进行分析计算,须要对日志文件进行定时切割。定时切割的方式有按月切割、按天切割、按小时切割等。最常用的是按天切割。
Nginx 不支持像 Apache 一样使用 cronolog 来轮转日志,但是可以采用以下方式来实现日志文件的切割:
mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_20150519084513.log 
 kill -USR1 Nginx 主进程号 
通过 mv 命令将日志文件重命名为 /usr/local/nginx/logs/access_20150519084513.log,然后发送 kill -USR1 信号给 Nginx 的主进程号,让 Nginx 重新生成一个新的日志文件 /usr/local/nginx/logs/access.log。
如果想每天定时切割日志,还须要借助 crontab。我们可以写一个按天切割的日志,按年、月份目录存放日志的 shell 脚本:
[root@localhost logs]# vim /usr/local/nginx/sbin/cut_nginx_log.sh

#!/bin/bash
logs_path=”/usr/local/nginx/logs/”
DAYS=30
mv ${logs_path}access.log ${logs_path}access_$(date -d “yesterday” +”%Y%m%d%H%M%S”).log
#mv ${logs_path}access.log ${logs_path}access_$(date +”%Y 年 %m 月 %d 日 %H 时 %M 分 %S 秒星期 %w”).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
find ${logs_path} -name “access_*.log” -type f -mtime +$DAYS -exec rm {} \;
[root@localhost logs]# chmod +x /usr/local/nginx/sbin/cut_nginx_log.sh
[root@localhost logs]# crontab -e
0 0 * * * /usr/local/nginx/sbin/cut_nginx_log.sh   
[root@localhost logs]# service crond restart
Stopping crond:                                            [OK]
Starting crond:                                            [OK]
[root@localhost logs]# chkconfig crond on
[root@localhost logs]#

如果脚本在执行过程中出现下面错误
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed

解决办法:
[root@localhost logs]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

更多 Nginx 相关教程见以下内容

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-11/125067.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4961字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7984440
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...