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

    文章

    407

    浏览量

    29053
  • nginx
    +关注

    关注

    0

    文章

    180

    浏览量

    12971

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    芯片封装方式终极指南(上)

    这是一份涉及芯片封装几乎所有关键概念的终极指南,它可以帮助您全面了解芯片的封装方式以及未来互连技术的发展趋势。
    的头像 发表于 11-27 09:31 2203次阅读
    芯片封装方式<b class='flag-5'>终极</b><b class='flag-5'>指南</b>(上)

    华纳云服务器Linux系统日志集中化管理平台搭建

    在云计算时代,企业运维团队面临服务器数量激增带来的日志管理难题。本文详细解析如何基于Linux系统构建高效的云服务器日志集中化管理平台,涵盖
    的头像 发表于 09-12 14:11 353次阅读

    Jtti海外VPS微服务架构下的日志采集与分析优化方案

    导致问题排查困难、性能瓶颈难以发现,甚至影响业务稳定。为此,构建高效日志采集与分析系统成为海外VPS微服务环境中的核心任务。 在日志采集层面,常见做法是使用轻量化
    的头像 发表于 08-27 17:13 422次阅读

    Nginx在企业环境中的调优策略

    Nginx作为现代互联网架构中最重要的Web服务器和反向代理服务器,其性能调优对企业级应用的稳定性和效率至关重要。本指南将从运维实践角度出发,详细介绍Nginx在企业环境中的各种调优策略和最佳实践。
    的头像 发表于 07-14 11:13 402次阅读

    Centos7分用户记录历史命令至日志文件教程

    在企业级Linux运维中,实时记录用户操作历史是审计排查的关键步骤。本文华纳云针对CentOS7系统,提供三种高效方案实现分用户日志记录+防篡改管理。所有步骤均经过实际验证,代码段内含
    的头像 发表于 06-28 14:50 605次阅读

    Nginx配置终极指南

    Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热
    的头像 发表于 06-18 15:56 799次阅读
    <b class='flag-5'>Nginx</b>配置<b class='flag-5'>终极</b><b class='flag-5'>指南</b>

    云原生环境里Nginx的故障排查思路

    本文聚焦于云原生环境下Nginx的故障排查思路。随着云原生技术的广泛应用,Nginx作为常用的高性能Web服务器和反向代理服务器,在容器化和编排的环境中面临着新的故障场景和挑战。
    的头像 发表于 06-17 13:53 639次阅读
    云原生环境里<b class='flag-5'>Nginx</b>的故障<b class='flag-5'>排查</b>思路

    Nginx性能优化终极指南

    而worker 进程数默认为 1 。单进程最大连接数为1024。如下图(打开Nginx目录下的/conf/nginx.conf 文档),现在我们来对这两个数值进行调优
    的头像 发表于 06-16 13:44 917次阅读
    <b class='flag-5'>Nginx</b>性能优化<b class='flag-5'>终极</b><b class='flag-5'>指南</b>

    远程日志errDump调试功能实战教程:案例驱动的故障排查

    通过真实案例场景,本教程将展示如何利用远程日志errDump调试功能定位系统崩溃、性能瓶颈等问题,从日志捕获到原因分析,手把手带您体验实战中的调试流程。 本文特别分享errDump功能
    的头像 发表于 06-09 16:51 534次阅读
    远程<b class='flag-5'>日志</b>errDump调试功能实战教程:案例驱动的故障<b class='flag-5'>排查</b>!

    详解journalctl日志管理

    systemd 提供了自己的日志系统(logging system),称为 journal。使用 systemd 日志,无需额外安装日志服务(syslog)。
    的头像 发表于 06-05 17:22 1157次阅读
    详解journalctl<b class='flag-5'>日志</b><b class='flag-5'>管理</b>

    如何在CentOS系统中部署ELK日志分析系统

    日志分析已成为企业监控、故障排查和性能优化的重要组成部分。ELK(Elasticsearch、Logstash 和 Kibana)堆栈作为一种强大的开源解决方案,提供了高效日志收集、
    的头像 发表于 05-08 11:47 795次阅读
    如何在CentOS系统中部署ELK<b class='flag-5'>日志</b>分析系统

    华为 FlexusX 与 Docker+Nginx高效整合之路

    前言 华为 FlexusX 携手 Docker+Nginx高效整合,云端性能再升级!FlexusX 服务器,依托华为强大的技术实力,为 Docker 容器与 Nginx 服务器提供了完美的运行环境
    的头像 发表于 01-23 17:55 570次阅读
    华为 FlexusX 与 Docker+<b class='flag-5'>Nginx</b> 的<b class='flag-5'>高效</b>整合之路

    零死角玩转STM32F103—指南

    电子发烧友网站提供《零死角玩转STM32F103—指南者.pdf》资料免费下载
    发表于 01-20 14:18 49次下载

    分布式日志追踪ID实战

    作者:京东物流 张小龙 本文通过介绍分布式应用下各个场景的全局日志ID透传思路,以及介绍分布式日志追踪ID简单实现原理和实战效果,从而达到通过提高日志查询排查问题的效率。 背景 开发
    的头像 发表于 01-20 10:16 914次阅读

    EulerOS+Nginx+MySQL 部署 GLPI 资产管理系统

    1. 部署环境说明   本次环境选择使用华为云 Flexus 云服务器 X 实例,因为其具有高性能的计算能力、灵活的资源配置、稳定的运行环境、高效的网络访问速度、服务的高可用性保证以及多层次的数据
    的头像 发表于 01-03 09:28 1020次阅读
    EulerOS+<b class='flag-5'>Nginx</b>+MySQL 部署 GLPI 资产<b class='flag-5'>管理</b>系统