Linux的shell,三剑客日志分析

一、shell

1、Linux Shell 是一种命令行解释器,也被称为shell或命令行界面(CLI).用于与Linux操作系统进行交互。它是用户与操作系统之间的接口。允许用户执行各种命令和操作。

2、Linux shell 提供了许多内置命令和功能,同时还支持脚本编程。使用户可以将一系列命令组合成脚本文件,以自动化任务和批处理操作。

3、Shell 脚本可以包含条件语句、循环、函数等常见的编程元素,使用户能够更加高效完成重复性的操作。

二、awk的使用

1、awk简介

  AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位

创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

linux中三剑客功能:

  grep:过滤文本
  sed:修改文本
  awk:处理文本

2、awk [参数] [处理内容] [操作对象]

例1:awk -F : '{print $1}' /etc/passwd   打印以冒号分割文本passwd第一列内容

参数 -F  制定文本分割符(默认空格作为分割符),以冒号作为分割符 -F : 

处理内容 '{print $NF}' print 打印、$ 变量名、NF 变量值(NF为0打印全部,为1打印第一列)

原文件                    处理后的内容

例2: awk -F : '/^root/{print $0}' /etc/passwd  打印包含root的整列内容,^通配符,0表示整列内容

例3:awk '{print $1}' access.log | wc -l   统计第一列ip的数据条数(默认空格分割)

wc 命令用于计算字数。

参数:   -c,bytes:统计字节数。

    -m,chars:统计字符数。

    -w,words:统计字数。

    -l,lines:统计行数。

    -L,max-line-length:统计最长行的长度。

例4:awk '{print $1}' access.log | uniq | wc -l 统计第一列ip的数据条数,去除重复的(默认空格分割)

uniq 检查文本重复出现的行列

三、sed的使用

  sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,

接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直

到文件末尾。文件内容并没有改变,除非使用重定向存储输出。

创建一个sed.txt文件

1、sed使用

例1:sed '1a 999' sed.txt   在文本文件sed.txt第一行下面新增999

  1a表示第一行后(亦即是加在第二行)加上

注意:sed.txt内容本身没有变

例2: sed 's/ss/cc/g' a.txt     把ss替换成cc

sed 's/要被取代的字串/新的字串/g'

四、cat使用

例1:cat sed.txt|sort  给文件内容排序

    cat sed.txt|sort -r  给文件反向排序

注意:sed.txt内容本身没有变

五、sort使用  

  sort命令将文件进行排序,并将排序的结果标准输出。

      sort

  -r:表示降序排列,默认是升序

  -n:按数值大小排序

  -t:设置排序时所用的分隔字符,sort命令默认字段分隔符为空格和Tab

  -k:指定需要排序的列

例1:cat access.log|awk '{print $7}'|sort|uniq -c|sort -n -k 1 -r

  

例2:sort -t : -nrk3 a.txt.    设置排序的分隔字符,第三列按数值大小倒序

     

六、uniq用法

1、uniq -c sed.txt

  -c: 打印每行出现的次数

  -d:打印重复出现的行

结论:uniq只会按照连续(或相邻的)重复值去重统计

2、解决连续重复的去重统计问题

uniq -c sed.txt | sort -r   排序后去重

问题:还是有重复的,并没有做到排序去重

改变命令执行顺序:cat sed.txt | sort -r | uniq -c  先查看sed.txt,排序,去重

七、查看处理日志

1、例1:awk '{print $7}' /data/nginx/log/access.log  查看访问了那些接口

  

  cat access.log | awk '{print $7}' | sort -r | uniq -c 查看日志第7列降序排列,打印每行出现的次数

  cat access.log | awk '{print $7}' | sort | uniq -c |sort -nrk 1 查看日志第7列降序排列,打印每行出现的次数,按照第一列数值大小降序排列

  cat access.log | awk '{print $7}' | sort | uniq -c |sort -nrk 1 | awk '$1 >20 {print}' 查看日志第7列升序,打印每行出现的次数,按照第一列数值大小降序排列并且出现次数大于20

2、echo 0>access.log     清空日志

3、tail -n 300 -f access.log 动态查看300行日志

4、awk '{print $7}' /data/nginx/log/access.log|sort|uniq   排序去重查找日志access.log里的ip

     awk '{print $7}' /data/nginx/log/access.log|sort|uniq|wc -l   排序去重查找日志access.log里的ip的个数  

  

5、awk '{print $1,$7}' access.log|grep 172.16.227.1     查找某个ip访问接口了那些接口

   awk '{print $1,$7}' access.log|grep 172.16.227.1|sort|uniq          进一步排序去重(注意uniq去重之前要先排序)    

  

6、awk '{print $4,$1,$7}' access.log|grep 14/Aug/2022:09:37:13     查找特定时间的访问ip和接口

   awk '{print $4,$1,$7}' access.log|grep 14/Aug/2022:09:37:13|wc -l   查找特定时间的访问量

   awk '{print $4,$1,$7}' access.log|grep 14/Aug/2022:09:37:13|awk '{print $2}'|sort|uniq|wc -l  特定时间访问量去重

  

  实际压力测试过程中不需要统计不同ip不同访问次数,因为在访问过程中的真实压力是真实的、存在的,不会因为jvm、redis对服务器没有压力

7、接口统计小工具

 1 import matplotlib.pyplot as plt
 2 
 3 # 给定字段和对应的value数值
 4 labels = ['users', 'queryOrderDetail', 'queryOrderHeader', 'headerPagelist','orderNumber','login','list']
 5 sizes = [6556, 3696, 1933, 809, 808,567,501]
 6 
 7 # 计算总值
 8 total = sum(sizes)
 9 
10 # 计算每个字段所占比例
11 percentages = [size / total for size in sizes]
12 
13 # 绘制饼图
14 fig, ax = plt.subplots()
15 ax.pie(percentages, labels=labels, autopct='%1.1f%%', startangle=90)
16 ax.axis('equal')  # 保持饼图为圆形
17 
18 plt.show()

 

posted @ 2022-11-07 23:07  xiao_wlkq  阅读(167)  评论(0编辑  收藏  举报