shell 处理将动态解析的日志文件

有时候,我们需要对一些程序的日志文件进行数据分析,如果是我们自己处理和分析的情况下一般是使用程序读取对应日志文件按照对应规则保存到数据库然后再进行分析。
如果我们直接到日志文件进行分析,我们没有办法记录以及分析过的。因为日志文件是随时在增加的。但是我们程序读取到和处理一次时,没有办法确定是否有新的日志追加到里面。
那么如果直接读取第一行后删除第一行后再写入文件中。这样会造成日志丢失,所以这个方法是不可行的。那么既然直接读取不可行,就想其他的办法。在日志文件中我们都有一些习惯或者对应规则按照天拆分。也就是每当一天结束后,对应那天的日志文件会按照规则新生成一个文件,而不是当前正在使用的日志文件(老司机懂,新司机请自行脑补)

根据这个思路我们就读取备份的日志文件,这样就不会在当前日志造成丢失了。但是考虑到日志分析对按照天来读取,这样数据更新太慢不好,那么就想法指定周期读取如5分钟一次,10分钟一次,30分钟一次。。。。

具体看对应业务对数据更新速度要求,这样一来我们就可以实现去用程序动态解析日志文件了。按照指定周期拆分文件,大部分程序都有自己的配置规则,根据实际程序来定,这里举例说明nginx 没有自己的拆分规则。需要借助其他工具来拆分。
在linux 中可以使用logrotate 来实现 似乎logrotate 中最小单位是天所以这里还是很推荐的一种方案,如果业务量大,一天的日志很可能上G

logrotate 不可以实现那么还是我们自己动手吧

#!/bin/bash
# 遍历目录下所有文件
function listPath(){
        for file in `ls $1`
        do
                if [ -d $1"/"$file ]; then
             listPath $1$file/
        else
                    path=$1$file
                        end=${path: -4}
                        if [ "$end" == ".log" ]; then
                                dologFile $path
                        fi
        fi

        done
}
# 处理日志文件
function dologFile(){
        if [ -s $1 ]; then
          time=$(date +%Y%m%d-%H%M%S)
          echo $1 $time
          mv $1 $1-$time
        fi
}
# 重新加载nginx 日志
function loadNginx(){
        echo "loadNginx"

        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true

        echo "end load"
}
# 删除过期文件
function delOverdueFile(){
        find $INIT_PATH -mtime +7 -name "*.*" | xargs rm -f
}
INIT_PATH="/var/log/nginx/log/"

listPath $INIT_PATH

上面命令即可实现对应拆分方法。
这里解释一下#重新加载nginx 日志方法的作用。因为linux 中是按照文件的描述来确定文件的,所以如果我们直接mv 过去对应程序会mv 后的文件中追加,所以我们必须重新加载一次对应程序,来重新定位日志文件。

上面这个命令在部分程序里面都实现了,只需要配置好规则就行,如果没有就可以使用上面命令来实现。

这里命令写好了,就得想办法让这个命令定期执行 这里使用crontab 来实现如果没有安装这个软件请自行安装
安装好后

crontab -e

然后输入

*/5 * * * * /etc/nginx/nginxlog.sh

这里写图片描述

然后保存就好了,这里需要提醒java quartz 的老司机这里的cron 表达式是精确到分钟而是秒,所以当保存保存的时候请注意表达式书写正确没有

这里不清楚cron 表达式的可以自行脑补一下。

这样就完成日志文件安装指定周期分割了。然后就是这些程序去扫描对应文件进行分析了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值