nginx日志切割

日志切割是线上很常见的操作,能够控制单个日志文件的大小,便于对日志进行管理

  1. 针对nginx的访客日志进行切割

    进入nginx中的logs目录 access.log error.log nginx.pid

  2. 给当前日志文件重命名

    mv access.log “access.log_$(date +”%Y-%m-%d”)”

  3. 发信号给nginx 主进程,给他发送一个重新打开的信号,让nginx生成新的日志文件

    nginx -s reopen #这个命令等同于 kill -USR1 ‘cat nginx.pid’

  4. 注意以上的nginx重命名日志切割链,不要着急立即对文件修改,而是要注意等待几秒,因为nginx的工作模式特点,master下发指令给worker去执行,当业务量很大的时候,这个修改操作可能会存在延迟

  5. 在生产环境下,日志切割主要是以定时任务的形式来操作

    编写一个定时日志切割的脚本

    vim cut_nginx_log.sh

    !/bin/bash

    logspath=’/opt/tbnginx233/logs/‘ mkdir -p ${logs_path}${date -d “yesterday” + “%Y”)/$(date -d “yesterday” + “%m”) mv ${logs_path}access.log ${logs_path}${date -d “yesterday” + “%Y”)/$(date -d “yesterday” + “%m”)/access$(date -d “yesterday” + “%Y-%m-%d”.log kill -USR1 ‘cat /opt/tbnginx233/logs/nginx.pid’

    crontab -e #打开定时任务

    写入执行该脚本的时间,记得要写绝对路径

    0 0 * /bin/bash /myscripts/cut_nginx_log.sh

nginx访客日志

日志对于程序员是很重要的,可以用于问题排错,记录程序运行时的状态,一个好的日志配置能够给与运维人员,开发人员精准的问题定位功能
nginx开启日志功能只需要在nginx.conf里面找到log_format参数,定义日志的格式,以及定义日志的存储位置,以及日志的格式,路径,缓存大小等等

  1. nginx.conf配置日志功能的代码如下,修改为如下即可:(也可以定义在全局配置中)

    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” ‘; access_log logs/cc_access.log main;

    access_log “pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G” main;

    server { … } }

  2. 针对某虚拟主机配置对应的访客信息管理

    server { listen 80; sever_name learn_nginx_cc.com;

    access_log logs/learn_nginx_cc.log

    location / { root /www/learn_nginx_cc; index index.html; } }

日志格式解析

‘ $remote_addr - $remote_user [$time_local] “$request” ‘ ‘ $status $body_bytes_sent “$http_referer” ‘ ‘ “$http_user_agent” “$http_x_forwarded_for” ‘;

192.168.178.1 - - [06/May/2020:14:05:24 +0800] “GET /hehe.txt HTTP/1.1” 404 585 “-“ “curl/7.64.1” “_”

$remote_addr:记录访客的客户端ip地址
$remote_user:记录远程客户端的访问用户名
$time_local:记录访问的时间和地区信息
$request:记录用户的http请求的首行信息
$status:记录用户的http请求状态,也就是请求发出之后,响应的状态码
$body_bytes_sent:记录服务器发给客户端的响应体数据字节大小
$http_referer:记录本次请求是从哪个链接过来的,可以根据refer信息来进行防盗链信息
$http_user_agent:记录客户端的访问信息,如浏览器信息,手机浏览器信息
$http_x_forwarded_for:捕捉藏在代理服务器后面的真实客户端ip信息

Nginx错误日志

nginx能够把自身运行时故障的信息,也写入到对应的日志文件中,称之为error_log
对于错误信息的调试,也是运维人员维护nginx的一个重要的手段
nginx想要使用error_log就得打开nginx.conf,找到关键字参数 error_log

  • 放在http{}时针对所有的server{}虚拟主机生效
  • 也可以单独的写在虚拟主机中中,单独记录一个虚拟主机的错误日志

    user www; http { error_log logs/cc_error.log; server { error_log logs/s1_error.log … } server { error_log logs/s2_error.log … } }

错误日志的语法
error_log file level;

日志级别

(级别越来越严重,级别越低,记录的日志越详细)
debug - info - notice - warn - error - crit - alert - emerg

针对虚拟主机添加错误日志的部分代码

server { listen 80 server_name learn_nginx.com charset utf-8 error_log logs/learn_nginx_error.log location / { root /www/learn_nginx; … } }