【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日志并进行多维度分析。
目录
相关文章
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
345 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
14天前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
333 3
|
2月前
|
缓存 JavaScript 安全
nodejs里面的http模块介绍和使用
综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
126 62
|
23天前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
|
24天前
|
存储 监控 安全
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1709 14
|
1月前
|
存储 监控 安全
什么是日志管理,如何进行日志管理?
日志管理是对IT系统生成的日志数据进行收集、存储、分析和处理的实践,对维护系统健康、确保安全及获取运营智能至关重要。本文介绍了日志管理的基本概念、常见挑战、工具的主要功能及选择解决方案的方法,强调了定义管理目标、日志收集与分析、警报和报告、持续改进等关键步骤,以及如何应对数据量大、安全问题、警报疲劳等挑战,最终实现日志数据的有效管理和利用。
108 0
|
2月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
43 0
|
2月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
279 0