目标:使用salt批量收集系统日志时间,并对比分析日志时间之间的差值
1、首先收集windows server系统日志:
本文收集日志参考powershell官方文档:
现在powershell执行成功后再写成脚本
由于本文只是收集一段时间的日志,所以需要定义范围
PS> $july8 = get-date 2019/07/08 //定义最早时间
PS> $july14 = get-date 2019/07/14 //定义最晚时间PS> get-eventlog -logname system -after $july8 -before $july14 | where {$_.eventID -eq 1} | Format-List | tee C:\opstools\systemlog.txt将此写成ps1的脚本,放在linux服务器上,可使用salt分发到不同的windows服务器上进行执行
# pwd //本文的linux服务器已经安装salt,并且每台windows服务器都安装了salt-million
/srv/salt/zhouzun/copyfile/files //将ps1文件放在此目录下存放#vim systemlog.ps1
$july8 = get-date 2019/07/08
$july14 = get-date 2019/07/14 get-eventlog -logname system -after $july8 -before $july14 | where {$_.eventID -eq 1} | Format-List//此处不在将收集的日志记录保存在windows服务器上,因为直接可以保存在linux服务器上,方便分析
2、编辑salt文件,将systemlog.ps1文件分发到各个windows服务器上,并进行收集日志
# pwd
/srv/salt/zhouzun/copyfile //本目录存放salt配置文件和收集的文件的执行结果本目录下总共有主要的三个文件,salt配置文件 --> copydir.sls,salt执行正确与否的结果日志 --> result.log;files是用来存放systemlog.ps1的
# vim copydir.sls
copy_dir: file.managed: //文件管理模块 - name: C:\opstools\systemlog.ps1 //将linux服务器上的system.ps1分发到各windows服务器的C:\opstools目录下 - source: salt://zhouzun/copyfile/files/systemlog.ps1 //此处表示salt根目录下的目录:zhouzun/copyfile/files的源文件, cmd.run: //脚本执行模块,在windows服务器上各自执行 - name: powershell.exe C:\opstools\systemlog.ps1 //在windows服务器上执行脚本systemlog.ps1
由于不止一台服务器,所以本文写成for循环进行执行,缺点在于每次只能在一台windows上执行
#vim slog.sh
#!/bin/bashlist="BXVW-APP-20-11 BXVW-APP-20-16 BXVW-APP-20-17 BXVW-APP-20-62 BXVW-APP-20-63 BXVW-APP-20-107 BXVW-APP-20-138" //服务器列表for i in $list; do salt "$i" state.sls zhouzun.copyfile.copydir &> /tmp/systemlog/$i.log //先执行salt的配置文件->copydir,此配置文件会分发并执行ps1脚本 echo "$i is ok" //同时将收集的系统日志保存在以主机名命名的log文件里面done
执行完脚本后会在/tmpsystemlog/目录下保存日志文件
但是收集的日志信息量大,无法直接进行分析,所以进行抽取
将抽取信息和简化写成for循环脚本
#!/bin/bashcd /tmp/systemlog //原始日志文件在此目录中for i in *.log; do //编辑.log结尾的日志文件 grep -A 1 ReplacementStrings $i | xargs echo >/tmp/stxt/$i //查找ReplacementStrings字符串和其下一行,并将多行改成一行存到/tmp/stxt/$i sleep 3 sed -i 's/--/&\n/g' /tmp/stxt/$i sleep 3# sed -i 's/{//g' /tmp/stxt/$i# sed -i 's/}//g' /tmp/stxt/$i# sed -i s/[[:space:]]//g /tmp/stxt/$i# sed -i s/:/" "/g /tmp/stxt/$i sed -i 's/--\|{\|}\|[[:space:]]//g' /tmp/stxt/$i //将 -- { } 空格 等全部改为kong sed -i s/,/" "/g /tmp/stxt/$i //将 , 改为空格 sed -i 's/ReplacementStrings:2019-07-[0-9][0-9]T\|2019-07-[0-9][0-9]T//g' /tmp/stxt/$i //去掉多余字符串# sed -i 's/ReplacementStrings:2019-07-[0-9][0-9]T//g' /tmp/stxt/$i# sed -i 's/2019-07-[0-9][0-9]T//g' /tmp/stxt/$i echo "$i is ok"done
经过处理后的日志形式
# cat BXVW-APP-20-11.log | awk -F "." '{print ($2-$4)}'