【2022】Nginx使用ngx_http_log_module模块定义日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【2022】Nginx使用ngx_http_log_module模块定义日志

ngx_http_log_module

该模块用于定义nginx日志模式

官方示例:

log_format compression '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent '
                       '"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log /spool/logs/nginx-access.log compression buffer=32k;

使用log_format定义日志格式:

Syntax: log_format name [escape=default|json|none] string ...;
Default:  log_format combined "...";
Context:  http

格式中常用变量:

remote_addr:记录客户端ip
remote_user:记录和客户端用户名
time_local:记录通用本地时间
time_lso8601:符合ISO8601标准的通用本地时间
request:记录请求的方法和协议
status:记录请求状态码
body_bytes_sent:发送给客户端的资源字节数,不包括请求头
bytes_sent:发送给客户端的总字节数
msec:日志写入时间,单位是秒,精确是毫秒
http_referer:记录从哪个链接页面访问过来的
http_user_agant:记录客户端浏览器相关信息
http_x_forwarderd_for:记录客户端真实IP地址
request_length:请求的长度
request_time:请求花费的时间

nginx变量记录在http://nginx.org/en/docs/varindex.html中,如果有更多的需求可以到这里查找。

access_log日志定义

语法:日志可以定义在http、server、location等层,一般放在server层就可以

Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default:  access_log logs/access.log combined;
Context:  http,server,location,if in location,limit_except
  • 一个例子:
log_format apm '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $bytes_sent '
                '"$http_referer" "$http_user_agent" "$gzip_ratio"';
server {
  listen 80;
  server_name gzip.yyang.com;
  root /data/gzip;
  access_log /data/gzip_accrss.log apm;
  location / {
    index index.html index.htm;   
  }
... ...
  • 用浏览器访问网站,在查看访问日志
192.168.10.1 - - [27/Jul/2022:20:48:07 +0800] "GET /log.txt HTTP/1.1" 200 7737 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" "42.95"

此为访问一次网站的访问记录。

  • 日志过滤
  • 比如访问某无关紧要的内容不想写入日志中,可以这样:
location /favicon.ico {
  access_log off;
  expires 365d;
}

error.log错误日志

一般error日志,配置的日志界别越低,产生的日志内容就越丰富,占用的存储空间也就越大,同时频繁的磁盘i/o与网络i/o也会影响nginx性能。

测试环境可以设置到debug级别;业务刚上线可以是info级别,稳定可以更新为warn级别。

  • nginx错误日志一般有一下几个级别:
    debug、info、notice、warn、error、crit、alert、emerg
  • 配置示例:默认配置
error_log /var/log/nginx/error_log warn;
关闭错误日志
error_log /dev/null;

nginx日志本地保存管理

以access日志来说,每一万个访问日志大概占用1MB的磁盘,那么当有大量的请求的时候就会占用很大的空间,处理起来也会不方便。

我们可以用linux的日志文本管理工具:logrotate管理nginx日志。

我们可以在/etc/logrotate.d目录下看一下默认的nginx管理方式

[root@centos7 logrotate.d]# cat nginx 
/var/log/nginx/*.log {    #日志路径
        daily       #处理周期
        missingok
        rotate 52     #回滚周期
        compress      #配置文件压缩
        delaycompress
        notifempty
        create 640 nginx adm
        sharedscripts
        postrotate      #文件切割执行脚本
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript
}

以上内容是每天会对nginx日志进行一次归档,然后进行压缩后保存。周期为52天,从第53天开始就会覆盖第一天的日志,确保本地日志不会无限增长。

里面的参数可以根据自己需求修改。

81cb585765544cbba976a3662b552485.png

大概就是以上截图这个样式。

使用json方式定义日志

另外nginx的日志格式可以写成json格式,方便作用于ELK日志平台,就不再这说了,大概写法为:

log_format log_json ‘{
  ' “remote_addr": "$remote_addr", '
  ' "referer": "$http_referer", '
}’;

定义多少变量就写多少!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
17天前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
27 5
图解MySQL【日志】——Redo Log
|
2天前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
150 90
|
4月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
1149 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
105 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
5月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
533 3
|
2月前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
119 7
MySQL事务日志-Undo Log工作原理分析
|
19天前
|
存储 关系型数据库 MySQL
图解MySQL【日志】——Undo Log
Undo Log(回滚日志)是 MySQL 中用于实现事务原子性和一致性的关键机制。在默认的自动提交模式下,MySQL 隐式开启事务,每条增删改语句都会记录到 Undo Log 中。其主要作用包括:
32 0
|
3月前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
268 3
|
5月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1895 14
MySQL事务日志-Redo Log工作原理分析
|
5月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
120 0