在linux中使用shell來分析統計日志中的信息


在運維工作中,要經常分析后台系統的日志,通過抓取日志中的關鍵字信息,對抓取結果進行統計,從而為監控結果提供基礎數據。
下面的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM