bash 获取时间段内的日志内容
- 需求,获取时段内的/var/log/messages文件内出现错误的消息,支持多行的消息,支持天,小时分钟,秒级的区间,可以修改监控的日志对象
- #!/bin/bash
- if [ $# != 1 ] ; then
- echo "USAGE: $0 num[Y|D|H|M|S]"
- echo " e.g.: $0 12h"
- exit 1;
- fi
- interval=$1
- unit=$(echo $interval | tr -d [:blank:] |tr -d [:digit:] |tr -t [a-z] [A-Z])
- val=$(echo $interval | tr -d [:blank:] |tr -d [:alpha:] )
- #echo $val
- #echo $unit
- case $unit in
- Y) unit="years"
- ;;
- D)
- unit="days"
- ;;
- H)
- unit="hours"
- ;;
- M)
- unit="minutes"
- ;;
- S)
- unit="seconds"
- ;;
- *)
- echo "not"
- exit 1;
- ;;
- esac
- #echo $unit
- ts=$(date -d"-${val}${unit}" +"%s")
- echo $ts
- #date span one year 计算两年之间的秒数
- cts=$(date +"%s")
- x1=$(date -d"$(date +%Y)-01-01 00:00:00" +"%s")
- x2=$(date -d"$(date -d'-1years' +%Y)-01-01 00:00:00" +"%s")
- ((secs=$x1-$x2))
- checkfile=/var/log/messages
- #checkfile=/home/student/test.txt
- #first_line=$(awk -v ts="$ts" '{"date -d \""$1" "$2" "$3"\" +%s 2>/dev/null"|getline dt; if(dt>ts) {print $0; exit;}}' $checkfile)
- first_line=$(awk -v secs="$secs" -v ts="$ts" -v cts="$cts" '{"date -d \""$1" "$2" "$3"\" +%s 2>/dev/null"|getline dt;if(dt>cts){dt=dt-secs;}if(dt>ts) {print $0; exit;}}' $checkfile)
- echo "firstline is $first_line"
- if [ "$first_line"X == "X" ]; then exit 1; fi
- basedir=$(cd `dirname $0`;pwd)
- #echo "basedir is $basedir"
- log=$basedir/linux_messages.log
- >$log
- #function to handle one msg
- handleOneMsg()
- {
- msg="$1"
- has_error=$(echo "$msg"|grep -oie "\berror\b")
- if [ "$has_error"X != "X" ]; then
- #first we should encode the < > &
- msg_out=$(echo "$msg" |sed 's/&/&/g'| sed 's/</\</g'|sed 's/>/\>/g' )
- cat <<EOF >>$log
- <msg>
- <hostName>`hostname`</hostName>
- <product>LINUX</product>
- <date>`date +"%Y-%m-%d %T"`</date>
- <streamName>messages</streamName>
- <output>$msg_out</output>
- </msg>
- EOF
- fi
- }
- OLDIFS=IFS
- IFS=$'\n'
- for line in $(grep -A100000 -F "$first_line" $checkfile)
- do
- #date ..... one message is start with date
- #before another msg is the last msg's body
- line_begin=$(echo $line | awk '{print $1,$2,$3}')
- #echo "line begin is $line_begin"
- line_begin_ts=$(date -d "$line_begin" "+%s" 2>/dev/null)
- #echo "line begin ts is $line_begin_ts"
- if [ "${line_begin_ts}"X == "X" -o "$msg"X == "X" ] ; then
- msg="${msg}"$'\n'"${line}"
- continue;#consume next line
- fi
- handleOneMsg "$msg"
- msg=$line
- done
- handleOneMsg "$msg"
- IFS=$OLDIFS
bash 获取时间段内的日志内容的更多相关文章
- Shell 从日志文件中选择时间段内的日志输出到另一个文件
Shell 从日志文件中选择时间段内的日志输出到另一个文件 情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不方便.所以,相关人员希望能够查询某个时间 ...
- 利用webBrowser获取框架内Html页面内容
原文:利用webBrowser获取框架内Html页面内容 利用webBrowser获取页面比较简单,MSDN下有示例,在这里不必多说. 可是一些 HTML 文档由“框架”构成,或可以存放它们自己独特 ...
- SQL 获取时间段内日期列表
declare @start date,@end date; set @start='2010-01-01'; set @end='2010-02-01'; --获取时间段内日期列表 select [ ...
- SVN windows内修改日志内容(错误解决)
在我的电脑是windows 7,使用TortoiseSVN客户端,选中代码目录,点击右键,选择<显示日志> 显示日志信息 修改原来的日志信息(在需要修改的版本的日志中点击鼠标右键,显示如下 ...
- 根据时间段获取时间段内所有时间点(js)
Date.prototype.format=function (){var s='';s+=this.getFullYear()+'-';// 获取年份.s+=(this.getMonth()+1)+ ...
- SQL获取时间段内的所有月份
select convert(varchar(7),dateadd(month,number,'2010-01-01'),120) AS MONTHfrom master..spt_valueswhe ...
- sql获取时间段内的所有日期
,'2015-01-01 00:00:00') h INTO vinson_h DELETE vinson_h DECLARE @h int SELECT @h=DATEDIFF(HOUR,'2015 ...
- java获取时间段内的所有日期
public static void main(String[] args) { SimpleDateFormat dateFormat = new SimpleDateForm ...
- JAVA 获取时间段内的每一天
public class day { public static void main(String[] args) { // TODO Auto-generated method stub Strin ...
随机推荐
- Mac 安装Jupyter notebook
python:mac下自带Python 2.7.10 1.先升级了pip安装工具:sudo python -m pip install --upgrade --force pip 2.安装setupt ...
- iOS开发之 -- 帧动画的使用
在项目的开发过程中,我们经常会遇到使用动画的时候,比如我们在请求接口直接开始一个动画,请求结束后结束动画,下面我就给大家展示一个很方便的帧动画的用法: 代码如下: .h #import <Fou ...
- [UIImage _isCached]: message sent to deallocated instance
本文转载至 http://zhuhaibobb.blog.163.com/blog/static/2744006720124191633375/ 这几天做了个APP打开20份钟左右就强制退 ...
- 微软笔试题-highways
题目大意 一条单向的高速公路上有N辆车,在0时刻,每辆车分别在起点A[0],A[1]....处开始从北向南出发,每辆车有个终点B[0],B[1]....且每辆车有个限制速度 V[0],V[1]... ...
- 【BZOJ2827】千山鸟飞绝 hash+堆+SBT
[BZOJ2827]千山鸟飞绝 Description 话说有一天doyouloveme和vfleaking到山里玩.谁知doyouloveme刚刚进山,所有的鸟儿竟被他的神犇气场给惊得全部飞走了.v ...
- MD5加密算法全解析
转自:http://blog.csdn.net/nzfxx/article/details/51804193 大家好,我们现在来讲解关于加密方面的知识,说到加密我认为不得不提MD5,因为这是一种特殊的 ...
- java nio探险
区别于io: nio是基于通道和缓冲区的,io是基于字节流和字符流的,(千万别被这些破名词唬住).以读取文件为例,文件就是自来水厂,通道就是自来水管道,缓冲区就是你家的缸(或者盛水的xx容器,例如你的 ...
- angularJs-脏检查
来自:http://www.cnblogs.com/liuyanan/p/4935652.html scope是一个指向应用model的object,也是表达式的执行上下文. scope被放置在一个类 ...
- Servlet------>mvc模式原理图
常用开发模式: 客户在客户端 访问,发送请求到servlet servlet调用service接口 service实现类调用dao接口 dao接口通过jdbc技术操作数据库,并存储到javabean, ...
- 【Python数据挖掘】决策树、随机森林、Bootsing、
决策树的定义 决策树(decision tree)是一个树结构(可以是二叉树或非二叉树).其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别. ...