Nginx日志配置经验分享
Nginx 日志
Nginx 日志分为两种,一种是错误日志(error log),记录 Nginx 运行过程中遇到的异常,一种是访问日志(access log),记录的是 WEB 服务被用户访问时留下的一些信息。例如哪些文件被访问过、Nginx 如何响应、用户使用的 IP 地址等等。
1 开启访问日志
要开启访问日志,在 nginx.conf 文件中的 http 或 server 字段添加以下参数:
access_log log_file log_format;
其中 log_file 为日志要保存的路径,log_format 为日志记录格式。记录格式可以采用默认,也可以在 http 字段中自定义:
log_format format_name 'set_of_variables_to_define_format';
其中 format_name 表示这个日志格式的名称,在引用时需要用到。set_of_variables_to_define_format 表示此日志格式所记录的信息及顺序。
访问日志格式详解可见此官方文档。
小提示:
• server 字段如果未设置访问日志,则该 server 访问日志会继承 http 字段中的设置。
• server 字段中的 location 字段也可单独设置访问日志。
• 每个字段中都可以设置多个不同格式的日志。
2 开启错误日志
要开启错误日志,在 nginx.conf 文件中 http 字段添加以下参数:
error_log log_file log_level;
其中 log_file 为日志要保存的路径,log_level 为要记录的日志级别,设置某个级别后,该级别及以上级别的错误日志都将被记录。
错误日志共分为 8 个级别,从高到低分别是:
• emerg: 紧急,可能导致服务不可用。
• alert: 告警,严重问题告警。
• crit: 严重,需要关注的严重问题。
• error: 错误,发生错误,例如某个页面处理错误。
• warn: 警示,可能需要关注的问题。
• notice: 通知,简单的通知日志,大多数情况下可以忽略。
• info: 信息,运行中的普通信息。
• debug: 调试,用于分析错误的调试信息。
3 日志按天或按月存放
通常配置情况下,Nginx 所有访问日志存放在同一个 log 文件中,时间一长,日志文件将变得巨大,导致备份、分析都不方便。因此需要将日志按一定时间间隔分开存放,例如每天、每月或其它时间间隔。要实现这个目的主要由两种方式:
• 一种是在 nginx.conf 配置文件中进行配置
• 一种是使用系统定时任务脚本定期对日志进行分割
3.1 在 nginx.conf 中配置日志存放规则
在这里,我们需要用到 map 指令,map 指令是由 ngx_http_map_module 模块提供的,默认情况下安装 nginx 都会安装该模块。map 指令只能位于 nginx.conf 的 http 字段内。具体代码如下:
http {
......
......#设置日志按日期或月份滚动
map $time_iso8601 $year {
default 'date';
'~^(?<yyyy>\d{4})-' $yyyy;
}map $time_iso8601 $month {
default 'not';
'~^\d{4}-(?<mm>\d{2})-' $mm;
}map $time_iso8601 $day {
default 'found';
'~^\d{4}-\d{2}-(?<dd>\d{2})' $dd;
}#日志按年-月-日名称格式存放
#map $time_iso8601 $logfile_date {
# default 'date-not-found';
# '~^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})' $year-$month-$day;
#}#日志按年-月名称格式存放
map $time_iso8601 $logfile_month {
default 'date-not-found';
'~^(?<year>\d{4})-(?<month>\d{2})' $year-$month;
}
}
使用 map 定义好变量之后,即可在配置访问日志记录时使用该变量:
access_log logs/$logfile_month.access.log;
access_log 指令可以在 http 字段内,也可以在 server 字段内。
配置好后,如果遇到日志文件并没有生成的问题,则可能是 logs 目录权限导致,需要赋予 logs 目录 nginx 启动用户的权限(这是在日志路径中使用变量的一些限制,参考官方:Nginx 日志模块说明)。假设 nginx 以 www 组的 www 用户启动,则:
chown -R www:www logs/
最终生成的日志效果如下:
关于在日志路径中使用变量的限制,包括:
日志文件路径可以包含变量 (0.7.6+),但这类设置存在以下限制:
• 启动 Nginx worker 进程的用户必须拥有日志目录的写权限;
• 写缓存将不起作用;
• 每条日志写入都会造成日志文件的打开和关闭。然而,由于频繁读写的文件的文件描述符可能会被存储与缓存中,根据 open_log_file_cache 指令的时间参数设置,日志可能继续写入到旧文件中;
• 每条日志写入时都会检测站点根目录是否存在,如果不存在则日志不会创建,因此最好在 access_log 设置的同级别指令段中指定站点根目录,例如:
server {
root /spool/vhost/data/$host;
access_log /spool/vhost/logs/$host;
...
也有使用 if 判断语句来定义上面的变量,但据说可能引发问题,建议使用 map 指令。说法来源:
StackOverFlow https://stackoverflow.com/questions/53196478/include-date-in-nginx-log-file-name
Nginx 官网 https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
3.2 通过定时脚本分割日志
创建日志分割脚本 splitLog.sh :
# /bin/bash
# 日志保存位置
base_path='/usr/local/nginx/logs/'
# 获取当前年信息和月信息
log_path=$(date -d yesterday +"%Y%m")
# 获取昨天的日信息
day=$(date -d yesterday +"%d")
# 按年月创建文件夹
mkdir -p $base_path/$log_path
# 备份昨天的日志到当月的文件夹
mv $base_path/access.log $base_path/$log_path/access_$day.log
# 输出备份日志文件名
# echo $base_path/$log_path/access_$day.log
# 通过Nginx信号量控制重读日志
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
添加Linux定时任务:
crontab -e
# 每天0时1分进行日志分割(建议在02-04点之间,系统负载小)
01 00 * * * /usr/local/nginx/logs/splitLog.sh
重启Linux定时任务:
crond restart
如果提示以下错误 crond: can't lock /var/run/crond.pid, otherpid may be 4141:资源暂时不可用,删除 /var/run/crond.pid 重新执行命令即可。
作者:李凌
本文转自【中国信创服务社区】
Nginx日志配置经验分享相关推荐
- 渗透测试技术分享——nginx日志配置
Nginx 日志配置 0x00 前言 日志使用用来进行数据统计.问题排错的重要手段.本文主要介绍 nginx 日志相关的配置如 access_log.log_format.log_not_found. ...
- 九爷带你了解 nginx 日志配置指令详解
nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_ ...
- Nginx 日志配置实践
前言 Nginx日志对于统计.系统服务排错很有用. Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志).通过访问日志我们可以得到用户的IP地址.浏览器的信息, ...
- Nginx日志配置、错误界面配置、流量控制 第九天
目录 nginx日志配置 nginx日志介绍 access.log error.log open_log_file_cache rewrite.log nginx的日志轮转 nginx错误界面配置 n ...
- Nginx 日志配置
1.Nginx 日志介绍 Nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的支持,日志格式通过 log_for ...
- Nginx 日志配置、日志切割
Nginx 日志配置.日志切割 设置 access.log 语法 log_format自定义格式 设置error_log 语法 日志切割 前置文章:Nginx 的配置文件 nginx.conf Ngi ...
- 【Nginx 日志配置】【访问日志log_format】【错误日志error_log 指令】【Nginx的日志轮转】
文章目录 Nginx 日志配置 `log_format` 指令中常用的一些变量: 访问日志 案例 可以配置段:`http`, `stream`, `server`, `location`作用域. er ...
- 运维配置:Nginx日志配置详解
Nginx日志配置详解 前言 Nginx日志对于统计.系统服务排错很有用.Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志).通过访问日志我们可以得到用户的I ...
- nginx 日志配置_Nginx记录日志到systemd journal
简介 今天要给大家分享的事如何配置nginx记录access log和error log到systemd journal日志中去 需求 在前面的文章我们讲道,我们可以不需要容器化,直接部署nginx到 ...
最新文章
- 【百战GAN】新手如何开始你的第一个生成对抗网络(GAN)任务
- verilog always语法_Verilog初级教程(20)Verilog中的`ifdef 条件编译语句
- How-to-quick-getting-started-for-Frontend
- (18)FPGA面试技能提升篇(CACHE、MMU、DMA)
- 仿ios桌面vivo_流畅就是跑分高?vivo选择说不,用这款杀器终结国产手机内卷
- 程序员在家办公没显示屏,我被领导鄙视了
- 几个清华和北邮学霸公众号,值得学习
- CentOS 5.11下Oracle 11G R2 Dataguard搭建
- dex2jar源码解析之总体介绍(一)
- MAXScript语法及命令
- TF-IDF算法原理和公式
- 论文主题、引用量、中国机构 华人学者,KDD 2020 关键数据抢先看
- Windows 技术篇-修改hosts添加域名解析实例演示,设置域名指定ip方法
- L1-022 奇偶分家(c)
- 关于一个大学生如何利用编程赚钱
- Windows 和 android 平台Boost编译方法
- 【报告分享】2021直播电商年度数据报告-抖音快手-果集数据(附下载)
- 2095: [Poi2010]Bridges 二分+混合图欧拉回路(网络流)
- 优思学院:从零基础成为六西格玛黑带?
- Springboot 一文搞懂AOP面向切面编程