shell脚本:脚本分析汇总ping日志文件

脚本功能:用于分析汇总大量ping日志文件

------------------

#!/bin/bash
# check ping result
# by colin
# on 2016-06-08
########################################
# 功能说明:该脚本用于分析汇总某项目在线ping日志文件
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
LOGNAME=‘data/store/logs/record/ping.log‘
GREPKEY=‘ping statistics‘
WORKDIR=‘/tmp/checkPingResult‘
TEMPPINGFILE="${WORKDIR}/temppingfile.txt"
CHECKRESULT="${WORKDIR}/temp_check_result.txt"

EMAIL=(
    [email protected]邮件地址.cn
)

TRAIN_CTZX=(
    k1364_k817:cdyd:ctzx_42
    k1364_k817:cdyd:ctzx_58
    k1364_k817:cdyd:ctzx_49
    k1364_k817:cdyd:ctzx_56
    k1364_k817:cdyd:ctzx_55
    k1364_k817:cdyd:ctzx_59
    k1364_k817:cdyd:ctzx_39
    k1364_k817:cdyd:ctzx_22
    k1364_k817:cdyd:ctzx_46
    k1364_k817:cdyd:ctzx_36
    k1364_k817:cdyd:ctzx_27
    k1364_k817:hrbdx:ctzx_26
    k1364_k817:hrbdx:ctzx_1
    k1364_k817:cddx:ctzx_51
    k1364_k817:cddx:ctzx_40
    k351_k352:cdyd:ctzx_2
    k351_k352:cdyd:ctzx_4
    k351_k352:cdyd:ctzx_5
    k351_k352:cdyd:ctzx_8
    k351_k352:cdyd:ctzx_9
    k351_k352:cdyd:ctzx_10
    k351_k352:cdyd:ctzx_12
    k351_k352:cdyd:ctzx_13
    k351_k352:cdyd:ctzx_14
    k351_k352:cdyd:ctzx_15
    k351_k352:cdyd:ctzx_16
    k351_k352:cdyd:ctzx_17
    k351_k352:cdyd:ctzx_19
    k1223_k1224:hrbdx:ctzx_33
    k1223_k1224:hrbdx:ctzx_34
    k1223_k1224:cddx:ctzx_41
    k1223_k1224:cddx:ctzx_47
    k1223_k1224:cddx:ctzx_54
    k1223_k1224:cdyd:ctzx_23
    k1223_k1224:cdyd:ctzx_38
    k1223_k1224:cdyd:ctzx_45
    k1223_k1224:cdyd:ctzx_48
    k1223_k1224:cdyd:ctzx_50
    k1223_k1224:cdyd:ctzx_60
)

sendEmail(){
    TEMP_EMAIL_FILES=$1
    [ $(wc -l ${TEMP_EMAIL_FILES}|awk ‘{print $1}‘) -eq 0 ] || { 
        for i in ${EMAIL[@]}
        do
            dos2unix -k ${TEMP_EMAIL_FILES} 
            mail -s "${HOSTNAME}: CTZX CHECK PING RESULT" ${i} < ${TEMP_EMAIL_FILES}
        done
    }
    [ -e ${TEMP_EMAIL_FILES} ] && rm ${TEMP_EMAIL_FILES}
}

[ -d ${WORKDIR} ] && rm ${WORKDIR} -rf
[ -f ${CHECKRESULT} ] && rm ${CHECKRESULT} 
mkdir -p ${WORKDIR}/temp/ && cd ${WORKDIR} && {
    for TARFILE in $(find /home/upload/ctzx/ct_tongji/ -name ‘pinglog.tar.gz‘)
    do
        DEVNAME=$(echo "${TARFILE}"|awk -F/ ‘{print $(NF-1)}‘)
        for T_DEV_ID in ${TRAIN_CTZX[@]}
        do
            TRAIN_ID=$(echo ${T_DEV_ID}|awk -F: ‘{print $1}‘)
            CARD_ID=$(echo ${T_DEV_ID}|awk -F: ‘{print $2}‘)
            DEV_ID=$(echo ${T_DEV_ID}|awk -F: ‘{print $3}‘)
            [ ${DEVNAME} = ${DEV_ID} ] && break
        done
        TARFILENAME=$(echo "${TARFILE}"|awk -F/ ‘{print $NF}‘)
        cp ${TARFILE} .
        tar -zxf ${TARFILENAME} && rm -f ${TARFILENAME}
        ##
        # 加-n参数添加行号,-A 2取出的数据,有遇到第三行为空的情况
        #
        grep -n -A 2 "${GREPKEY}" ${LOGNAME}|grep -v "${GREPKEY}"|sed -r ‘s/[^0-9\.]+/ /g‘|sed ‘s/^ //g‘|grep -v "^$" |awk ‘{$1="";print $0}‘ > ${TEMPPINGFILE}
        PACKETS_TRANSMITTED=$(sed -n ‘p;n‘ ${TEMPPINGFILE}|awk ‘{sum+=$1} END {print sum}‘)
        PACKETS_RECEIVED=$(sed -n ‘p;n‘ ${TEMPPINGFILE}|awk ‘{sum+=$2} END {print sum}‘)
        PACKET_LOSS=$(sed -n ‘p;n‘ ${TEMPPINGFILE}|awk ‘{sum+=$3} END {print sum/NR}‘)
        PING_MIN=$(sed -n ‘n;p‘ ${TEMPPINGFILE}|grep -vE "([0-9]{1,3}\.){3}" |awk ‘{print $1}‘ |sort -n|uniq|sed -n ‘1p‘)
        PING_AVG=$(sed -n ‘n;p‘ ${TEMPPINGFILE}|grep -vE "([0-9]{1,3}\.){3}"|awk ‘{sum+=$2} END {print sum/NR}‘)
        PING_MAX=$(sed -n ‘n;p‘ ${TEMPPINGFILE}|grep -vE "([0-9]{1,3}\.){3}" |awk ‘{print $3}‘ |sort -n|uniq|sed -n ‘$p‘)
        echo "${PACKETS_TRANSMITTED},${PACKETS_RECEIVED},${PACKET_LOSS},${PING_MIN},${PING_AVG},${PING_MAX}" >> ${WORKDIR}/temp/${TRAIN_ID}_a_${CARD_ID}
        [ -f ${TEMPPINGFILE} ] && rm ${TEMPPINGFILE}
    done
}

groupPingResult(){
    CHECKFILENAME=$1
    PACK_SENT_ALL=$(awk -F, ‘{sum+=$1} END {print sum}‘ ${CHECKFILENAME})
    PACK_RECEIVE_ALL=$(awk -F, ‘{sum+=$2} END {print sum}‘ ${CHECKFILENAME})
    PACK_LOSS_AVG=$(printf %0.2f $(awk -F, ‘{sum+=$3} END {print sum/NR}‘ ${CHECKFILENAME}))
    PING_MIN_AVG=$(printf %0.2f $(awk -F, ‘{sum+=$4} END {print sum/NR}‘ ${CHECKFILENAME}))
    PING_AVG_AVG=$(printf %0.2f $(awk -F, ‘{sum+=$5} END {print sum/NR}‘ ${CHECKFILENAME}))
    PING_MAX_AVG=$(printf %0.2f $(awk -F, ‘{sum+=$6} END {print sum/NR}‘ ${CHECKFILENAME}))
    ALL_RESULT="${PACK_SENT_ALL},${PACK_RECEIVE_ALL},${PACK_LOSS_AVG},${PING_MIN_AVG},${PING_AVG_AVG},${PING_MAX_AVG}"
}

cd ${WORKDIR}/temp/ && {
    for i in $(find . -name "*_a_*")
    do
        TRAINCARD=$(echo $i | awk -F/ ‘{print $NF}‘)
        groupPingResult ${TRAINCARD}
        TRAINCARD_NAME=$(echo ${TRAINCARD} | sed ‘s/_a_/,/g‘)
        echo "${TRAINCARD_NAME},${ALL_RESULT}" >> ${CHECKRESULT}
        [ -f ${TRAINCARD} ] && rm ${TRAINCARD} -f
    done
    cat ${CHECKRESULT}|sort -n -t, -k5 > ${WORKDIR}/check_result.txt
    sed -i ‘1i车次,卡类型,总发送包,总接收包,丢失率,PING_MIN,PING_AVG,PING_MAX‘ ${WORKDIR}/check_result.txt
    #cat ${CHECKRESULT}|sort -n -t, -k5 > ${WORKDIR}/t_check_result.txt
    #sed -i ‘1i车次,卡类型,总发送包,总接收包,丢失率,PING_MIN,PING_AVG,PING_MAX‘ ${WORKDIR}/t_check_result.txt
    #column -s, -t ${WORKDIR}/t_check_result.txt > ${WORKDIR}/check_result.txt
    #[ -f ${WORKDIR}/t_check_result.txt ] && rm ${WORKDIR}/t_check_result.txt
    [ -f ${CHECKRESULT} ] && rm ${CHECKRESULT}
    sendEmail ${WORKDIR}/check_result.txt
}

------------------

时间: 2024-10-19 16:11:56

shell脚本:脚本分析汇总ping日志文件的相关文章

nodejs 定时调用shell脚本来备份数据库和日志文件并发送到邮箱

安装mailx,靠它来发送邮件 yum install mailx 编辑配置文件 vim /etc/mail.rc #添加如下内容 set [email protected] set smtp=smtp.163.com set [email protected] set smtp-auth-password=xxx set smtp-auth=login ---说明 from:对方收到邮件时显示的发件人 smtp:指定第三方发邮件的smtp服务器地址 set smtp-auth-user:第三方

分析nginx大日志文件,python多线程必备! .

还在为分析nginx大日志犯愁吗?也许你会想到用shell处理,1G文件没有问题,上了10G文件,会消耗很久时间,用shell结合python多线程处理没有错. 什么都不用说了,直接上代码了 #!/usr/bin/python #coding:utf8 import threading     #载入多线程模块 import time          #载入时间模块 import os            #载入os模块 import shutil        #载入shutil模块 im

使用logminer分析日志文件

实验环境 win7 64  oracle PL/SQL Release 11.2.0.1.0 - Productionhttp://blog.csdn.net/tianlesoftware/article/details/5604497 --这些操作需要在sysdba身份执行1.执行分析之前需要添加补充日志SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;查看补充日志是否开启,NO为未开启ALTER DATABASE ADD SUPPLEMENTA

在Linux上使用logwatch分析监控日志文件

原文:http://seanlook.com/2014/08/23/linux-logwatch-usage/ 1. 介绍 在维护Linux服务器时,经常需要查看系统中各种服务的日志,以检查服务器的运行状态. 如登陆历史.邮件.软件安装等日志.系统管理员一个个去检查会十分不方便:且大多时候,这会是一种被动的检查,即只有在发现系统运行异常时才会想到去查看 日志以获取异常的信息.那么如何主动.集中的分析这些日志,并产生报告,定时发送给管理员就会显得十分重要. logwatch 是一款用 Perl 语

包含日志文件getshell

一.包含日志文件漏洞利用概述 当我们没有上传点,并且也没有url_allow_include功能时,我们就可以考虑包含服务器的日志文件.        利用思路也比较简单,当我们访问网站时,服务器的日志中都会记录我们的行为,当我们访问链接中包含PHP一句话木马时,也会被记录到日志中.                这时候我们如果知道服务器的日志位置,我们可以去包含这个文件从而拿到shell.其实整个“包含日志文件漏洞利用”最关键的就是找日志存放的“物理路径”,只要找到日志的物理存放路径,一切就可

使用logrotate管理nginx日志文件

本文转载自:http://linux008.blog.51cto.com/2837805/555829 描述:linux日志文件如果不定期清理,会填满整个磁盘.这样会很危险,因此日志管理是系统管理员日常工作之一.我们可以使用"logrotate"来管理linux日志文件,它可以实现日志的自动滚动,日志归档等功能.下面以nginx日志文件来讲解下logrotate的用法. 配置:1.在/etc/logrotate.d目录下创建一个nginx的配置文件"nginx"配置

sqlserver日志文件

过程:   昨天下午数据库奔溃,表现就是连不上数据库了,重启服务之后好了. 查询日文文件 , "Autogrow of file 'XX_log' in database 'XX' was cancelled by user or timed out after 1896 milliseconds. Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file

(整理二)读取大日志文件

一般读取文件有三种方式: 1.读取到内存中: 2.分块读取: 3.采用内存映射技术. 一.读取到内存中 此种方式比较适合小文件,可以通过文件流的方式直接读取到内存中进行处理. 二.分块读取 当文件很大时(特别是文件大小大于内存大小),读取到内存中就很不合理.这种时候,我们可以将文件进行分块,然后进行分块读取. 1 /// <summary> 2 /// 读取大文件方法 3 /// </summary> 4 /// <param name="initialPath&q

Shell执行将脚本里的变量打印到指定日志文件

首先需要定位获取任务的运行日志或者报错信息,才能定位问题. 通过shell调用有些脚本的话,日志信息会打印在shell里.不过也有用户在shell里调用正常,但是到crontab调用的时候就出错并且没日志了. 针对这种情况,可以在crontab里把任务执行的输出记录下来,后续出了问题可以到日志文件里获取任务的日志.可以参考:  abc -f xxx.sql >> /home/admin/logs/xxx.log 2>&1  待续...