从0开始搭建日志分析系统(三)

从0开始搭建日志分析系统(三):自动化

前情

由于项目里日志收集和日志分析分别使用了两台独立的服务器,所以这里会涉及到把每天的日志文件从一台服务器拷贝到另一台服务器,如果是同一台服务器,则可以省略该步骤
参考http://blog.csdn.net/a11101171/article/details/47293109

一、expect + crontab 自动scp文件到日志分析服务器(日志收集服务器上)

  • 安装expect
    centos 可以直接用 yum install expect
  • 配置脚本autoscp.sh拷贝日志到分析服务器(注意修改日志路径)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash

    filename=`ls -l /letv/logs/lempb | tail -n 1 | awk '{print $9}'`
    echo $filename

    /usr/expect/bin/expect -c "
    spawn scp /letv/logs/lempb/$filename root@47.92.67.199:/root/study/log-backup
    expect {
    \"*assword\" {set timeout 300; send \"TYMljly412\r\";}
    \"yes/no\" {send \"yes\r\"; exp_continue;}
    }
    expect eof"
  • 配置crontab自动执行scp脚本(每天凌晨1点执行)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    0 1 * * * /letv/logs/autoscp.sh >>/root/xxx/xxx.log 2>&1
    ``
    ** 可以在后面加上 >>/root/xxx/xxx.log 2>&1 把每次执行的log放入指定文件,方便后续查看 **

    ### 二、自动执行日志分析(日志分析服务器上)
    + 配置自动执行脚本 auto.sh ,这里设置每天2点执行,因为步骤一设置了每天1点自动拷贝头天的日志文件到/root/study/log-backup/下,这里需要确保scp完成
    思路:
    1.获取/root/study/log-backup/下最新的日志文件
    ```bash
    filename=`ls -l /root/study/log-backup/ | tail -n 1 | awk '{print $9}'`
    2.从/root/study/log-backup/目录拷贝一份到/root/study/logfactory目录
    1
    cp /root/study/log-backup/$filename /root/study/logfactory/
    3.unzip操作
    1
    gunzip /root/study/logfactory/$filename
    4.获取unzip后的文件名并rename操作,因为分析程序里写死了入口文件名为out_log.log
    1
    2
    file=${filename/\.gz/}
    mv /root/study/logfactory/$file /root/study/logfactory/out_log.log
    5.执行分析程序
    1
    node /root/study/logfactory/main/start
    6.remove源日志文件
    1
    rm -f /root/study/logfactory/out_log.log
    核心代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/bin/bash

    filename=`ls -l /root/study/log-backup/ | tail -n 1 | awk '{print $9}'`
    echo $filename

    cp /root/study/log-backup/$filename /root/study/logfactory/
    echo 'copy success'

    gunzip /root/study/logfactory/$filename
    echo 'unzip success'

    file=${filename/\.gz/}
    echo $file

    mv /root/study/logfactory/$file /root/study/logfactory/out_log.log
    echo 'rename success'

    node /root/study/logfactory/main/start
    echo 'gen htmls success'

    rm -f /root/study/logfactory/out_log.log
    echo 'remove old log file success'

    echo 'all end'
  • crontab 配置每天2点自动执行
    1
    0 2 * * * /root/study/logfactory/auto.sh >> /root/study/logfactory/auto.log 2>&1

** 注意2点:1.尽量写全路径,否则可能报错 2.如果使用sh命令能执行,而crontab里执行失败,则可能是脚本的执行权限不够,使用chmod a+wrx xx.sh **

坚持原创技术分享,您的支持将鼓励我继续创作!