Nginx的日志处理
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的日志处理的更多相关文章
- Nginx 访问日志轮询切割
Nginx 访问日志轮询切割脚本 #!/bin/sh Dateformat=`date +%Y%m%d` Basedir="/application/nginx" Nginxlog ...
- 按日期切割nginx访问日志--及性能优化
先谈下我们需求,一个比较大的nginx访问日志,根据访问日期切割日志,保存在/tmp目录下. 测试机器为腾讯云机子,单核1G内存.测试日志大小80M. 不使用多线程版: #!/usr/bin/env ...
- 一、基于hadoop的nginx访问日志分析---解析日志篇
前一阵子,搭建了ELK日志分析平台,用着挺爽的,再也不用给开发拉各种日志,节省了很多时间. 这篇博文是介绍用python代码实现日志分析的,用MRJob实现hadoop上的mapreduce,可以直接 ...
- log_format为Nginx设置日志格式
nginx服务器日志相关指令主要有两条,一条是log_format,用来设置日志格式, 另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,一般在nginx的配置文件中日记配置 ...
- Nginx常用日志分割方法
方式一: nginx cronolog日志分割配置文档,根据下面方法,每分钟分割一次NGINX访问日志. 1.nginx日志配置 access_log /var/log/nginx/access.lo ...
- elk收集分析nginx access日志
elk收集分析nginx access日志 首先elk的搭建按照这篇文章使用elk+redis搭建nginx日志分析平台说的,使用redis的push和pop做队列,然后有个logstash_inde ...
- nginx实现日志按天切割
背景 nginx的日志文件没有rotate功能.一段时间过后,日志将越发臃肿,一个accesslog很快就突破1G,因此有必要通过脚本实现按天切割日志. 解决思路 1 重命名日志文件,如更改为acc ...
- nginx查看日志
原文:nginx日志格式及自定义日志配置 nginx的log日志分为access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器.ip和其他的访问信息 ...
- 场景2 nginx 错误日志格式:
nginx 错误日志格式: 2016/09/01 11:23:36 [error] 28388#0: *14549 open() "/var/www/zjzc-web-frontEnd/im ...
- Python正则表达式,统计分析nginx访问日志
目标: 1.正则表达式 2.oop编程,统计nginx访问日志中不同IP地址出现的次数并排序 1.正则表达式 #!/usr/bin/env python # -*- coding: utf-8 -*- ...
随机推荐
- k8s卷管理-2
目录 k8s卷管理-2 pv和pvc pv pv的定义 pvc pvc的定义 pv和pvc的绑定关系 手动指定pv与pvc绑定 pod使用pvc pod挂载pvc 访问模式的区别 k8s卷管理-2 之 ...
- 2021-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。数据库不能停,并且还有增删改操作。请问如何操作?
2021-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据.数据库不能停,并且还有增删改操作.请问如何操作? 福哥答案2020-01-20: 陌陌答案: 用pt_o ...
- maven系列:依赖管理和依赖范围
目录 一.依赖管理 使用坐标导入jar包 使用坐标导入 jar 包 – 快捷方式 使用坐标导入 jar 包 – 自动导入 二.依赖范围 三.可选依赖 四.排除依赖 一.依赖管理 使用坐标导入jar包 ...
- MyBatis中SQL语句优化小结
摘要:MyBatis 作为一款优秀的持久层框架,它支持自定义SQL.存储过程以及高级映射. MyBatis 作为一款优秀的持久层框架,它支持自定义SQL.存储过程以及高级映射.它免除了几乎所有的 JD ...
- 深度解读鸿蒙轻内核CPU占用率
摘要:CPUP(Central Processing Unit Percentage,CPU占用率)分为系统CPU占用率和任务CPU占用率.用户通过系统级的CPU占用率,判断当前系统负载是否超出设计规 ...
- DBA:介里有你没有用过的“CHUAN”新社区版本Redis6.0
摘要:华为云DCS Redis 6.0社区版带来了极致性能.功能全面.可靠性强.性价比高的云服务,并且完全兼容开源Redis,客户端无需修改代码,开通后即可使用,使企业完全无需后顾之忧就能享受到业务响 ...
- 论文解读丨无参数的注意力模块SimAm
摘要:本文提出了一个概念简单但对卷积神经网络非常有效的注意力模块. 本文分享自华为云社区<论文解读系列三十:无参数的注意力模块SimAm论文解读>,作者:谷雨润一麦. 摘要 本文提出了一个 ...
- Neo4j Neo.TransientError.General.MemoryPoolOutOfMemoryError
The allocation of an extra 4.0 MiB would use more than the limit 2.0 GiB. Currently using 2.0 GiB. d ...
- Axure 多人协作
创建团队项目 团队 => 从当前文件创建团队项目 签出的文件才能被修改 签出 签入 发布评论 邀请 编辑的5种状态 和SVN差不多的概念 已有项目导入 https://www.bilibili. ...
- SpringBoot Admin OFFLINE
java.util.concurrent.TimeoutException message Did not observe any item or terminal signal within 100 ...