首页 > 系统相关 >Nginx的日志处理

Nginx的日志处理

时间:2024-01-19 10:36:23浏览次数:27  
标签:log nginx 处理 pid Nginx logrotate var -- 日志

Nginx的日志处理


背景

之前一直被各种咨询nginx的使用问题.
大部分都是性能, 加模块, 以及一些tcp端口等的问题.

其实这些都还好, 还有一个比较麻烦的问题时日志相关的. 
nginx的日志稍有不注意就会变的非常大. 导致不可用.
其实应该是实现logrotate的方式比较好一些. 

其实实现方式也有多种, 可以使用nginx脚本原生实现, 也可以使用logrotate , 其实也可以实现自己手写脚本. 
所以这里想总结一下. 便于以后使用. 

worker_processes  auto;
events {
    worker_connections  10250;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    gzip            on;
    keepalive_timeout  65;

    log_format main  '远程地址: $remote_addr 请求发生时间: [$time_iso8601] 状态: $status  请求总用时: $request_time 后端服务总耗时: $upstream_response_time 代理建立连接用时: $upstream_connect_time 代理发送header的用时: $upstream_header_time  后端服务器地址: $upstream_addr  链接序列号: $connection 当前链接的请求数: $connection_requests 请求体大小: $body_bytes_sent 后端服务器状态: $upstream_status 请求url: $request ' ;

    if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
      set $date $1$2$3;
        }

   access_log  logs/$date.access.log main ;
   error_log   logs/$date.error.log main ; 

    server {
        listen       80;
        server_name  localhost ;
        location /{
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:5200/;
        }
    }
}

日志清理方式

cd /opt/nginx/logs
find . -mtime +10  -iname *.log  -exec rm -rf {} \; 

添加到计划任务内, 每天凌晨两点左右执行. 

logrotate的方式

其实 nginx 内部使用 if 判断并不是好事情, 会影响一定的性能. 
所以认为比较好的方式应该是外部进行处理

logrotate的方式应该是比较优雅的方式. 
需要注意 logrotate 并不是一个后台服务
他是基于linux 的cron 计划任务进行处理的. 

如果没有安装的话 可以使用 yum 或者是 apt-get 的方式在线安装
yum install logrotate -y 方式安装.

使用注意事项

可以使用编译指定, 也可以使用 配置文件参数指定的方式来指定很多配置.

比如 access_log 和error_log的设置 可以将目录放到与logrotate一致的目录里面. 

比如pid 可以使用如下命令进行指向:

pid /var/run/nginx.pid;

然后再使用配置文件进行处理.
需要注意:
如果有多个nginx进行, 
建议设置多个不同的日志清理. 
同事建议由多个pid. 建议有多个log文件名, 进行区别, 避免出现混乱的现象. 

配置文件说明

nginx的配置文件一般为:

cat > /etc/logrotate.d/nginx <<EOF
/var/log/nginx/*.log /var/log/nginx/*/*.log{
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
      if [ -f /var/run/nginx.pid ]; then 
         kill -USR1 `cat /var/run/nginx.pid`  
      fi
    endscript
}
EOF

编译注意事项

./configure --prefix=/usr/nginx \
--sbin-path=/usr/nginx/nginx \
--conf-path=/usr/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid \
--with-http_ssl_module \
--with-pcre=../pcre-8.45 \
--with-zlib=../zlib-1.3 \
--with-openssl=../openssl-1.1.1w \
--with-stream \
--with-stream_ssl_preread_module \
--with-cc-opt='-O3' \
--with-cpu-opt=core \
--with-http_sub_module \
--add-module=../nginx-sticky

自己编写脚本

now=`date +%Y%m%d`
mv /var/log/nginx/nginx.log /var/log/nginx/nginx_${now}.log
touch /var/log/nginx/nginx.log
if [ -f /var/run/nginx.pid ]; then 
    kill -USR1 `cat /var/run/nginx.pid`  
fi

tar -czvf /var/log/nginx/nginx_${now}.tar.gz  /var/log/nginx/nginx_${now}.log  --remove-files 

find /var/log/nginx/ -mtime +10  -iname *.tar.gz  -exec rm -rf {} \; 

总结

这次仅是进行了一次预演
脚本还没有测试. 最近家里事情比较多. 
有点力不从心, 希望这次记录的脚本没有太大的问题. 

标签:log,nginx,处理,pid,Nginx,logrotate,var,--,日志
From: https://www.cnblogs.com/jinanxiaolaohu/p/17974063

相关文章

  • Nginx配置反向代理实例及Keepalived主从切换
    概述工作中经常需要帮同事配置反向代理,反向代理的使用场景一般为办公网跨网访问生产网应用资源。今天简单记录下操作步骤,以备之后查阅。NGX配置nginx的配置一般放置在/etc/nginx/nginx.conf下,可以使用whereisnginx查看nginx的具体位置[root@NGXapp01~]#whereisnginxngi......
  • Nginx基础配置详解(main、events、http、server、location)
    Nginx基础配置详解(main、events、http、server、location):https://blog.csdn.net/weixin_43834401/article/details/130562289?ops_request_misc=&request_id=&biz_id=102&utm_term=nginx%20server%20%E7%9A%84%E6%A0%B9%E7%9B%AE%E5%BD%95&utm_medium=distribute.pc_......
  • graylog日志集中管理
    referencehttps://go2docs.graylog.org/5-2/what_is_graylog/what_is_graylog.htminstallecho"vm.max_map_count=262144">>/etc/sysctl.confsysctl-pmkdir-p/data/{mongo_data,elasticsearch_data,graylog_data}cat>docker-compsoe.yml&......
  • 将日志的每天都切割成单独的一个日志文件
    要将日志文件按照日期精确分割成每天一个文件,我们需要知道日志中,日期的精确格式,并且日志应该是按时间顺序排列的。这里给出一个基于Apache/Nginx日志格式(每行开始有标准的日期和时间戳)的例子脚本。我们将使用awk和date命令配合处理:#!/bin/bash#指定日志文件夹路径LOG_DIR="/pat......
  • ELK日志系统
    ELK ELK概述#ELK简介ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kiabana三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求。●ElasticSearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类......
  • WebGL之贴图处理(基础)
    一,index.html二,shader.js/***加载图片*@paramimageName*@parampork*@paramcallback*/functionloadImage(imageName,pork,callback){ constimage=newImage(); image.src="http://127.0.0.1:"+pork+"/WebGLDemo/textures/"+......
  • 2024-1-18文档处理
    目录文档处理文档处理添加到指定元素内部的后面$(A).append(B)//把B追加到A$(A).appendTo(B)//把A追加到B添加到指定元素内部的前面$(A).prepend(B)//把B前置到A$(A).prependTo(B)//把A前置到B添加到指定元素外部的后面$(A).after(B)//把B放到A的后面$(A).insert......
  • lvs+nginx
    参考:https://www.cnblogs.com/KL2016/p/16159864.html在流量抵达的最外层通常会选择使用LVS作为负载服务器,LVS是一种基于四层负载的高性能服务器,它的内部只会对外界的数据包进行分发处理,通常一台高性能的LVS机器就能支持百万的并发连接。为了保证LVS的高可用,通常LVS会部署多......
  • springmvc怎么进行异常处理
    局部异常处理局部异常处理是指当类中1发生异常时,由方法来处理,该方法的参数类型为Exception,而Exception是所有异常的父类,所以该参数来接受异常信息步骤说明1.在controller类中定义处理异常的方法,添加注解@ExceptionHandler,方法的擦桉树类型weiexception,并通过getMessage()方......
  • ELK日志分析系统
    日志管理方案:服务器数量较少时:直接登录到目标服务器捞日志查看-->通过rsyslog或shell/python等脚本实现日志收集,并集中保存到统一的日志服务器服务器数量较多时:ELK大型的日志系统,实现日志收集、日志存储、日志检索和分析容器环境:EFKLoki+GranfanaELK组件:Logstash:收......