日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 脚本详解,shell脚本分析日志

發布時間:2025/5/22 linux 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 脚本详解,shell脚本分析日志 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求

臨時接到一個需求,需要幫忙check一下線上新老用戶區分是否正確。

新老用戶確認的方法:

老用戶(注冊4天以外), 新用戶(注冊4天以內)

也就是說,需要check日志中請求的時間點和注冊的時間戳,相差是不是超過4天或者小于4天

日志大致如下:

2018-12-28/15:30:57 [strategy.go::xxxx.com/xxx/xxx/xxx.(*Strategy).FindStrategy] [INF] 222222222222222222:new_user_xxx_xxx_xxx, a97774397e994a4d, {"uid":"72666259","device_code":"A000007527957C","page":1,"count":3},1545982248

改掉了一些日志中的敏感信息

思路

利用grep 篩選 new_user/old_user,并將這一行日志,重定向到新的文件中

讀取文件,分別提取前面的請求時間,并轉化為時間戳,與這一行日志最后的時間戳對比

所以有了大致結構:

1.利用grep awk 縮小日志

2.> 將日志重定向到文本文件中

3.利用while 循環讀取文件

4.字符串截取前面的時間,并轉換為時間戳

5.字符串截取最后的時間戳

6.對比兩個時間戳的間隔時間

腳本解析

按照上面的思路,最終腳本如下:

grep new_user /logs/engine_info.log |awk -F',' '{print $1,$3}' >new_user.txt

sleep 1

while read line;

do

a=${line:0:19}

#注冊時間戳

timestamp=${line:0-10}

#請求時間戳

actualtime=${a/\// }

time=`date -d "$actualtime" +%s`

a=$((timestamp+345600))

#[ $time -gt $a ];echo $?

if [ $time -gt $a ];

then

echo "error"

echo $line

fi;

done

第一行,結合grep和awk、重定向,將日志輸出到new_user.txt中

讀取文件

a=${line:0:19}

這邊是截取前面19個字符,即

2018-12-28/15:30:57

由于這個格式無法轉換為時間戳,所以還需要將中間的 / 替換為空格

actualtime=${a/\// } ----結果 2018-12-28 15:30:57

然后轉換為時間戳

date -d "$actualtime" +%s ------結果 1545961368

注冊時間戳是日志的最后10位,再次進行截取

timestamp=${line:0-10} ----結果是1545982248

下面只對比二者之間的差距,以新用戶為例,是期望注冊時間是4天以內的,即時間戳相差 345600

期望請求的時間戳,比注冊時間+345600 的結果要小,如果請求的時間戳比它大,那么就是錯誤的情況,最終邏輯如下:

a=$((timestamp+345600))

if [ $time -gt $a ];

then

echo "error"

echo $line

fi;

done

以上,所有為一次簡單的日志分析實踐。

總結

以上是生活随笔為你收集整理的linux 脚本详解,shell脚本分析日志的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。