在运维工作中,要经常分析后台系统的日志,通过抓取日志中的关键字信息,对抓取结果进行统计,从而为监控结果提供基础数据。
下面的shell演示了如何从大量的日志中取得想要的统计结果。其中展示了各种有趣的命令和shell的用法。
具体功能就是统计出某个关键字在不同时段的出现次数。结果格式为“HH 次数”

#!/bin/sh

# 取得YYYYMMDD格式的日期,以确定所要抓取的日志文件范围
current_date=`date "+%Y%m%d"`; # 拼接组成需要抓取的日志文件名称
file_name=$current_date"*all*"; # 在一批日志文件中查找某个关键字,并将查找结果形成一个临时文件。
# 临时文件的结果格式为:文件名:日志内容
#./pmclog/20171020_all_000000.log:00:00:00.876652|D|38|0327|get|CAccumulate.cpp|delete main
grep 'delete main' ./pmclog/$file_name >> term_del.log; # 从临时文件中取得时段信息,该信息是原始日志内容的前两个字符,并将结果保存到临时文件中
# 如果需要其他信息,那么就需要修改awk的命令参数了。
awk -F ':' '{print $2}' term_del.log >> term_del_hour.log; rm term_del.log;
rm term_del_hour_times.log; # 取得当前的时段
hour=`date "+%H"`; # 使用循环,对今天的每个时段进行统计
for(( i=0; i<= $hour; i++))
do
# 作为数字的时候,变量i的前面是没有0的,这里要格式化出来一个0来,0点就是“00”,这样可以与临时文件中的信息相匹配
hour2=$(printf '%02d' $i); # 使用 grep -o 和 wc -l的结合操作,就可以统计一个特定字符在文件中出现的次数。
# 在前面使用echo 可以标记出来每一个次数是哪个时段的数据
# 最终的term_del_hour_times.log就是最终的结果文件。
echo $hour2 `grep -o $hour2 term_del_hour.log | wc -l` >> term_del_hour_times.log;
done; rm term_del_hour.log ;

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

另外一种简洁的用法

通过一个关键字对日志进行分析统计

在所有的文件中找“send ok”
grep 'send ok' 20171022*all* | more
输出的结果为:
20171022_130.76.0.145.31151_all_000000.log:00:02:16.989944|D|GGSN7.ocs1;1508598098;38971070;09566300|15537090456|34|0525|Send|Session.cpp|send ok

通过对上面的查询结果进行分析,得到一些有意义的次数统计。

命令的意思就是,首先以“|”分割,取得查询结果中的第三列,然后,再以“.”分割,取得结果中的第一列,最后,通过排序,统计每个字符的次数。
grep 'send ok' 20171022*all*  | awk -F "|" '{print $3}' | awk -F '.'  '{print $1}' | sort | uniq -c | more

100 GGSN7
 99 GGSN8

在linux中使用shell来分析统计日志中的信息的更多相关文章

  1. 使用shell命令分析统计日志

    用户需要登录统计信息,当分析用户行为,使用shell通常可以很容易地取出了大量的数据.删除,然后放入excel统计. 例如:统计日志含有loadCustomProcess这个地址的訪问,按訪问耗时排序 ...

  2. [linux] shell脚本编程-统计日志文件中的设备号发通知邮件

    1.日志文件列表 比如:/data1/logs/2019/08/15/ 10.1.1.1.log.gz 10.1.1.2.log.gz 2.统计日志中的某关键字shell脚本 zcat *.gz|gr ...

  3. shell 在手分析服务器日志【转】

    自己的小网站跑在阿里云的 ECS 上面, 偶尔也去分析分析自己网站服务器日志,看看网站的访问量.看看有没有黑阔搞破坏!于是收集,整理一些服务器日志分析命令,大家可以试试! awk '{print $1 ...

  4. shell脚本分析nginx日志

    shell脚本分析nginx日志: name=`awk -F ',' '{print $13":"$32}' $file | awk -F ':' '{print $4}'`ech ...

  5. Linux下添加shell脚本使得nginx日志每天定时切割压缩

    Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常 ...

  6. Python统计日志中每个IP出现次数

    介绍了Python统计日志中每个IP出现次数的方法,实例分析了Python基于正则表达式解析日志文件的相关技巧,需要的朋友可以参考下 本脚本可用于多种日志类型 #-*- coding:utf-8 -* ...

  7. 转载:Linux命令经典面试题:统计文件中出现次数最多的前10个单词

    1.使用linux命令或者shell实现:文件words存放英文单词,格式为每行一个英文单词(单词可以重复),统计这个文件中出现次数最多的前10个单词 主要考察对sort.uniq命令的使用,相关解释 ...

  8. 利用shell命令分析服务器日志

      在没有专业日志分析系统的情况下,我们有时需要对日志进行简单的分析,下面列出一些常用的shell命令分析日志的方法,一定要收藏 1.查看有多少个ip访问 awk '{print $1}' log_f ...

  9. 统计日志中ip出现的次数

    grep -r 'GET /weixin/weixin_izp/index.html' ./chunyun.access.log > ~/access.log cat access.log |a ...

随机推荐

  1. Spring 之自动化装配 bean 尝试

    [Spring之自动化装配bean尝试] 1.添加dependencies如下所示(不是每一个都用得到 <dependencies> <dependency> <grou ...

  2. Qt debug和release

    debug会默认给变量赋初始值,但是release不会. 所以: 在头文件中声明指针P* p时,最好给它初始化:P* p=NULL; 不然有可能造成野指针的情况

  3. react native 中的ReadableMap和WritableMap的使用

    react native跟安卓原生交互的数据类型中,有两个比较陌生的类型,ReadableMap和WritableMap. ReadableMap和WritableMap,顾名思义,反正是map. W ...

  4. codeforces 357

    C 题意: ###n个勇士编号1-n,m个回合对战,每个回合由仍留在游戏里的编号Li~Ri的人参加,胜者为Xi,输的人退出游戏. ###求一个a1-an的序列,若ai为胜者,则ai=0,否则ai=打败 ...

  5. fabric生产环境代码包发布管理

  6. Hibernate -- 映射多对多双向关联关系

    1. 示例代码: Student.java package cn.itcast.many2many; import java.util.HashSet; import java.util.Set; @ ...

  7. Pandas数据帧(DataFrame)

    数据帧(DataFrame)是二维数据结构,即数据以行和列的表格方式排列. 数据帧(DataFrame)的功能特点: 潜在的列是不同的类型 大小可变 标记轴(行和列) 可以对行和列执行算术运算 结构体 ...

  8. LeetCode第[42]题(Java):Trapping Rain Water (数组方块盛水)——HARD

    题目:接雨水 难度:hard 题目内容: Given n non-negative integers representing an elevation map where the width of ...

  9. java reflect反射---Java高级开发必须懂的

    理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底层的操作会很有帮助.  一.Class类的使用         1.万事万物皆对象,( ...

  10. 【Android压力测试】monkey压力测试

    1.首先安装adb.java环境 2.下载地址: 链接: https://pan.baidu.com/s/1i5xltpN 密码: ra6g monkey 很简单的理解是 像猴子一样一顿点乱点,看是否 ...