GVKun编程网logo

nginx 日志文件生成自己想要的 json 格式【nginx】(nginx日志按天生成)

16

针对nginx日志文件生成自己想要的json格式【nginx】和nginx日志按天生成这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展LinuxNginx——Yum安装Nginx部署、Ngi

针对nginx 日志文件生成自己想要的 json 格式【nginx】nginx日志按天生成这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Linux Nginx——Yum安装Nginx部署、Nginx编译安装配置、Nginx日志文件、nginx 按天分割日志 nginx apache nginx php nginx rewrite、Nginx常用日志分割方法 nginx apache nginx php nginx rewrite、Nginx日志增长过快详细分析 nginx apache nginx php nginx rewrite等相关知识,希望可以帮助到你。

本文目录一览:

nginx 日志文件生成自己想要的 json 格式【nginx】(nginx日志按天生成)

nginx 日志文件生成自己想要的 json 格式【nginx】(nginx日志按天生成)

一,前言

1,进入 nginx 的配置文件

cd /etc/nginx   不同机器可能会有不同

2,nginx 的默认日志配置文件

 

3,注释掉,切换为自己需要的 json 格式(1.11.8 版本开始支持)

json_log escape=json ''{"realip":"$remote_addr","@timestamp":"$time_iso8601","host":"$http_host","request":"$request","req_body":"$request_body","status":"$status","size":$body_bytes_sent,"ua":"$http_user_agent","cookie":"$http_cookie","req_time":"$request_time","uri":"$uri","referer":"$http_referer","xff":"$http_x_forwarded_for","ups_status":"$upstream_status","ups_addr":"$upstream_addr","ups_time":"$upstream_response_time"}'';

一,分析

1,查看 nginx 的日志写入路径

2,进入对应目录

cd /data2/logs/nginx/aitefudao/

3,用 cat 命令或者 tac 命令分析 nginx 日志

tac access.log | head -n 10

Linux Nginx——Yum安装Nginx部署、Nginx编译安装配置、Nginx日志文件

Linux Nginx——Yum安装Nginx部署、Nginx编译安装配置、Nginx日志文件

  • Nginx部署-Yum安装

Nginx的官方网站:http://www.Nginx.org/

Nginx版本类型
Mainline version: 开发版
Stable version: 稳定版,生产环境上建议版本
Legacy versions: 老版本稳定版

Yum安装Nginx

配置Yum源的官网 http://Nginx.org/en/linux_packages.html

配置Nginx的Yum源

安装:
首次安装Nginx,需要设置Nginx软件包存储库。 之后,可以从存储库安装和更新Nginx。
RHEL/CENTOS

Install the prerequisites 安装先决条件

# sudo yum install yum-utils -y[Nginx-stable]name=Nginx stable repo
baseurl=http://Nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://Nginx.org/keys/Nginx_signing.key
module_hotfixes=true[Nginx-mainline]name=Nginx mainline repo
baseurl=http://Nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://Nginx.org/keys/Nginx_signing.key
module_hotfixes=true

yum install Nginx -y

这里我们用稳定版本

[root@Nginx-server yum.repos.d]#  yum install -y Nginx[root@Nginx-server yum.repos.d]#  Nginx -V    格式化打印[root@Nginx-server yum.repos.d]#  Nginx -v  查看Nginx版本

关防火墙和Selinux:

[root@Nginx-server ~]# setenforce 0[root@Nginx-server ~]# systemctl stop firewalld[root@Nginx-server ~]# systemctl disable firewalld

启动、设置开机自启

[root@Nginx-server ~]# systemctl start Nginx [root@Nginx-server ~]# systemctl enable Nginx

打开浏览器输入IP访问:如10.8.175.1


  • Nginx 编译安装、配置
yum -y install gcc gcc-c++   
安装编译环境

yum install -y pcre pcre-devel   
安装pcre软件包(使Nginx支持http rewrite模块)

yum install -y openssl openssl-devel     
安装openssl-devel(使Nginx支持ssl)

yum install -y zlib zlib-devel
安装zlib

useradd Nginx
创建用户Nginxpasswd Nginx
设置密码

[root@localhost ~]# wget http://Nginx.org/download/Nginx-1.19.10.tar.gz[root@localhost ~]# tar xzf Nginx-1.19.10.tar.gz -C /usr/local/[root@localhost ~]# cd /usr/local/Nginx-1.19.10/[root@localhost Nginx-1.19.10]# ./configure --prefix=/usr/local/Nginx --group=Nginx --user=Nginx --sbin-path=/usr/local/Nginx/sbin/Nginx --conf-path=/etc/Nginx/Nginx.conf --error-log-path=/var/log/Nginx/error.log --http-log-path=/var/log/Nginx/access.log --http-client-body-temp-path=/tmp/Nginx/client_body --http-proxy-temp-path=/tmp/Nginx/proxy --http-fastcgi-temp-path=/tmp/Nginx/fastcgi --pid-path=/var/run/Nginx.pid --lock-path=/var/lock/Nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module --with-stream[root@localhost Nginx-1.19.10]# make && make install下载-解压-配置- 编译安装

Nginx 编译参数

[root@localhost ~]#/usr/local/Nginx/sbin/Nginx -V查看Nginx安装模块

  • 模块参数具体功能
--with-cc-opt='-g -O2 -fPIE -fstack-protector     
设置额外的参数将被添加到CFLAGS变量。(FreeBSD或者ubuntu使用)

--param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,Now' 
 --prefix=/usr/local/Nginx                        指向安装目录
--conf-path=/etc/Nginx/Nginx.conf                指定配置文件
--http-log-path=/var/log/Nginx/access.log        指定访问日志
--error-log-path=/var/log/Nginx/error.log        指定错误日志
--lock-path=/var/lock/Nginx.lock                 指定lock文件
--pid-path=/run/Nginx.pid                        指定pid文件
   
--http-client-body-temp-path=/var/lib/Nginx/body    
设定http客户端请求临时文件路径

--http-fastcgi-temp-path=/var/lib/Nginx/fastcgi     
   设定http fastcgi临时文件路径
   
--http-proxy-temp-path=/var/lib/Nginx/proxy         
设定http代理临时文件路径

--http-scgi-temp-path=/var/lib/Nginx/scgi           
设定http scgi临时文件路径

--http-uwsgi-temp-path=/var/lib/Nginx/uwsgi         
设定http uwsgi临时文件路径
   
--with-debug                         启用debug日志
--with-pcre-jit                      编译PCRE包含“just-in-time compilation”
--with-ipv6                          启用ipv6支持
--with-http_ssl_module               启用ssl支持
--with-http_stub_status_module       获取Nginx自上次启动以来的状态
--with-http_realip_module            允许从请求标头更改客户端的IP地址值,默认为关
--with-http_auth_request_module      实现基于一个子请求的结果的客户端授权

--with-http_addition_module          
作为一个输出过滤器,支持不完全缓冲,分部分响应请求

--with-http_dav_module                
增加PUT,DELETE,MKCOL:创建集合,copY和MOVE方法 默认关闭,需编译开启

--with-http_geoip_module               
使用预编译的maxmind数据库解析客户端IP地址,得到变量值

--with-http_gunzip_module              
它为不支持“gzip”编码方法的客户端解压具有“content-encoding: gzip”头的响应。

--with-http_gzip_static_module         在线实时压缩输出数据流
--with-http_image_filter_module        传输JPEG/GIF/PNG 图片的一个过滤器)
--with-http_spdy_module                SPDY可以缩短网页的加载时间
--with-http_sub_module                允许用一些其他文本替换Nginx响应中的一些文本
--with-http_xslt_module               过滤转换XML请求
--with-mail                           启用POP3/IMAP4/SMTP代理模块支持
--with-mail_ssl_module                启用ngx_mail_ssl_module支持启用外部模块支持

修改配置文件、全局参数设置

vim /etc/Nginx/Nginx.conf

user  Nginx;                  #指定用户worker_processes  4;          #设置Nginx启动进程的数量,一般设置成与逻辑cpu数量相同error_log  logs/error.log;    #指定错误日志worker_rlimit_nofile 10240;   #设置一个Nginx进程能打开的最大文件数pid        /var/run/Nginx.pid;events {
    worker_connections  1024; #设置一个进程的最大并发连接数}http #服务模块设置http {
    include      mime.types;
    default_type  application/octet-stream;
    log_format  main  'remote_addr - remote_user [time_local] "request" '
                      'status body_bytes_sent "$http_referer" '
                      '"http_user_agent" "http_x_forwarded_for"'; 
    access_log  /var/log/Nginx/access.log  main;    #设置访问日志的位置和格式 
    sendfile          on; #是否调用sendfile函数输出文件,一般设置为on,若Nginx是用来进行磁盘IO负载应用时,可以设置为off,降低系统负载
    gzip              on;      #是否开启gzip压缩,将注释去掉开启 
    keepalive_timeout  65;     #设置长连接的超时时间# 虚拟服务器的相关设置server { 
        listen      80;        #设置监听的端口 
        server_name  localhost;        #设置绑定的主机名、域名或ip地址 #        charset koi8-r;        #设置编码字符 
        charset utf-8;
        location / { 
            root  /var/www/Nginx;           #设置服务器默认网站的根目录位置,需要手动创建
            index  index.html index.htm;    #设置默认打开的文档 
        } 
        error_page  500 502 503 504  /50x.html; #设置错误信息返回页面 
        location = /50x.html { 
            root  html;        #这里的绝对位置是/usr/local/Nginx/html
        }
    }}

Nginx.conf配置文件组成:分别为:全局块、events块、http块三部份。

http模块包含:http全局模块、多个server模块

server块包含:server全局模块、多个location模块。

在统一配置块中嵌套的配置快,各个模块之间不存在次序关系。

  • 检测Nginx配置文件是否正确
[root@localhost ~]# /usr/local/Nginx/sbin/Nginx -t[root@localhost ~]# mkdir -p /tmp/Nginx[root@localhost ~]# mkdir /usr/local/Nginx/logs

  • 启动Nginx
[root@localhost ~]# /usr/local/Nginx/sbin/Nginx

  • 通过 Nginx 命令控制 Nginx 服务

a、常用命令

Nginx -c /path/Nginx.conf           # 以特定目录下的配置文件启动Nginx:Nginx -s reload                     # 修改配置后重新加载生效Nginx -s stop                       # 快速停止NginxNginx                               # 快速启动NginxNginx -t                            # 测试当前配置文件是否正确Nginx -t -c /path/to/Nginx.conf     # 测试特定的Nginx配置文件是否正确

b、分配权限

chmod +x /etc/init.d/Nginx

c、重新加载系统启动文件

systemctl daemon-reload

d、启动并设置开机自启

systemctl start Nginx

  • Nginx 日志文件详解

Nginx 日志文件分为 log_format 和 access_log 两部分
 log_format 定义记录的格式,其语法格式为
 log_format 样式名称 样式详情

配置文件中默认有

log_format  main  'remote_addr - remote_user [time_local] "request" '
                  'status body_bytes_sent "$http_referer" '
                  '"http_user_agent" "http_x_forwarded_for"';

在这里插入图片描述

nginx 按天分割日志 nginx apache nginx php nginx rewrite

nginx 按天分割日志 nginx apache nginx php nginx rewrite

nginx默认的日志是统一写到 安装目录的log下的 ,访问日志是 access.log,错误日志是error.log
而且并没有提供一个可配置的地方,对于生产环境,日志都集中在一块儿,没过几天日志文件就可以大到几个G,只能是使用操作系统的定时任务,自己写脚本定时执行,将log日志进行切割。

参考网上前辈的文章,自己写了一个脚本出来。代码如下:

<span>#定义日志的源路径,即nginx的默认log路径</span><span>source</span>_log_path=/usr/local/nginx/logs
<span>#定义保存后的路径位置</span>
dest_log_path=/opt/logs/nginx
<span>#定义log文件的名称,以每天为单位,定义日志的前缀为昨天的日期,因为定时任务拟在凌晨零点后执行。</span>
yesterday=$(date <span>-d</span><span>"yesterday"</span> +%Y%m%d) 
<span>#echo ${yesterday}</span><span>#rm -rf ${dest_log_path}/*</span><span>#指定移动</span>
mv <span>${source_log_path}</span>/access.log <span>${dest_log_path}</span>/nginx_access_<span>${yesterday}</span>.log
mv <span>${source_log_path}</span>/error.log  <span>${dest_log_path}</span>/nginx_error_<span>${yesterday}</span>.log 
<span>#移动后,重新向nginx的主进程发送信息,令nginx的主进程将日志重新打开。否则日志将会继续写到mv后的路径中</span>
kill -USR1 `ps axu | grep <span>"nginx: master process"</span> | grep -v grep | awk <span>''{print $2}''</span>`
<span>cd</span><span>${dest_log_path}</span><span>#进入日志的路径,查询前天前的日志,然后将其删掉。</span>
find . -mtime +<span>7</span> -name <span>"*20[1-9][3-9]*"</span> |xargs rm -rf
<span>exit</span><span>0</span>
登录后复制

最后,将该代码保存到一个sh文件,并将该文件加入到系统的定时任务中。

<span>#定时任务的文件在 /etc/crontab 下,vi此文件,设置为每天 零点 执行。</span>
0 0 <span>* *</span> * root /bin/sh /opt/sampleEnvironment/commands/nginxlogperday.sh
登录后复制

代码其实并不复杂。但是在写的时候还是花费了太多时间,
遇到的问题是:在定义完变量后,比如source_log_path 执行该脚本,即会报错 command not found
到最后才发现, 我在定义 source_log_path 的时候 是这样写的 :

source_log_path = <span>/usr/local</span><span>/nginx/log</span>
登录后复制

在等号两边均敲了一个空格,这样就导致了上面的错误。在定义日期变量的时候,也是如此。

平时使用vi命令的时候,仅仅就停留在入门的阶段,几乎不会几个命令。最多就知道“dd” 。
这次需要编辑的时候,才发现多么费劲。这次使用的比较多的命令是:

删除一行: dd
移动到行末尾: $
移动到行末尾并编辑: A (或者shift + a)
移动到文档的末尾: shift + g

'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了nginx 按天分割日志,包括了nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Nginx常用日志分割方法 nginx apache nginx php nginx rewrite

Nginx常用日志分割方法 nginx apache nginx php nginx rewrite

方式一:
nginx cronolog日志分割配置文档,根据下面方法,每分钟分割一次NGINX访问日志。

<span>1</span>.nginx日志配置
 access_log access_log /data/access_log_pipe main;
<span>2</span>.先创建一个命名管道
mkfifo /www/<span>log</span>/access_log_pipe
<span>3</span>.配置cronolog:
nohup cat /data/access_log_pipe | <span>/usr/local</span><span>/sbin/cronolog</span> /data/<span>log</span>/domain.access<span>_</span><span>%Y</span><span>%m</span><span>%d</span><span>%H</span><span>%M</span>.<span>log</span> &amp;
<span>4</span>.启动Nginx
/usr/<span>local</span>/nginx/sbin/nginx

注意:
cronolog必须在nginx启动前启动
没有安装cronolog的话,需要先安装
wget http:<span>//cronolog</span>.org/download/cronolog-<span>1.6</span>.<span>2</span>.tar.gz
tar zxvf cronolog-<span>1.6</span>.<span>2</span>.tar.gz
cd cronolog-<span>1.6</span>.<span>2</span>
.<span>/configure
 make
make install
方式二:

定时任务中每小时添加定时任务,执行一下脚本,可以实现小时日志分割
log_dir="/var</span><span>/log/nginx</span><span>"
date_dir=`date +<span>%Y</span>/<span>%m</span>/<span>%d</span>/<span>%H</span>`
/bin/mkdir -p <span>${log_dir}</span>/<span>${date_dir}</span> &gt; /dev/null 2&gt;&amp;1
/bin/mv <span>${log_dir}</span>/access.log   <span>${log_dir}</span>/<span>${date_dir}</span>/access.log
kill -USR1 `cat /opt/nginx/logs/nginx.pid`

方式三:
使用logrotate做nginx日志轮询
logrotate看名字就知道是专门做日志轮询的,只把任务配置放在/etc/logrotate.d/下,任务就会自动完成,而且无需安装,系统自带,比较推荐使用.
vi /etc/logrotate.d/nginx  

    /usr/local/nginx/logs/www.willko.cn.log /usr/local/nginx/logs/nginx_error.log {
    notifempty
    daily
    sharedscripts
    postrotate
    /bin/kill -USR1 `/bin/cat /usr/local/nginx/nginx.pid`
    endscript
    } 

多个日志以空格分开,
notifempty 如果日志为空则不做轮询
daily 每天执行一次
postrotate 日志轮询后执行的脚本
这样,每天都会自动轮询,生成nginx.log.1-n
 后话:

用Jmeter对方法一进行了测试,新建线程组:线程数200,循环150,新建http请求,请求nginx上的图片,请求30000次,失败326次,后台形成5个文件,行数如下:

   2868 access_201112182030.log
   7777 access_201112182031.log
   7626 access_201112182032.log
   7873 access_201112182033.log
   3530 access_201112182034.log
  29674 total

并没有因为切分文件而丢失日志。</span>
登录后复制

以上就介绍了Nginx常用日志分割方法,包括了nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Nginx日志增长过快详细分析 nginx apache nginx php nginx rewrite

Nginx日志增长过快详细分析 nginx apache nginx php nginx rewrite

今天关于nginx 日志文件生成自己想要的 json 格式【nginx】nginx日志按天生成的讲解已经结束,谢谢您的阅读,如果想了解更多关于Linux Nginx——Yum安装Nginx部署、Nginx编译安装配置、Nginx日志文件、nginx 按天分割日志 nginx apache nginx php nginx rewrite、Nginx常用日志分割方法 nginx apache nginx php nginx rewrite、Nginx日志增长过快详细分析 nginx apache nginx php nginx rewrite的相关知识,请在本站搜索。

本文标签: