shell + go + mysql nginx日志统计 (一
2018-01-16 本文已影响106人
运维小吴
!注意! 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日志位置来写的,所以在你使用的时候需要做一些小调整,或者干脆直接写死路径,这样更安全。实际切割完日志后如下图:
