Shell 日志分析的简单脚本

#!/bin/sh


fun_parser_log()
{
        # 日志存放路径,也可以设置为形参传入
        log_path="/alidata1/guonan/jinerkan"

        # 日志解析路径,也可以设置为形参传入
        log_analysis_path="/home/guonan/analysis_log"

        # 昨天时间 20151210
        yesterday_time=$(date -d -1day +%Y%m%d)

        # 昨天时间格式化 2015-12-10
        yesterday_time_geshi=$(date -d -1day +%Y-%m-%d)

        # apache生成的日志名称,要解析的,比如:tonight.m.jinerkan.com.log.
        apache_log_prefix_name=$1

        # apache生成的日志名称 + 昨天的时间戳, tonight.m.jinerkan.com.log.20150210
        apeche_log_name=$apache_log_prefix_name$yesterday_time

        # 最终要解析的日志前缀, top_search_tonight_2015-02-12.log 的前缀 top_search_tonight
        fianl_log_prefix_name=$2"_"$yesterday_time_geshi

        # 日志解析的类型, search, detail
        log_type=$3



        if [ -f $log_path"/"$apeche_log_name ]; then
                if [ -f  $log_analysis_path"/"$apeche_log_name ]; then
                        echo "log文件存在于 $log_analysis_path 之中, 无需拷贝  -------> "$yesterday_time_geshi >> $log_analysis_path"/"parser.log
                else
                        # 将日志存放至单独的处理目录
                        $(cp $log_path"/"$apeche_log_name $log_analysis_path"/")
                fi
        else
                echo "无法获得昨天的log文件 -------> "$yesterday_time_geshi >> $log_analysis_path"/"parser.log
        fi


        if [ "$log_type" == "search" ]; then

                #如果拷贝成功,目录下存在日志文件
                if [ -f  $log_analysis_path"/"$apeche_log_name ]; then
                    $(cat $apeche_log_name | grep 'search' > $apeche_log_name".search.tmp")
                    $(cat $apeche_log_name".search.tmp" | grep -v 'typeahead' > $apeche_log_name".search.tmp.v.typeahead")
                    $(cat $apeche_log_name".search.tmp.v.typeahead" | awk -F '&' '{print $1}' | grep '?q=' | awk '{print $4,$7}' > $apeche_log_name".search")
                    #$(cat $apeche_log_name".search" | sort | uniq -c | sort -nr > $fianl_log_prefix_name".log")
                else
                    echo "要解析的 $log_analysis_path"/"$apeche_log_name 文件存在于 $log_analysis_path 之中, 无需拷贝  -------> "$yesterday_time_geshi >> $log_analysis_path"/"parser.log
                fi

        elif [ "$log_type" == "detail" ]; then

                #如果拷贝成功,目录下存在日志文件
                if [ -f  $log_analysis_path"/"$apeche_log_name ]; then
                        $(cat $apeche_log_name | grep -v 'static' > $apeche_log_name".v.static.tmp")
                    $(cat $apeche_log_name".v.static.tmp" | grep 'detail' > $apeche_log_name".detail.tmp")
                    $(cat $apeche_log_name".detail.tmp" | grep -v '124.205.178.126' > $apeche_log_name".v.ip.tmp")
                    $(cat $apeche_log_name".v.ip.tmp" | awk '{print $4,$7}' > $apeche_log_name".detail")
                    #$(cat $apeche_log_name".detail" | sort | uniq -c | sort -nr > $fianl_log_prefix_name".log")
                else
                        echo "要处理的搜索日志文件不存在 -------> "$yesterday_time_geshi >> $log_analysis_path"/"parser.log
                fi

        else
                echo "log_type 未指定 -------> "$yesterday_time_geshi >> $log_analysis_path"/"parser.log
        fi


        # 删除老的日志文件
        if [ -f $fianl_log_prefix_name".log" ]; then
                $(rm $apeche_log_name"."*)
                #$(rm $apeche_log_name)
                #$(scp -p $fianl_log_prefix_name".log" root@182.92.82.136:/opt/sun/spider/more_tv/java_db_save_analysis_log/conf/)
        else
                echo "日志文件未处理 -------> "$yesterday_time_geshi >> $log_analysis_path"/"parser.log
        fi
}


apache_log_prefix_name="tonight.m.jinerkan.com.log."
final_search_log_prefix_name="top_search_tonight"
final_detail_prefix_name="top_detail_tonight"
search_type="search"
detail_type="detail"

fun_parser_log $apache_log_prefix_name $final_search_log_prefix_name $search_type
fun_parser_log $apache_log_prefix_name $final_detail_prefix_name $detail_type

echo " ----------- " >> "/home/guonan/analysis_log/parser.log"

 

posted @ 2015-11-25 18:23  一瞳孔  阅读(628)  评论(0)    收藏  举报