CentOS 7.0下nginx实现每天定时分割日志

下面就是 CentOS 7.0 下 nginx 实现每天定时分割日志的完整攻略。

1. 安装 logrotate 工具

logrotate 是 Linux 下用于管理日志文件的工具,我们需要先安装该工具。在 CentOS 7.0 中可以通过 yum 命令安装:

sudo yum install logrotate

2. 编写 logrotate 配置文件

在 nginx 的配置文件中,我们需要指定日志的保存目录(例如 /var/log/nginx/)和文件名(例如 access.log)。同时,我们需要通过 logrotate 配置文件来告诉 logrotate 工具如何处理这些日志。

以下是一个示例的 logrotate 配置文件,文件名为 /etc/logrotate.d/nginx

# 每天执行日志分割
daily

# 保留最近 7 天的日志文件
rotate 7

# 缩写历史日志文件名,否则会重复命名
dateext

# 如果日志文件为空则不进行日志备份
notifempty

# 指定日志文件的位置
/var/log/nginx/*.log {
    # 按照每周分割日志
    weekly

    # 保留最近 5 周的日志文件
    rotate 5

    # 使用 gzip 进行压缩
    compress

    # 指定压缩后的文件名
    missingok
    notifempty
    sharedscripts

    # 避免日志文件权限和所有者被修改
    postrotate
        /bin/kill -USR1 $(cat /run/nginx.pid 2>/dev/null) 2>/dev/null || true
    endscript
}

以上的 logrotate 配置文件中,我们指定了:

  • 每天执行日志分割;
  • 保留最近 7 天的日志文件;
  • 按照每周分割日志;
  • 保留最近 5 周的日志文件;
  • 使用 gzip 进行压缩;
  • 删除已经 compress 过的日志文件;
  • 避免日志文件权限和所有者被修改。

你需要根据自己的需求来调整这些参数。

3. 修改 nginx 配置文件

安装 logrotate 和编写配置文件之后,我们需要修改 nginx 的配置文件,以便在分割日志时不会影响 nginx 的服务。

为了实现这个目的,我们需要在 nginx 配置文件中加入如下代码:

# 定义日志格式
log_format timed_combined '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for" '
                'rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time" us="$upstream_status" cs=$upstream_cache_status';

# 定义访问日志文件和格式
access_log /var/log/nginx/access.log timed_combined;

# 定义错误日志文件和级别
error_log /var/log/nginx/error.log notice;

这段代码中,我们通过 access_log 指定了访问日志保存的路径和格式,通过 error_log 指定了错误日志保存的路径和级别。

4. 测试 logrotate 操作

最后,我们可以手动执行一下 logrotate 操作来测试配置是否成功。执行以下命令:

sudo logrotate -f /etc/logrotate.d/nginx

这条命令将强制执行 logrotate 操作,而不等到定时任务执行。你可以通过查看日志文件的变化来观察是否成功完成了分割和压缩操作。

示例

例如,我们可以通过以下代码来在 nginx 中显示访问日志:

server {
    listen 80;
    server_name example.com;

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }

    location /logs {
        alias /var/log/nginx/;
        autoindex on;
        autoindex_exact_size off;
    }
}

然后访问 http://example.com/logs,就可以看到 nginx 的访问日志了。此时,你可以手动执行一下 logrotate 操作来测试配置是否成功。

另外,我们可以通过以下代码来在 nginx 中关闭 access log:

server {
    listen 80;
    server_name example.com;

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }

    location = /dev/null {
        access_log off;
        return 204;
    }
}

这里的 location = /dev/null 指定了一个不存在的路径,用于关闭访问日志。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CentOS 7.0下nginx实现每天定时分割日志 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Mysql数据库性能优化一

    以下是Mysql数据库性能优化的完整攻略: 第一步:监测数据库性能 在进行数据库优化之前,我们需要先了解当前数据库的性能状况。可以通过以下几种方式来监测: 监测数据库的QPS(每秒查询率) 监测数据库的TPS(每秒事务量) 监测数据库的延迟情况 一般我们可以使用MySQL自带的工具:mysqladmin和mysqldumpslow来监测数据库的性能。 第二步…

    database 2023年5月19日
    00
  • MySQL循环语句之while循环测试

    非常感谢您对MySQL循环语句之while循环测试的关注。接下来,我将详细讲解该攻略的完整过程,希望对您有所帮助。 1. 简介 在MySQL中,循环语句是非常有用的功能。特别是当需要重复执行相同的代码块时,使用循环语句可以大大提高代码的重用性和可读性。 MySQL提供了多种循环语句,其中之一就是while循环。在while循环中,只有当指定条件成立时,循环体…

    database 2023年5月21日
    00
  • SQL 新增连接查询而不影响其他连接查询

    实现 SQL 新增连接查询而不影响其他连接查询,可以采用以下两种方式: 使用子查询 可以使用子查询的方式添加一个新的连接查询。具体步骤如下: 在主查询中,使用已有的连接查询语句作为子查询。 在子查询中添加新的连接查询条件,保证新添加的连接查询不会影响已有的连接查询结果。 示例代码: SELECT * FROM ( SELECT * FROM table1 t…

    database 2023年3月27日
    00
  • MySQL存储过程的深入讲解(in、out、inout)

    MySQL存储过程的深入讲解(in、out、inout) MySQL存储过程是一组SQL语句集合,它们被处理为单个单元并在MySQL服务器上以原子方式执行。存储过程将SQL语句封装在一个命名的块中,此块可以被多次调用。MySQL存储过程提供了多种类型的参数传递和返回值方式,包括in、out和inout类型的参数。 定义一个存储过程 在MySQL中,可以使用C…

    database 2023年5月21日
    00
  • Openstack 使用migrate进行数据库升级实现方案详细介绍

    Openstack 使用migrate进行数据库升级实现方案详细介绍 简介 Openstack是一个开放源代码的云计算软件平台,其中涉及到的各种组件和服务都需要对应的数据存储支持。在不同的版本之间,组件的数据存储模式可能发生变化,此时就需要进行数据库升级。其中,常用的数据库升级工具之一就是migrate。 本文将详细介绍Openstack使用migrate进…

    database 2023年5月22日
    00
  • shell脚本操作oracle删除表空间、创建表空间、删除用户

    下面是针对操作Oracle数据库的shell脚本攻略。 1. 前置条件 在执行shell脚本操作Oracle之前,需要安装Oracle Instant Client和SQL Plus工具,以及设置好环境变量。同时,需要具有Oracle数据库访问权限的用户。 2. 删除表空间 删除表空间操作可以使用以下SQL语句实现: DROP TABLESPACE tabl…

    database 2023年5月22日
    00
  • mysql 实现迁移数据库到另一台服务器

    为了实现数据库的迁移,我们需要完成以下步骤: 步骤一:备份原数据库 在进行任何迁移操作之前,我们需要先将原数据库备份到本地,以确保数据的安全。同时,备份也可以在迁移过程中提供一些操作重试的机会。有多种备份方式可供选择,其中最常见的包括通过工具备份和手动备份两种方式。 步骤二:在目标服务器上安装MySQL 在新服务器上安装 MySQL,并确保其版本与原服务器版…

    database 2023年5月22日
    00
  • mysql多表联合查询返回一张表的内容实现代码

    实现mysql多表联合查询中返回一张表的内容,可以通过使用UNION ALL操作符,将多个SELECT语句的结果集组合成一个结果集,最后将所有的查询结果拼成一个表。 下面是具体的实现步骤: 找到需要联合查询的多张表,根据关联字段进行连接操作(JOIN),例如连接表A和表B: SELECT A.*, B.* FROM table_A A INNER JOIN …

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部