Nginx学习之自定义访问日志

写在开始

日志的重要性不言而喻,一般来说我们开发过程中会为每个项目定义自己的日志格式以及存储路径。

就我们普通的JAVAWEB项目来说,重要的日志一般输出并存放在Tomcat的log目录下,并区分日志输出级别。用于区分,查阅并统计相关日志信息。

当然,这不是重点,重点是很多公司,对于日志的重要性似乎并不是那么重视,当然这可能跟平台本身有一定的关系。

日志配置

其实分析Nginx日志,可以得到很多有用的数据,响应耗时的url、请求时间,各个时间段的请求量,并发量。配合使用ELK日志系统可以很好的呈现系统使用情况。

一般来说,常见的懒人通用日志配置,多个项目公用一个access.log或者error.log,导致运行一段时间后日志文件特别大,几G甚至几十G的都有。

下面,主要来讲一下Nginx日志的正确配置方式。

日志输出格式:

#这个要配置在http中
log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

项目配置:

limit_req_zone $binary_remote_addr $uri zone=api_read:20m rate=50r/s;#查询
#报告
server {
        listen       80;
        server_name  report.52itstyle.com;
        index login.jsp;
        access_log     /usr/local/nginx/logs/report.52itstyle.com.access.log access;
        #关闭静态文件的日志打印
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css|js|ico)?$ {
            expires      1d;
            access_log off;
            proxy_pass      http://report;
        }
        location / {
              limit_req zone=api_read burst=5;#请求限流,设置队列
              proxy_pass      http://report;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
upstream report {
         fair;
         server  172.16.1.120:8882 weight=1  max_fails=2 fail_timeout=30s;
         server  172.16.1.120:8881 weight=1  max_fails=2 fail_timeout=30s;
}

以上配置,优化了几点:

  • 单个项目配置属于自己的日志输出路径文件
  • 排除无用的静态文件访问日志

当然还有更加优化的方案,比如Nginx日志按照日期格式输出,但是Nginx本身是不支持此功能的,只能通过sheel脚本自己进行切割。

小站:http://blog.52itstyle.com

时间: 2024-10-30 04:28:54

Nginx学习之自定义访问日志的相关文章

《ELK Stack权威指南(第2版)》一3.1 Nginx访问日志

第3章 场 景 示 例 前面虽然介绍了几十个Logstash插件的常见配置项,但是过多的选择下,如何组合使用这些插件,依然是一部分用户的难题.本章将列举一些最常见的日志场景,演示针对性的组件搭配,希望能给读者带来启发. 本章介绍的场景包括:Nginx访问日志.Nginx错误日志.Postfix日志.Ossec日志.Windows系统日志.Java日志.MySQL慢查询日志.Docker容器日志. 3.1 Nginx访问日志 访问日志处理分析绝对是使用ELK stack时最常见的需求.默认的处理方

Nginx实现浏览器可实时查看访问日志的步骤详解_nginx

一.首先查看nginx版本,我使用的是1.9.7的版本,安装目录在/application/nginx-1.9.7 [root@AnSheng ~]# /application/nginx-1.9.7/sbin/nginx -V nginx version: nginx/1.9.7 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) configure arguments: --prefix=/application/nginx-1.9.7

如何修改nginx源代码改变访问日志的时间格式

由于公司领导说要把nginx访问日志存进数据库,然后利用程序进行分析,但是nginx访问日志的时间格式是:[17/Jun/2013:14:42:13 +0400] 这种格式不能用datetime格式存进数据库,只能以字符串的格式存进数据库,但是以字符串的格式存进数据库不好按天来进程查询分析,所以需要更改nginx访问日志的时间格式,经过网上查找资料得知更改源代码可以再进行编译可以更改nginx访问日志的格式,但是公司里的程序员都是PHP的,没有人懂C语言,想来想去只有我自己改源码然后编译安装(虽

10分钟精通Nginx访问日志分析统计

简介 很多个人站长在搭建网站时使用nginx作为服务器,为了了解网站的访问情况,一般有两种手段: 使用CNZZ之类的方式,在前端页面插入js,用户访问的时候触发js,记录访问请求. 利用流计算.或离线统计分析nginx的access log,从日志中挖掘有用信息. 两种方式各有优缺点: CNZZ使用起来比较简单,各种指标定义清楚.但这种方式只能记录页面的访问请求,像ajax之类的请求是无法记录的,还有爬虫信息也不会记录. 利用流计算.离线计算引擎可以支持个性化需求,但需要搭建一套环境,并且在实时

RHCE学习<6>Apache、Nginx详解和AWStats日志分析

一.Apache服务 Apache是Apache软件基金会的一个开放源码的网页服务器,是世界使用最广泛的Web服务端之一,译为阿帕奇:Apache具有优秀的性能,稳定性,是通过加载模块来提供各种功能. 1.主配置httpd.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ServerRoot     #服务目录 ServerAdmin    #管理员邮箱 user           #运行服务的用户身份 group        

Linux定时切割Nginx访问日志并删除指定天数前的日志记录

说明: 操作系统:CentOS 站点1:bbs .111cn.net 站点2:sns .111cn.net Nginx安装路径:/usr/local/nginx Nginx配置文件路径:/usr/local/nginx/conf/nginx.conf 站点1配置文件路径:/usr/local/nginx/conf/vhost/bbs.111cn.net.conf 站点2配置文件路径:/usr/local/nginx/conf/vhost/sns.111cn.net.conf 目的: 1.对站点1

Nginx屏蔽F5心跳日志、指定IP访问日志_nginx

复制代码 代码如下: location / {  proxy_redirect off;  proxy_set_header Host $host;  proxy_set_header X-Real-IP $remote_addr;  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  proxy_pass http://mmt;  if ( $remote_addr != 192.168.0.2 ) {   access_

nginx访问日志并删除指定天数前的日志记录配置方法_nginx

说明: 操作系统:CentOS 站点1:bbs.jb51.net 站点2:sns.jb51.net Nginx安装路径:/usr/local/nginx Nginx配置文件路径:/usr/local/nginx/conf/nginx.conf 站点1配置文件路径:/usr/local/nginx/conf/vhost/bbs.jb51.net.conf 站点2配置文件路径:/usr/local/nginx/conf/vhost/sns.jb51.net.conf 目的: 1.对站点1和站点2的n

nginx访问日志,错误日志参数说明

访问日志[Access.log] '$remote_addr $remote_user [$time_local] "$request" $http_host' '$status $upstream_status $body_bytes_sent "$http_referer"' '"$http_user_agent" $ssl_protocol $ssl_cipher $upstream_addr' '$request_time $upstre