目标:使用salt批量收集系统日志时间,并对比分析日志时间之间的差值
1、首先收集windows server系统日志:
本文收集日志参考powershell官方文档:
https://forsenergy.com/zh-cn/windowspowershellhelp/html/defed09e-2acd-4042-bd22-ce4bf92c2f24.htm
现在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/bash
list="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/bash
cd /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)}'