• 日志分析篇

  • 11.6 Windows日志分析

  • 11.6.1 Windows事件日志简介

  • Windows系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。
  • Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。
  • 系统日志

  • 记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。系统日志中记录的时间类型由Windows NT/2000操作系统预先定义。
    
    默认位置: %SystemRoot%\System32\Winevt\Logs\System.evtx
  • 应用程序日志

  • 包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录,也许会有助于你解决问题。 
    
    默认位置:%SystemRoot%\System32\Winevt\Logs\Application.evtx
  • 安全日志

  • 记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、帐号管理、策略变更、系统事件。安全日志也是调查取证中最常用到的日志。默认设置下,安全性日志是关闭的,管理员可以使用组策略来启动安全性日志,或者在注册表中设置审核策略,以便当安全性日志满后使系统停止响应。
    
    默认位置:%SystemRoot%\System32\Winevt\Logs\Security.evtx
  • 系统和应用程序日志存储着故障排除信息,对于系统管理员更为有用。 安全日志记录着事件审计信息,包括用户验证(登录、远程访问等)和特定用户在认证后对系统做了什么,对于调查人员而言,更有帮助。
  • 11.6.2 审核策略与事件查看器

  • Windows Server 2008 R2 系统的审核功能在默认状态下并没有启用 ,建议开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等。
  • PS:默认状态下,也会记录一些简单的日志,日志默认大小20M
  • 设置1开始 → 管理工具 → 本地安全策略 → 本地策略 → 审核策略,参考配置操作:
  • 设置2:设置合理的日志属性,即日志最大大小、事件覆盖阀值等:
  • 查看系统日志方法

  • 开始菜单上,依次指向所有程序”管理工具,然后单击事件查看器

  • 按 "Window+R",输入 ”eventvwr.msc 也可以直接进入“事件查看器

  • 11.6.3 事件日志分析

  • 对于Windows事件日志分析,不同的EVENT ID代表了不同的意义,摘录一些常见的安全事件的说明:
    • 事件ID
    • 说明
    • 4624
    • 登录成功
    • 4625
    • 登录失败
    • 4634
    • 注销成功
    • 4647
    • 用户启动的注销
    • 4672
    • 使用超级用户(如管理员)进行登录
    • 4720
    • 创建用户
  • 每个成功登录的事件都会标记一个登录类型,不同登录类型代表不同的方式:
    • 登录类型
    • 描述
    • 说明
    • 2
    • 交互式登录(Interactive)
    • 用户在本地进行登录。
    • 3
    • 网络(Network)
    • 最常见的情况就是连接到共享文件夹或共享打印机时。
    • 4
    • 批处理(Batch)
    • 通常表明某计划任务启动。
    • 5
    • 服务(Service)
    • 每种服务都被配置在某个特定的用户账号下运行。
    • 6
    • 解锁(Unlock)
    • 屏保解锁。
    • 7
    • 网络明文(NetworkCleartext)
    • 登录的密码在网络上是通过明文传输的,如FTP。
    • 8
    • 网络明文(NetworkCleartext)
    • 使用带/Netonly参数的RUNAS命令运行一个程序。
    • 9
    • 远程交互,(RemoteInteractive)
    • 通过终端服务、远程桌面或远程协助访问计算机。
    • 10
    • 缓存交互(CachedInteractive
    • 通过终端服务、远程桌面或远程协助访问计算机。
  • 关于更多EVENT ID,详见微软官方网站上找到了“Windows 7 和 Windows Server 2008 中的安全事件的说明”。
  • 举例1:可以利用eventlog事件来查看系统账号登录情况
  • 开始菜单上,依次指向所有程序管理工具,然后单击事件查看器

  • 在事件查看器中,单击“安全,查看安全日志;

  • 在安全日志右侧操作中,点击筛选当前日志,输入事件ID进行筛选。

    4624 --登录成功 4625 --登录失败 4634 -- 注销成功 4647 -- 用户启动的注销 4672 -- 使用超级用户(如管理员)进行登录

  • 我们输入事件ID:4625进行日志筛选,发现事件ID:4625,事件数175904,用户登录失败了175904次,那么这台服务器管理员账号可能遭遇了暴力猜解
  • 举例2:可以利用eventlog事件来查看计算机开关机的记录:(步骤同上)
  • 1、在“开始”菜单上,依次指向“所有程序”“管理工具”,然后单击“事件查看器”
  • 2、在事件查看器中,单击“系统”,查看系统日志;
  • 3、在系统日志右侧操作中,点击“筛选当前日志”,输入事件ID进行筛选。
  • 其中事件ID 6006 ID6005、 ID 6009就表示不同状态的机器的情况(开关机)。 6005 信息 EventLog 事件日志服务已启动。(开机) 6006 信息 EventLog 事件日志服务已停止。(关机) 6009 信息 EventLog 按ctrl、alt、delete键(非正常)关机
  • 我们输入事件ID:6005-6006进行日志筛选,发现了两条在2024/8/24:10:51左右的记录,也就是我刚才对系统进行重启的时间。
  •  
  • 11.6.4 日志分析工具

  • Log Parser

  • Log Parser(是微软公司出品的日志分析工具,它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory。它可以像使用 SQL 语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。
  • Log Parser 2.2下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=24659
  • Log Parser 使用示例:Log Parser Rocks! More than 50 Examples! | LichtenBytes
  • 基本查询结构

  • Logparser.exe –i:EVT –o:DATAGRID "SELECT * FROM c:\xx.evtx"
  • 使用Log Parser分析日志

  • 1、查询登录成功的事件
  • 登录成功的所有事件
    LogParser.exe -i:EVT –o:DATAGRID  "SELECT *  FROM c:\Security.evtx where EventID=4624"
    
    指定登录时间范围的事件:
    LogParser.exe -i:EVT –o:DATAGRID  "SELECT *  FROM c:\Security.evtx where TimeGenerated>'2018-06-19 23:32:11' and TimeGenerated<'2018-06-20 23:34:00' and EventID=4624"
    
    提取登录成功的用户名和IP:
    LogParser.exe -i:EVT –o:DATAGRID  "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as Username,EXTRACT_TOKEN(Message,38,' ') as Loginip FROM c:\Security.evtx where EventID=4624"
    
  • 2、查询登录失败的事件
  • 登录失败的所有事件:
    LogParser.exe -i:EVT –o:DATAGRID  "SELECT *  FROM c:\Security.evtx where EventID=4625"
    
    提取登录失败用户名进行聚合统计:
    LogParser.exe  -i:EVT "SELECT  EXTRACT_TOKEN(Message,13,' ')  as EventType,EXTRACT_TOKEN(Message,19,' ') as user,count(EXTRACT_TOKEN(Message,19,' ')) as Times,EXTRACT_TOKEN(Message,39,' ') as Loginip FROM c:\Security.evtx where EventID=4625 GROUP BY Message" 
    
  • 3、系统历史开关机记录:
  • LogParser.exe -i:EVT –o:DATAGRID  "SELECT TimeGenerated,EventID,Message FROM c:\System.evtx where EventID=6005 or EventID=6006"
    
  • LogParser Lizard

  • 对于GUI环境的Log Parser Lizard,其特点是比较易于使用,甚至不需要记忆繁琐的命令,只需要做好设置,写好基本的SQL语句,就可以直观的得到结果。
  • 下载地址:Log Parser Lizard: Advanced SQL Analysis for Log Files
  • 依赖包:Microsoft .NET Framework 4 .5
  • 下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=42642
  • Event Log Explorer

  • Event Log Explorer是一款非常好用的Windows日志分析工具。可用于查看,监视和分析跟事件记录,包括安全,系统,应用程序和其他微软Windows 的记录被记载的事件,其强大的过滤功能可以快速的过滤出有价值的信息。
  • 下载地址:Event Log Explorer - Download
  • 参考链接:
  • Windows日志分析 第三十一期 取证实战篇-Windows日志分析

  • 11.7 Linux日志分析

  • 11.7.1 前言

  • Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。 本文简介一下Linux系统日志及日志分析技巧。
  • 11.8.1 日志简介

  • 日志默认存放位置:/var/log/

  • 查看日志配置情况:more /etc/rsyslog.conf

  • 日志文件
  • 说明
  • /var/log/cron
  • 记录了系统定时任务相关的日志
  • /var/log/cups
  • 记录打印信息的日志
  • /var/log/dmesg
  • 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
  • var/log/mailog
  • 记录邮件信息
  • /var/log/message
  • 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件
  • /var/log/btmp
  • 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看
  • var/log/lastlog
  • 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看
  • /var/log/wtmp
  • 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看
  • /var/log/utmp
  • 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询
  • /var/log/secure
  • 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
  • 比较重要的几个日志:

  • 登录失败记录:
  • /var/log/btmp //lastb
  • 最后一次登录:
  • /var/log/lastlog //lastlog
  • 登录成功记录:
  •  /var/log/wtmp //last
  • 登录日志记录:
  • /var/log/secure
  • 目前登录用户信息:
  • /var/run/utmp //w、who、users
  • 历史命令记录:history
  • ​ 仅清理当前用户:
  •  history -c
  •  11.9.1日志分析技巧

  •  A、常用的shell命令

  • Linux下常用的shell命令如:find、grep 、egrep、awk、sed
  • 小技巧:
  • 1、grep显示前后几行信息:
  • 	标准unix/linux下的grep通过下面參数控制上下文:
    ​	grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行
    ​	grep -B 5 foo file 显示foo及前5行
    ​	grep -A 5 foo file 显示foo及后5行
    ​	查看grep版本号的方法是
    ​	grep -V
  • 2、grep 查找含有某字符串的所有文件
  • 	grep -rn "hello,world!" 
    	* : 表示当前目录所有文件,也可以是某个文件名
    	-r 是递归查找
    	-n 是显示行号
    	-R 查找所有文件包含子目录
    	-i 忽略大小写
  • 3、如何显示一个文件的某几行:
  • 	cat input_file | tail -n +1000 | head -n 2000
    	#从第1000行开始,显示2000行。即显示1000~2999行
  • 4、在目录/etc中查找文件init
  • find /etc -name init
    
  • 5、只是显示/etc/passwd的账户
  • `cat /etc/passwd |awk  -F ':'  '{print $1}'`  
    //awk -F指定域分隔符为':',将记录按指定的域分隔符划分域,填充域,​$0则表示所有域,$1表示第一个域,​$n表示第n个域。
  • 6.删除历史操作记录,只保留前153行
  • sed -i '153,$d' .bash_history
  • B、日志分析技巧

  • 1、/var/log/secure
  • 1、定位有多少IP在爆破主机的root帐号:    
    grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
    
    定位有哪些IP在爆破:
    grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
    
    爆破用户名字典是什么?
     grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
     
    2、登录成功的IP有哪些: 	
    grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
    
    登录成功的日期、用户名、IP:
    grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' 
    
    3、增加一个用户kali日志:
    Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
    Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali
    , shell=/bin/bash
    Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali
    #grep "useradd" /var/log/secure 
    
    4、删除用户kali日志:
    Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
    Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali'
    Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'
    # grep "userdel" /var/log/secure
    
    5、su切换用户:
    Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)
    
    sudo授权执行:
    sudo -l
    Jul 10 00:43:09 localhost sudo:    good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now
  • 2、/var/log/yum.log
  • 软件安装升级卸载日志:
  • yum install gcc
    
    [root@bogon ~]# more /var/log/yum.log
    
    Jul 10 00:18:23 Updated: cpp-4.8.5-28.el7_5.1.x86_64
    Jul 10 00:18:24 Updated: libgcc-4.8.5-28.el7_5.1.x86_64
    Jul 10 00:18:24 Updated: libgomp-4.8.5-28.el7_5.1.x86_64
    Jul 10 00:18:28 Updated: gcc-4.8.5-28.el7_5.1.x86_64
    Jul 10 00:18:28 Updated: libgcc-4.8.5-28.el7_5.1.i686

  • 11.8 Web日志分析

  • 11.8.1 Web日志

  • Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析,不仅可以帮助我们定位攻击者,还可以帮助我们还原攻击路径,找到网站存在的安全漏洞并进行修复。
  • 我们来看一条Apache的访问日志:
  • `127.0.0.1 - - [11/Jun/2018:12:47:22 +0800] "GET /login.html HTTP/1.1" 200 786 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"`
  • 通过这条Web访问日志,我们可以清楚的得知用户在什么IP、什么时间、用什么操作系统、什么浏览器的情况下访问了你网站的哪个页面,是否访问成功。
  • 本文通过介绍Web日志安全分析时的思路和常用的一些技巧。
  • 11.8.2 日志分析技巧

  • 在对WEB日志进行安全分析时,一般可以按照两种思路展开,逐步深入,还原整个攻击过程。
  • 第一种:确定入侵的时间范围
  • 以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程。
  • 第二种:攻击者在入侵网站后,通常会留下后门维持权限,以方便再次访问,我们可以找到该文件,并以此为线索来展开分析。
  • 常用分析工具:
  • Window下,推荐用 EmEditor 进行日志分析,支持大文本,搜索效率还不错。
  • Linux下,使用Shell命令组合查询分析
  • Shell+Linux命令实现日志分析,一般结合grep、awk等命令等实现了几个常用的日志分析统计技巧。
  • Apache日志分析技巧:
  • 1、列出当天访问次数最多的IP命令:
    cut -d- -f 1 log_file|uniq -c | sort -rn | head -20
    
    2、查看当天有多少个IP访问:
    awk '{print $1}' log_file|sort|uniq|wc -l
    
    3、查看某一个页面被访问的次数:
    grep "/index.php" log_file | wc -l
    
    4、查看每一个IP访问了多少个页面:
    awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file
    
    5、将每个IP访问的页面数进行从小到大排序:
    awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
    
    6、查看某一个IP访问了哪些页面:
    grep ^111.111.111.111 log_file| awk '{print $1,$7}'
    
    7、去掉搜索引擎统计当天的页面:
    awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l
    
    8、查看2018年6月21日14时这一个小时内有多少IP访问:
    awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}'| sort | uniq | wc -l	
  • 11.8.3 日志分析举例

  • Web日志分析实例:通过nginx代理转发到内网某服务器,内网服务器某站点目录下被上传了多个图片木马,虽然II7下不能解析,但还是想找出谁通过什么路径上传的。
  • 在这里,我们遇到了一个问题:由于设置了代理转发,只记录了代理服务器的ip,并没有记录访问者IP?这时候,如何去识别不同的访问者和攻击源呢?
  • 这是管理员日志配置不当的问题,但好在我们可以通过浏览器指纹来定位不同的访问来源,还原攻击路径。
  • 1、定位攻击源

  • 首先访问图片木马的记录,只找到了一条,由于所有访问日志只记录了代理IP,并不能通过IP来还原攻击路径,这时候,可以利用浏览器指纹来定位。
  • 浏览器指纹:
  • `Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.1;+WOW64;+Trident/7.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+.NET4.0C;+.NET4.0E)`
  • 2、搜索相关日志记录

  • 通过筛选与该浏览器指纹有关的日志记录,可以清晰地看到攻击者的攻击路径。
  • 3、对找到的访问日志进行解读

  • 攻击者大致的访问路径如下:
  • A、攻击者访问首页和登录页
    B、攻击者访问MsgSjlb.aspx和MsgSebd.aspx
    C、攻击者访问Xzuser.aspx
    D、攻击者多次POST(怀疑通过这个页面上传模块缺陷)
    E、攻击者访问了图片木马
    
    //打开网站,访问Xzuser.aspx,确认攻击者通过该页面的进行文件上传了图片木马,
    
    同时,发现网站了存在越权访问漏洞,攻击者访问特定URL,无需登录即可进入后台界面。
    
    通过日志分析找到网站的漏洞位置并进行修复。
  • 11.8.4 日志统计分析技巧

  • 统计爬虫:

  • grep -E 'Googlebot|Baiduspider'  /www/logs/access.2019-02-23.log | awk '{ print $1 }' | sort | uniq
    
    # 从日志文件中提取包含 "Googlebot" 或 "Baiduspider" 的行
    grep -E 'Googlebot|Baiduspider' /www/logs/access.2019-02-23.log | 
    
    # 从这些行中提取第一个字段 (通常是 IP 地址)
    awk '{ print $1 }' | 
    
    # 对提取出的 IP 地址进行排序
    sort | 
    
    # 去除重复的 IP 地址,保留唯一的 IP
    uniq
    
  • 统计浏览器:

  • cat /www/logs/access.2019-02-23.log | grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | sort | uniq -c | sort -r -n | head -n 100		
    
    
    
    # 显示日志文件内容,并传递给管道的下一个命令
    cat /www/logs/access.2019-02-23.log | 
    
    # 排除包含指定浏览器标识的行
    grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | 
    
    # 对排除后的记录进行排序
    sort | 
    
    # 对排序后的记录进行去重,并统计每个唯一记录的出现次数
    uniq -c | 
    
    # 根据出现次数对结果进行降序排序
    sort -r -n | 
    
    # 输出出现次数最多的前100条记录
    head -n 100
    
  • IP 统计:

  • grep '23/May/2019' /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r -n | head -n 10
       2206 219.136.134.13
       1497 182.34.15.248
       1431 211.140.143.100
       1431 119.145.149.106
       1427 61.183.15.179
       1427 218.6.8.189
       1422 124.232.150.171
       1421 106.187.47.224
       1420 61.160.220.252
       1418 114.80.201.18			
    
    
    # 从日志文件中提取包含特定日期 (23/May/2019) 的所有行
    grep '23/May/2019' /www/logs/access.2019-02-23.log | 
    
    # 从这些行中提取第一个字段 (假设为 IP 地址)
    awk '{print $1}' | 
    
    # 将 IP 地址转换为网络前缀格式 (例如,192.168.1.1 转换为 192.168.1.0)
    awk -F'.' '{print $1"."$2"."$3"."$4}' | 
    
    # 对网络前缀格式的 IP 地址进行排序
    sort | 
    
    # 统计每个网络前缀的出现次数,并显示这些次数
    uniq -c | 
    
    # 按出现次数的降序对统计结果进行排序
    sort -r -n | 
    
    # 提取出现次数最多的前 10 个网络前缀及其出现次数
    head -n 10
    
  • 统计网段:

  • cat /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3".0"}' | sort | uniq -c | sort -r -n | head -n 200	
    
    # 显示日志文件的内容
    cat /www/logs/access.2019-02-23.log | 
    
    # 提取每一行的第一个字段 (假设为 IP 地址)
    awk '{print $1}' | 
    
    # 将 IP 地址转换为网络前缀格式 (例如,192.168.1.5 转换为 192.168.1.0)
    awk -F'.' '{print $1"."$2"."$3".0"}' | 
    
    # 对网络前缀格式的 IP 地址进行排序
    sort | 
    
    # 统计每个网络前缀的出现次数,并显示这些次数
    uniq -c | 
    
    # 按出现次数的降序对统计结果进行排序
    sort -r -n | 
    
    # 提取出现次数最多的前 200 个网络前缀及其出现次数
    head -n 200
    		
  • 统计域名:

  • cat  /www/logs/access.2019-02-23.log |awk '{print $2}'|sort|uniq -c|sort -rn|more	
    
    
    # 显示日志文件内容,并传递给管道的下一个命令
    cat /www/logs/access.2019-02-23.log | 
    
    # 排除包含指定浏览器标识的行
    grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | 
    
    # 对排除后的记录进行排序
    sort | 
    
    # 对排序后的记录进行去重,并统计每个唯一记录的出现次数
    uniq -c | 
    
    # 根据出现次数对结果进行降序排序
    sort -r -n | 
    
    # 输出出现次数最多的前100条记录
    head -n 100
    	
  • HTTP Status:

  • cat  /www/logs/access.2019-02-23.log |awk '{print $9}'|sort|uniq -c|sort -rn|more
    5056585 304
    1125579 200
       7602 400
          5 301	
    
    
    
    # 显示日志文件的内容
    cat /www/logs/access.2019-02-23.log | 
    
    # 提取每一行的第九个字段 (通常是 HTTP 响应状态码)
    awk '{print $9}' | 
    
    # 对提取出的状态码进行排序
    sort | 
    
    # 统计每个唯一状态码的出现次数,并显示这些次数
    uniq -c | 
    
    # 按出现次数的降序对统计结果进行排序
    sort -rn | 
    
    # 分页显示排序后的结果,便于查看
    more
    
  • URL 统计:

  • cat  /www/logs/access.2019-02-23.log |awk '{print $7}'|sort|uniq -c|sort -rn|more			
    #同统计网段
  • 文件流量统计:

  • cat /www/logs/access.2019-02-23.log |awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}'|sort -rn|more
    
    grep ' 200 ' /www/logs/access.2019-02-23.log |awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}'|sort -rn|more			
    
    
    #第一部分
    # 显示日志文件的内容
    cat /www/logs/access.2019-02-23.log | 
    
    # 使用 awk 计算每个 URL 路径的总响应字节数,并打印结果
    awk '{sum[$7]+=$10} END {for(i in sum) {print sum[i], i}}' | 
    
    # 对计算结果按总响应字节数降序排序
    sort -rn | 
    
    # 分页显示排序后的结果,便于查看
    more
    
    #第二部分
    # 从日志文件中过滤出状态码为 200 的行
    grep ' 200 ' /www/logs/access.2019-02-23.log | 
    
    # 使用 awk 计算每个 URL 路径的总响应字节数,并打印结果
    awk '{sum[$7]+=$10} END {for(i in sum) {print sum[i], i}}' | 
    
    # 对计算结果按总响应字节数降序排序
    sort -rn | 
    
    # 分页显示排序后的结果,便于查看
    more
    
  • URL访问量统计

  • cat /www/logs/access.2019-02-23.log | awk '{print $7}' | egrep '\?|&' | sort | uniq -c | sort -rn | more			
    
    # 显示日志文件的内容并提取 URL 路径
    cat /www/logs/access.2019-02-23.log | 
    
    # 使用 awk 打印 URL 路径
    awk '{print $7}' | 
    
    # 使用 egrep 过滤出包含问号或与号的 URL 路径
    egrep '\?|&' | 
    
    # 对过滤后的 URL 路径进行排序
    sort | 
    
    # 统计每个 URL 路径的出现次数,并去重
    uniq -c | 
    
    # 对统计结果按出现次数降序排序
    sort -rn | 
    
    # 分页显示排序后的结果,以便逐页查看
    more
    
  • 脚本运行速度:查出运行速度最慢的脚本

  • grep -v 0$ /www/logs/access.2019-02-23.log | awk -F '\" ' '{print $4" " $1}' web.log | awk '{print $1" "$8}' | sort -n -k 1 -r | uniq > /tmp/slow_url.txt			
    
    # 从日志文件中排除结尾为0的行,并将结果传递给下一条命令
    grep -v 0$ /www/logs/access.2019-02-23.log |
    
    # 使用 awk 以双引号后的空格作为分隔符,提取第四列和第一列,格式化为"第四列 第一列",并将结果输出到 web.log 文件
    awk -F '\" ' '{print $4" " $1}' web.log |
    
    # 使用 awk 从每行中提取第一列和第八列,格式化为"第一列 第八列"
    awk '{print $1" "$8}' |
    
    # 对提取后的数据按第一列(数字)进行降序排序
    sort -n -k 1 -r |
    
    # 对排序后的结果进行去重
    uniq >
    
    # 将最终的结果输出到临时文件 /tmp/slow_url.txt
    / tmp/slow_url.txt
    
  • IP, URL 抽取

  • tail -f /www/logs/access.2019-02-23.log | grep '/test.html' | awk '{print $1" "$7}'			
    
    # 实时监控日志文件的新增内容
    tail -f /www/logs/access.2019-02-23.log | 
    
    # 过滤出包含 '/test.html' 的行
    grep '/test.html' | 
    
    # 使用 awk 提取每行的 IP 地址和 URL 路径
    awk '{print $1" "$7}'
    
  • \tan \csc \sin

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐