我是靠谱客的博主 阳光春天,最近开发中收集的这篇文章主要介绍监控日志文件shell脚本,截取某段时间,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#!/bin/bash

declare -A dict
dict=([key1]=0)
#第一步定义字典类型变量
#给key1动态赋值,后面可以直接取key1

# 指定log日志所在文件夹
curr_dir=/root/shells/

# 指定log日志的绝对路径
file_path=${curr_dir}/test.log

# 获取今天的时间,时间格式为yyyy-mm-dd
today=`date +%F`
# 获取7天前的时间
#today=`date -d -7day +%F`

# 过滤出今天的数据,写入到日期文件里
#today_log=`sed -n '/${today} 00:00:00*/,/${today} 23:59:59*/p' ${file_path} > ${curr_dir}/${today}.log`
#echo ${today_log}

# 过滤出今天的数据,写入到日期文件里
sl=`grep -n "${today}" ${file_path} | head -1 | awk -F ":" '{print $1}'`
el=`cat ${file_path} | wc -l`

today_log=`sed -n ''${sl}','${el}' p' ${file_path} > ${curr_dir}/${today}.log`
#sed -n截取两个行号之间的内容,写入新的文件

# 过滤出今天2:00以前的数据
#prev_2=`sed -n '/${today} 00:00:00*/,/${today} 01:59:59*/p' ${file_path} > ${curr_dir}/prev_2.log`
prev_2=`cat ${curr_dir}/${today}.log | awk '$2<="01:59:59.999"' > ${curr_dir}/prev_2.log`

echo ${prev_2}

#------------------------------------------------------

# 判断未出现SP_INSERT.sql
sp_insert=`cat ${curr_dir}/prev_2.log | grep -w 'SP_INSERT.sql runDate = ${today}' | wc -l`

# 如果sp_insert = 0, 则shell脚本报错,001文件未送达
if [ ${sp_insert} -eq 0 ]; then
  echo "001文件未送达"
  exit 1;
fi

#grep -w用于字符串精确匹配
#wc -l 读取文件的行数

#-----------------------------------------------------------------
## 匹配timeout的数量
#timeout=`cat  | grep -w 'timeout' | wc -l`
## 当timeout>=2时,shell脚本报错
#if [ ${timeout} -ge 2 ]; then
#  echo "timeout数量大于等于2"
#  exit 1;
#fi

# 匹配timeout的内容
#timeout=`egrep -B 1 '.*timeout.*' ${curr_dir}/${today}.log | cut -d"-" -f5 | cut -d" " -f2`
timeout=`egrep -B 1 "timeout" ${curr_dir}/${today}.log | cut -d " " -f 8`
for i in `echo ${timeout}`
do
  if [[ $i =~ ".sql" ]]; then
    if [ -z ${dict[${i}]} ];then
    #if [ ! -n ${dict[key1]} ];then
        dict[${i}]=1
    else
        ((dict[${i}]++))
    fi
  fi
done

#egrep -B 1 取出相匹配的关键字的一行以及上一行内容
#for i in 1 2 3 4 5        do echo $i done        输出i遍历in里面的内容,该处是遍历${timeout}
#使用[[ … ]]条件判断结构,能够防止脚本中的许多逻辑错误
#if [ -z str1 ]       当串的长度为0时为真(空串) 
#
#


# 当timeout>=2时,shell脚本报错
for k in ${dict[*]}
do
  if [ ${k} -ge 2 ]; then
    echo "timeout数量大于等于2"
    exit 1;
  fi
done

# 同一sql脚本运行4次未成功
error=`egrep -n 'ERROR - (.*)' ${curr_dir}/${today}.log | cut -d " " -f 5 | awk '{a[$1]+=1}END{for (i in a)print a[i]}'`

# 只要有一个超过4,则抛出异常
for i in `echo ${error}`
do
  if [ ${i} -ge 4 ]; then
    echo "相同sql错误超过4次"
    exit 1;
  fi
done

最后

以上就是阳光春天为你收集整理的监控日志文件shell脚本,截取某段时间的全部内容,希望文章能够帮你解决监控日志文件shell脚本,截取某段时间所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部