批处理 收集、压缩日志文件
系统上线后,一般都会记录访问、异常和关键业务的日志,生产环境下这些日志文本文件产生的量一般比较大,一天下来大约有8~9个G,随着时间得推移大量的日志文件会占用大量的服务器存储空间,同时为了查找系统问题,监控系统运行状况等信息,就需要把生产环境前一天产生的文本日志文件,从服务器取到内网,运维人员和开发人员根据需要将外部的到文本日志文件按需导入内部日志查询分析管理系统,来方便查找问题。
生产环境有数十台服务器,把这些日志文件收集起来,透过ftp发送到内网环境。整个系统大概如下图:
这样的一个过程中,收集服务器1~服务器N上前一天的日志是一个机械的操作,不可能由运维人员手动操作来完成.
目前采用批处理搭配系统作业来完成,系统的日志结构大概如下图:
批处理递归logs目录下各系统下各种类型的的日志下某一天所有的日志比如20110812的日志放到一个临时文件夹下,然后调用 winrar.exe进行压缩,最后把压缩文件比如 192.168.1.22_20110812.rar 传输到外网日志服务器,由监控程序调用 ftp发送到内网。
大概的bat代码如下:
echo off
setlocal enabledelayedexpansion
echo .
::设置日志文档目录
set beginDir=D:\logs
::获得当前系统时间,yyyyMMdd格式
set folder=%date:~0,4%%date:~5,2%%date:~8,2%
::日志文件临时存放路径(用于存放当日系统日志文件的拷贝)
set tmpFolder=D:\back
:: winrar.exe 存放路径
set winEXE=C:\Program Files\WinRAR\
:: 日志文件压缩后存放的路径
set tmpSvae=E:\logs\tmpSave\
::输出系统参数设置
echo Search Dir is %beginDir%
echo Search Folder is %folder%
echo .
echo Begin Copy ......
:: 创建日志临时存放文件夹
if not exist %tmpFolder% md %tmpFolder%
:: 创建 rar 文件临时存放文件夹
if not exist %tmpSvae% md %tmpSvae%
:: 递归查找beginDir目录下文件夹名称为folder的文件夹
for /f "tokens=* delims=" %%i in ('dir /ad /b/s %beginDir% ^| findstr "\\\%folder%$"') do (
set "tmp=%%i"
set tpback=%tmpFolder%!tmp:~6!
:: 创建文件夹
md !tpback!
::复制文件下所有的文件到 tpback 对应的文件夹
xcopy /s /e /f %%i !tpback!
)
echo .
echo Copy successful.
:: 开始文件压缩
echo .
echo Begin winara
:: 转到压缩文件winrar.exe 所在目录
cd %winEXE%
:: 启动 WinRAR.exe 进行文件压缩
WinRAR.exe a %tmpSvae%%folder%.rar %tmpFolder%
echo .
echo end winrar
:: 删除日志文件临时存放目录中的所有日志文件
echo remove all %tmpFolder% files
rmdir /s /q %tmpFolder%\
echo Connection to server
net use S:\\192.168.1.16\logs "1989513bs" /user:"administrator"
attrib -s -h -r S:Watcher
if not exist S:Watcher\ md S:Watcher\
C:\windows\system32\xcopy %tmpSvae%%folder%.rar S:Watcher\
rmdir /s /q %tmpSvae%\
net use * /delete /YES
echo Close Connection
echo on
pause
运行效果如下图:
文件下载(文档类型改为 bat):
/Files/sristc/日志压缩上传.txt
/Files/sristc/时间.txt