0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

玩转Nginx日志管理:高效排查问题的终极指南

马哥Linux运维 来源:马哥Linux运维 2024-12-30 13:50 次阅读

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

访问日志主要记录客户端的请求。客户端向Nginx服务器发起的每一次请求都记录在这里。客户端IP,浏览器信息,referer,请求处理时间,请求URL等都可以在访问日志中得到。当然具体要记录哪些信息,你可以通过log_format指令定义。

错误日志在Nginx中是通过error_log指令实现的。该指令记录服务器和请求处理过程中的错误信息。

Nginx中通过access_log和error_log指令配置访问日志和错误日志,通过log_format我们可以自定义日志格式。如果日志文件路径中使用了变量,我们可以通过open_log_file_cache指令来设置缓存,提升性能。

一、访问日志的配置

1.log_format

log_format用来设置日志格式,也就是日志文件中每条日志的格式,具体如下:
log_format name(格式名称) type(格式样式)

log_format main '$server_name $remote_addr - $remote_user [$time_local] "$request" '
                '$status $uptream_status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for" '
                '$ssl_protocol $ssl_cipher $upstream_addr $request_time $upstream_response_time';

$server_name:虚拟主机名称。

$remote_addr:远程客户端的IP地址。

-:空白,用一个“-”占位符替代,历史原因导致还存在。

$remote_user:远程客户端用户名称,用于记录浏览者进行身份验证时提供的名字,如登录百度的用户名scq2099yt,如果没有登录就是空白。

[$time_local]:访问的时间与时区,比如18/Jul/201200:01 +0800,时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。

$request:请求的URI和HTTP协议,这是整个PV日志记录中最有用的信息,记录服务器收到一个什么样的请求。

$status:记录请求返回的http状态码,比如成功是200。

$uptream_status:upstream状态,比如成功是200。

$body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。

$http_referer:记录从哪个页面链接访问过来的。

$http_user_agent:客户端浏览器信息

$http_x_forwarded_for:客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

$ssl_protocol:SSL协议版本,比如TLSv1。

$ssl_cipher:交换数据中的算法,比如RC4-SHA。

$upstream_addr:upstream的地址,即真正提供服务的主机地址。

$request_time:整个请求的总时间。

$upstream_response_time:请求过程中,upstream的响应时间。

需要注意的是:log_format配置必须放在http内,否则会出现如下警告信息:

nginx: [warn] the "log_format" directive may be used only on "http" level in /etc/nginx/nginx.conf:9

2.access_log

access_log指令用来指定日志文件的存放路径(包含日志文件名)、格式和缓存大小,具体如下:

access_log path(存放路径) [format(自定义日志格式名称) [buffer=size] [gzip[=level]] [flush=time] [if=condition] ]

#设置访问日志
#指定日志的写入路径为/var/logs/nginx-access.log,日志格式使用默认的combined。
access_log /var/logs/nginx-access.log
access_log logs/access.log main;
#指定日志的写入路径为/var/logs/nginx-access.log,日志格式使用默认的combined,指定日志的缓存大小为32k,日志写入前启用gzip进行压缩,压缩比使用默认值1,缓存数据有效时间为1分钟。
access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m
#关闭日志
access_log off;
#能够使用access_log指令的字段包括:http、server、location、limit_except。

path 指定日志的存放位置。

format 指定日志的格式。默认使用预定义的combined。

buffer 用来指定日志写入时的缓存大小。默认是64k。

gzip 日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1。

flush 设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空。

if 条件判断。如果指定的条件计算为0或空字符串,那么该请求不会写入日志。

二、错误日志的配置

错误日志主要记录客户端访问Nginx出错时的日志,格式不支持自定义。通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。因此,将日志好好利用,你可以得到很多有价值的信息。

错误日志的语法:

error_log path(存放路径) level(日志等级)

path含义同access_log,level表示日志等级,日志等级分为[ debug | info | notice | warn | error | crit ],从左至右,日志详细程度逐级递减,即debug最详细,crit最少,默认是error。

error_log  logs/error.log  info;

需要注意的是:error_log off并不能关闭错误日志,而是会将错误日志记录到一个文件名为off的文件中。正确的关闭错误日志记录功能的方法如下:

#表示将存储日志的路径设置为“垃圾桶”。
error_log /dev/null;

error_log可以配置在main, http, mail, stream, server, location作用域。

三、日志分割

1.编写nginx日志分割脚本

#!/bin/bash 
LOGS_PATH=/usr/local/nginx/logs 
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) 
cp ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log && >${LOGS_PATH}/access.log
cp ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log && >${LOGS_PATH}/error.log

2.设置定时任务运行脚本

$ crontab -e
0 0 * * *  /usr/local/nginx/logs/NginxLogRotate.sh

定时任务每天00:00执行脚本/usr/local/nginx/logs/NginxLogRotate.sh,实现定时自动分割Nginx日志(包括访问日志和错误日志),这样Nginx每天都会生成一个新的日志文件。

链接:https://www.cnblogs.com/myitnews/p/11536181.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 脚本
    +关注

    关注

    1

    文章

    390

    浏览量

    14879
  • nginx
    +关注

    关注

    0

    文章

    150

    浏览量

    12185

原文标题:玩转Nginx日志管理:高效排查问题的终极指南

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    「服务器」Nginx Proxy Manager申请cloudflare泛域名

    一概述NginxProxyManager是一个基于Nginx的反向代理管理工具,它提供了一个用户友好的Web界面,方便用户管理和配置Nginx反向代理。主要功能包括:简易的用户界面:通
    的头像 发表于 12-06 01:03 178次阅读
    「服务器」<b class='flag-5'>Nginx</b> Proxy Manager申请cloudflare泛域名

    Linux高频命令终极指南

    -f journalctl /usr/bin/bash 4、管理日志 # 空间使用 journalctl --disk-usage # 保留500M journalctl --vacuum-size
    的头像 发表于 12-05 16:53 201次阅读

    使用lsof实现对linux文件的误删除恢复练习

    本文记录使用lsof实现对linux文件的误删除恢复练习。题目如下: 1.确保当前nginx进程运行中 2.删除日志文件,rm -f /var/log/nginx/access.log 3.以
    的头像 发表于 11-24 11:14 197次阅读
    使用lsof实现对linux文件的误删除恢复练习

    机智云历史数据导出与排查指南

    机智云历史数据导出与排查指南在使用机智云平台进行设备管理和数据监控时,历史数据的导出和排查是常见的需求。机智云提供了开放的API接口,方便用户通过编程方式导出设备历史数据,以便进行分析
    的头像 发表于 11-21 01:01 160次阅读
    机智云历史数据导出与<b class='flag-5'>排查</b><b class='flag-5'>指南</b>

    Air201:MQTT实用示例的终极指南

    今天我们学习的是关于Air201的MQTT实用示例的终极指南
    的头像 发表于 11-07 19:30 178次阅读
    Air201:MQTT实用示例的<b class='flag-5'>终极</b><b class='flag-5'>指南</b>

    errDump错误日志上报:开启高效排查之门

    相信很多朋友都会忽视errDump错误日志上报,但不得不说的是威廉希尔官方网站 高手都知道它真的是比较重要的一环。
    的头像 发表于 11-02 11:52 334次阅读
    errDump错误<b class='flag-5'>日志</b>上报:开启<b class='flag-5'>高效</b><b class='flag-5'>排查</b>之门

    nginx日志配置方法

    access_log用来定义日志级别,日志位置。
    的头像 发表于 10-24 17:43 235次阅读

    Linux日志管理经验总结

    日志内容,合理的日志内容(日志锚点,内容格式,等)可以为应用服务的执行记录、问题排查提供最有力的帮助。
    的头像 发表于 10-24 17:36 221次阅读

    日志篇:模组日志总体介绍

    ​今天我们学习合宙模组日志总体介绍,以下进入正文。 一、本文讨论的边界 本文是对合宙 4G 模组, 以及 4G+GNSS 模组的日志功能的总体介绍。通过日志,可以对研发过程中,以及模组运行过程中
    的头像 发表于 10-24 07:16 197次阅读
    <b class='flag-5'>日志</b>篇:模组<b class='flag-5'>日志</b>总体介绍

    nginx中的正则表达式和location路径匹配指南

    前言,我这里验证的nginx-v1.23.2单机环境下的nginx中的正则表达式、location路径匹配规则和优先级。
    的头像 发表于 09-29 16:02 805次阅读
    <b class='flag-5'>nginx</b>中的正则表达式和location路径匹配<b class='flag-5'>指南</b>

    linux日志管理之journalctl命令

    journalctl 用来查询 systemd-journald 服务收集到的日志。systemd-journald 服务是 systemd init 系统提供的收集系统日志的服务。
    的头像 发表于 08-14 18:18 2610次阅读
    linux<b class='flag-5'>日志</b><b class='flag-5'>管理</b>之journalctl命令

    nginx重启命令linux步骤是什么?

      1、验证nginx配置文件是否正确   方法一:进入nginx安装目录sbin下,输入命令./nginx -t   看到如下显示nginx.conf syntax is ok
    发表于 07-11 17:13

    nginx重启命令linux步骤是什么?

      1、验证nginx配置文件是否正确   方法一:进入nginx安装目录sbin下,输入命令./nginx -t   看到如下显示nginx.conf syntax is ok
    发表于 07-10 16:40

    玩转EEPROM——全面指南

    玩转EEPROM——全面指南 EEPROM(电可擦除可编程只读存储器)是一种能够在断电后保存数据的存储器,广泛应用于存储配置参数和少量数据的场景。本文将带您深入了解EEPROM的基础知识、常见操作
    的头像 发表于 07-01 09:36 2619次阅读
    <b class='flag-5'>玩转</b>EEPROM——全面<b class='flag-5'>指南</b>

    功放进入削峰保护模式?教你如何排查问

    功放进入削峰保护模式?教你如何排查问题  功放进入削峰保护模式可能是由多种原因引起的。在排查问题之前,我们首先需要了解什么是功放的削峰保护模式。 功放的削峰保护模式是一种保护机制,旨在保护功放不受
    的头像 发表于 02-05 10:32 1181次阅读