我的目的是分析Web应用程序日志,使用mysql作为数据库。首先,我使用awk过滤了一些无用的信息来生成过滤日志,然后我将LOAD DATA导入这个日志到mysql。
我的问题是:那些原始日志每天产生10分钟。生成新的Web应用程序日志后,如何生成过滤日志?生成新的过滤日志后,如何自动将这些文件导入mysql?
原始日志:
20150414/0900.log
20150414/0910.log
答案 0 :(得分:0)
我曾尝试创建一个可以轻松解释其执行方式的小脚本。你有一个控制所有readFiles的awk。如果在完成新读取时读取文件的数量较大,系统将解析de name并将其保存在“readFiles”文件中,该文件将在awk中检查以确保之前未读取该文件。
请检查您的系统是否会删除旧日志,并注意拆分已知的控制文件,或者每天创建新文件以避免出现非常大的文件。
//this will give you the today datae
date +%Y%m%d
这是代码:
echo "x" > readFiles
lastnum=0
num=0
count=0
while true
do
echo "LOOKING FOR NEW FILES. LASTCOUNT="$lastcount
count=`ls ./2015*/*.log | wc -l`
echo $count
if [ $count -gt $lastnum ]
then
lastnum=$count
`ls ./2015*/*.log | awk -F"/" 'BEGIN {
while(( getline < "readFiles") > 0 ) {
readedFiles[$0]
}}
{if(!($0 in readedFiles)){print $0}}
'`>> readFiles
echo "WAITING RESTART"
sleep 10
else
echo "NO NEW FILES FOUND"
sleep 10
fi
done
答案 1 :(得分:0)
而不是编写脚本来监控日志。我使用inotify-tools来触发文件系统事件的脚本,只需几行即可完成。
NOW=$(date +"%Y%m%d")
while true ;
do
inotifywait -r -e create,move /rsynclog/logs/$NOW && \
/rsynclog/logs/generate.sh
done