shell + go + mysql nginx日志统计 (一

作者: 运维小吴 | 来源:发表于2018-01-16 11:32 被阅读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日志位置来写的,所以在你使用的时候需要做一些小调整,或者干脆直接写死路径,这样更安全。实际切割完日志后如下图:

    jpg.png

    相关文章

      网友评论

      本文标题:shell + go + mysql nginx日志统计 (一

      本文链接:https://www.haomeiwen.com/subject/cwtsoxtx.html