自动将每10分钟生成的Web应用程序日志加载到mysql

时间:2015-04-14 06:01:14

标签: mysql linux shell awk

我的目的是分析Web应用程序日志,使用mysql作为数据库。首先,我使用awk过滤了一些无用的信息来生成过滤日志,然后我将LOAD DATA导入这个日志到mysql。

我的问题是:那些原始日志每天产生10分钟。生成新的Web应用程序日志后,如何生成过滤日志?生成新的过滤日志后,如何自动将这些文件导入mysql?

原始日志:

20150414/0900.log 
20150414/0910.log 

2 个答案:

答案 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