Linux下自动分割Nginx日志文件(一)-----自定义脚本和定时任务

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

  Nginx 是一个轻量级的 Web 服务器,体积小、性能高、速度快等诸多优点。但不足的是也存在缺点,比如其产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将 导致日志文件容量非常大,不便于管理。当然了,我们也不希望看到这么庞大的一个访问日志文件,那需要手动对这个文件进行切割。偶然发现如果不做切割的话,日志文件会越来越大,达到几十G,而且还影响日志的查询效率,现需要将其进行日志分割。

    在 Linux 平台上进行切割的原理:使用 date 命令以获得昨天的日期、使用 kill 命令向 Nginx 进程发送重新打开日志文件的信号,以及 crontab 设置执行任务周期。

 

1,vi /usr/local/nginx/sbin/cut_log.sh

  脚本为:

1
2
3
4
5
6
7
#!/bin/bash
#date : 2015-11-17
LOGS_PATH= /data/nginx/log
YESTERDAY=$( date  -- date  "yesterday"   + "%Y-%m-%d" )
#PID_PATH="/usr/local/nginx/logs/nginx.pid"
mv  ${LOGS_PATH} /nginx .access.log  ${LOGS_PATH} /access_nginx_ ${YESTERDAY}.log
kill  -USR1 $( cat  /usr/local/nginx/logs/nginx .pid)


代码分析:


## Nginx 日志文件所在的目录,根据个人的情况进行修改
LOGS_PATH=/data/nginx/logs
## 获取昨天的日期
YESTERDAY=$(date --date "yesterday"  +"%Y-%m-%d")
## 移动文件并命名为新的日志文件
mv ${LOGS_PATH}/nginx.access.log  ${LOGS_PATH}/access_nginx_${YESTERDAY}.log
## 向Nginx主进程发送USR1信号,USR1信号是重新打开日志文件
kill -USR1 $(cat /usr/local/nginx/nginx.pid)


##########最简单的备用常用的脚本

1
2
3
4
vim cut_nginx.sh
cd  /data/nginx/logs/access .log  &&\
mv  access.log access_$( date  +%F -d -1day).log
/usr/local/nginx/sbin/nginx  -s reload

crontab -e 

0 0 * * * /bin/bash /usr/local/nginx/sbin/cut-log.sh

1
2
3
4
5
6
7
8
9
10
11
12
####生产:
#! /bin/bash
#Power by guojinbao
date =` date  +%Y-%m-%d-%H-%M-%S`
logfile= "/guojinbao/nginx/logs/access.log"
logdir= /guojinbao/nginx/logs
pid=` cat  /usr/local/nginx/logs/nginx .pid`
if  [ ! -d $logdir ];  then
     mkdir  -p $logdir
fi
/bin/mv  $logfile $logdir /access_ ${ date }.log
kill  -HUP $pid



2,chmod +x /usr/local/nginx/sbin/cut_log.sh

wKioL1ZKwtmDFBnBAAA5bBOiUf8227.png


3,新增定时任务:

[root@zabbix sbin]# crontab -e

0 0 * * * /bin/bash /usr/local/nginx/sbin/cut-log.sh

~                                                      

定时任务是定时到每天的0点0分执行。


4,每天上班的时候就可以查看分割后的日志文件在定制的目录下下。

[root@zabbix log]# ll

total 182456

-rw-r--r--  1 nobody root     37134 Nov 17 11:27 access_nginx.log_2015-11-16.log

-rw-r--r--  1 nobody root    963804 Nov 17 14:05 nginx.access.log



以上就完成了对日志文件的切割。



本文转自 lqbyz 51CTO博客,原文链接:http://blog.51cto.com/liqingbiao/1713451

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
308 90
|
1月前
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
288 51
|
3月前
|
应用服务中间件 Linux nginx
【Azure App Service】基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?
基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?Web App Linux 默认使用的 Nginx 版本是由平台预定义的,无法更改这个版本。
160 77
|
2月前
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
SAE(Serverless应用引擎)是阿里云推出的全托管PaaS平台,致力于简化微服务应用开发与管理。为满足用户对可观测性和运维能力的更高需求,SAE引入Sidecar容器技术,实现日志采集、监控指标收集等功能扩展,且无需修改主应用代码。通过共享资源模式和独立资源模式,SAE平衡了资源灵活性与隔离性。同时,提供全链路运维能力,确保应用稳定性。未来,SAE将持续优化,支持更多场景,助力用户高效用云。
174 2
|
3月前
|
运维 应用服务中间件 nginx
docker运维查看指定应用log文件位置和名称
通过本文的方法,您可以更高效地管理和查看Docker容器中的日志文件,确保应用运行状态可控和可监测。
288 28
|
5月前
|
JSON 安全 API
.net 自定义日志类
在.NET中,创建自定义日志类有助于更好地管理日志信息。示例展示了如何创建、配置和使用日志记录功能,包括写入日志文件、设置日志级别、格式化消息等。注意事项涵盖时间戳、日志级别、JSON序列化、线程安全、日志格式、文件处理及示例使用。请根据需求调整代码。
86 13
|
5月前
|
负载均衡 Ubuntu 应用服务中间件
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
390 13
|
5月前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
480 4
|
5月前
|
存储 SQL 关系型数据库
【赵渝强老师】PostgreSQL的运行日志文件
PostgreSQL的物理存储结构包括数据文件、日志文件等。运行日志默认未开启,需配置`postgresql.conf`文件中的相关参数如`log_destination`、`log_directory`等,以记录数据库状态、错误信息等。示例配置中启用了CSV格式日志,便于管理和分析。通过创建表操作,可查看生成的日志文件,了解具体日志内容。
180 3
|
6月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
123 4