针对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日志按天生成)
- 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日志按天生成)
一,前言
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日志文件
- 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
而且并没有提供一个可配置的地方,对于生产环境,日志都集中在一块儿,没过几天日志文件就可以大到几个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
以上就介绍了nginx 按天分割日志,包括了nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
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> & <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> > /dev/null 2>&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日志增长过快详细分析 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的相关知识,请在本站搜索。
本文标签: