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 {} \;

总结

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

Nginx的日志处理的更多相关文章

  1. Nginx 访问日志轮询切割

    Nginx 访问日志轮询切割脚本 #!/bin/sh Dateformat=`date +%Y%m%d` Basedir="/application/nginx" Nginxlog ...

  2. 按日期切割nginx访问日志--及性能优化

    先谈下我们需求,一个比较大的nginx访问日志,根据访问日期切割日志,保存在/tmp目录下. 测试机器为腾讯云机子,单核1G内存.测试日志大小80M. 不使用多线程版: #!/usr/bin/env ...

  3. 一、基于hadoop的nginx访问日志分析---解析日志篇

    前一阵子,搭建了ELK日志分析平台,用着挺爽的,再也不用给开发拉各种日志,节省了很多时间. 这篇博文是介绍用python代码实现日志分析的,用MRJob实现hadoop上的mapreduce,可以直接 ...

  4. log_format为Nginx设置日志格式

    nginx服务器日志相关指令主要有两条,一条是log_format,用来设置日志格式, 另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,一般在nginx的配置文件中日记配置 ...

  5. Nginx常用日志分割方法

    方式一: nginx cronolog日志分割配置文档,根据下面方法,每分钟分割一次NGINX访问日志. 1.nginx日志配置 access_log /var/log/nginx/access.lo ...

  6. elk收集分析nginx access日志

    elk收集分析nginx access日志 首先elk的搭建按照这篇文章使用elk+redis搭建nginx日志分析平台说的,使用redis的push和pop做队列,然后有个logstash_inde ...

  7. nginx实现日志按天切割

    背景 nginx的日志文件没有rotate功能.一段时间过后,日志将越发臃肿,一个accesslog很快就突破1G,因此有必要通过脚本实现按天切割日志. 解决思路 1  重命名日志文件,如更改为acc ...

  8. nginx查看日志

    原文:nginx日志格式及自定义日志配置 nginx的log日志分为access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器.ip和其他的访问信息 ...

  9. 场景2 nginx 错误日志格式:

    nginx 错误日志格式: 2016/09/01 11:23:36 [error] 28388#0: *14549 open() "/var/www/zjzc-web-frontEnd/im ...

  10. Python正则表达式,统计分析nginx访问日志

    目标: 1.正则表达式 2.oop编程,统计nginx访问日志中不同IP地址出现的次数并排序 1.正则表达式 #!/usr/bin/env python # -*- coding: utf-8 -*- ...

随机推荐

  1. Windows和Linux下通过go实现自删除

    自删除在攻防中都挺常见的,自写远控通常也有需要.可是在度娘里搜不到什么办法,于是就查查Windows api学习记录一回. linux 先获得当前程序的文件名,再使用syscall这个包中的Unlin ...

  2. Python——第二章:基础数据类型

    下面是需要掌握的知识点: int, float, bool  (5星)str   (5星)list    (5星)tuple   (2星)set     (1星)dict    (5星)bytes   ...

  3. Windows手工入侵排查思路

    文章来源公众号:Bypass Windows系统被入侵后,通常会导致系统资源占用过高.异常端口和进程.可疑的账号或文件等,给业务系统带来不稳定等诸多问题.一些病毒木马会随着计算机启动而启动并获取一定的 ...

  4. libGDX游戏开发之打包游戏(十二)

    libGDX游戏开发之打包游戏(十二) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goog ...

  5. 全网最全的华为ensp数通设备命令全集

    [命令] display history-command [视图]所有视图 [参数]无 [描述] display history-command 命令用来显示当 前用户曾键入的最后 10 条命令.用户 ...

  6. 3、Container容器组件

    Container容器组件 代码 import 'package:flutter/material.dart'; void main() {   runApp(MaterialApp(     hom ...

  7. PB从入坑到放弃(七)PBer们的福音来了

    写在前面 也许现在的你需要用PB完成毕业设计.需要维护远古时代的代码,又或者是你呆的公司就是要求要用PB开发项目. 不管你是出于什么原因还在使用PB,不可否认PB在数据窗口非常优秀,熟练使用之后开发数 ...

  8. 敏捷开发专家一席谈:云原生技术下的华为云DevOps实践之路

    摘要:听华为云DevCloud首席技术布道师徐毅讲述云原生下的DevOps实践. 本文分享自华为云社区<敏捷开发专家一席谈:云原生技术下的华为云DevOps实践之路>,作者:华为云社区精选 ...

  9. 4种Spring Boot 实现通用 Auth 认证方式

    摘要: 文章介绍了 spring-boot 中实现通用 auth 的四种方式,包括传统 AOP.拦截器.参数解析器和过滤器,并提供了对应的实例代码,最后简单总结了下它们的执行顺序. 本文分享自华为云社 ...

  10. SDK设计与封装:从基础概念入门到架构设计落地笔记

    什么是 SDK? SDK 全称 Software Development Kit,广义上的 SDK 是为特定的软件包.软件框架.硬件平台.操作系统等建立应用程序时所使用的开发工具的集合(在 iOS 项 ...