linux日志统计error次数,Linux三剑客(awk-7)-awk项目实战(统计日志错误级别)

如何使用shell命令获取JSON串中的日志级别。进行统计呢?

2019-07-05 13:52:23,505 [XX接口] [C201907051352239314] : {"code":"2202","createDate":"2019-07-05 13:52:23","excType":"validateException","level":"warn","merchId":"AB20171101188709","msg":"系统异常","orderId":"T9292019070513****542","serviceId":"XXserviceId","serviceName":"XX接口","type":"user"}

按照错误码的划分,可以将日志级别划分为informal [正常级别]、 warn [警告级别] 、error[错误级别]、fatal[致命级别]。

但是数据是保存到JSON串中的,如何在JSON串中将数据取出来,并且进行汇总、排序、打印呢?

#!/bin/sh

fileName=$1

level=$2

echo "============================================"

echo "[获取异常信息]-[参数准备]-[文件名]-[$fileName]"

echo "[获取异常信息]-[参数准备]-[异常等级]-[$level]"

echo "============================================"

if [ -z "$fileName" ];then

echo "[参数fileName为空]-[默认使用client-api-error.log]"

fileName="client-api-error.log"

fi

echo "[获取异常信息]-[异常汇总]-[开始]"

awk -F '("level":"|","merchId")' '{print $2}' ../log/$fileName | awk '/[^\s]$/{print $0}' | sort | uniq -c | sort -nr |

awk 'BEGIN{printf "%s\n%s\n","异常类型统计-[开始]","[异常级别]-[数量]"}

{sum+=$1}

{printf "[%-8s]-[%-4s]\n",$2,$1}

END{ {printf "%s%s%s\n","[异常汇总]-[共统计异常",sum,"条]"}}'

echo "[获取异常信息]-[异常汇总]-[结束]"

echo "============================================"

if [ -n "$level" ];then

awk -v level=$level '/'$level'/{print $0}' ../log/$fileName >$level'.log'

echo "[异常信息输出]-[错误日志已输出到 "$level".log文件中]"

else

echo "[无异常信息输出]"

fi

echo "============================================"

84e30937a2b6

效果图

需要注意的:

如何精确得到汇总数据

输出分割符可以和正则Pattern可以混合使用,进行精确切分。

awk -F '("level":"|","merchId")' '{print $2}'实际上将日志切分成3段:

2019-07-05 13:52:23,505 [XX接口] [C201907051352239314] : {"code":"2202","createDate":"2019-07-05 13:52:23","excType":"validateException","level":"

level

","merchId":"AB20171101188709","msg":"系统异常","orderId":"T9292019070513****542","serviceId":"XXserviceId","serviceName":"XX接口","type":"user"}

如何统计重复次数

去重一般有两个命令:sort -u(niq)和uniq,但实际上使用uniq之前,也要进行一次sort命令。

$ awk -F '("level":"|","merchId")' '{print $2}' client-api-error.log |sort|uniq -c

8

1 error

2 fatal

12 informal

2 warn

使用-uniq -c(ount)命令,便可得到重复次数。

如何去重空行

依旧使用awk 的正则pattern,在正则中\s代表的是空白,那[^\s]便是非空白,即我们要输出的行。

4. 如何统计一列的数据值

我们知道,shell中awk命令是逐行执行。那么实际上

84e30937a2b6

awk命令

若一列中有4行,那么红框中的内容会执行4次。而非一次,本质上就是一个循环。我们我们便可以使用{sum+=$1},将每行的第一列汇总起来。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值