shell + go + mysql + granafa nginx日志统计(一):日志切割

!注意! go程序慎用 !

在开始之前,想说一句慎用于自动执行。事实上我现在也只用在一些特别需要地方,大部分时候我是手动去执行这个go程序,作者是个三流运维写的代码更是野路子。

为什么做这个?有ELK这种神器,为什么还要自己弄。实际上还是因为穷,连线上都只能单机提供服务地方要长期运行一个叫ELK的东西不管对于磁盘IO还是内存都是一大挑战(阿里云贵呀)。所以大部分的东西都放到线下来做统计,当然不是时时的。

#####统一nginx日志格式

下面是nginx配置文件中的日志格式,这里把所有需要采集的项目都放到前面来了

    log_format  test  '$remote_addr $status $request_time [$time_iso8601] $request '
                                  '$remote_user $body_bytes_sent "$http_referer" '
                                  '"$http_user_agent" "$http_x_forwarded_for"';

打印出来的有用信息大概如下,省略了一些

123.131.xx.xxx 307 0.012 [2018-01-16T10:42:50+08:00] POST /login HTTP/1.1 - 0 .......
121.19.xx.xx 200 0.010 [2018-01-16T10:42:51+08:00] GET / HTTP/1.1 - 4228 ........
120.221.xxx.xx 200 0.007 [2018-01-16T10:42:56+08:00] GET / HTTP/1.1 - 4227 .........

按日期切割日志(shell脚本)

建立一个存放老日志的目录

mkdir -p /data/ngx_oldlog
cd /data/ngx_oldlog
新建脚本
vim cut_ngx_log.sh
chmod u+rx cut_ngx_log.sh
添加到定时任务
crontab -e
00 00 * * * /bin/sh /data/ngx_oldlog/cut_ngx_log.sh > /dev/null 2>&1

脚本 cut_ngx_log.sh 内容如下:

#根据access_log关键字找出日志文件名 定时任务每天0点执行
#!/bin/bash
cd /opt/nginx/conf/vhost/
for i in `grep -rn access_log |grep test |awk '{print $3}'|awk -F'/' '{print $2}'`;
do
cd /opt/nginx/logs
mv $i /data/ngx_oldlog/$(date +%F -d -1day)_$i 
done

这个脚本是根据我的实际nginx日志位置来写的,所以在你使用的时候需要做一些小调整,或者干脆直接写死路径,这样更安全。实际切割完日志后如下图:

我是图

转载于:https://my.oschina.net/u/1763608/blog/1607869

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值