您的位置:首页 > 运维架构 > Shell

业务数据分析系统

2012-10-12 16:10 399 查看
由于项目需求,需要将玩家信息从日志中存入到DB中,DB暂选MySQL.

本文并未使用开源的向fluentd http://fluentd.org/doc/overview.html一样的系统,我的工作只是日志分析,存入DB,剩下的是开发人员如何展示数据啦。现列出部分脚本,欢迎各位提出意见:

日志收集脚本(用shell搞定),核心思想是scp,并用cat 合并文件。

此程序分3个目录,bin目录下可执行脚本collect_log.sh expect_rsync.sh

conf 目录,service_server sync_file web_server 三个文件存储ip,和文件名称

data目录 存储收集、合并结果

expect_rsync.sh 远程传输:

#!/usr/bin/expect -f

set host [lindex $argv 0]
set remote_dir [lindex $argv 1]
set file [lindex $argv 2]
set local_dir [lindex $argv 3]
spawn scp "xxxxxx@$host#36000:$remote_dir/$file" $local_dir
expect {
-re "assword:" {
send "xxxxxx\r"
} -re "Permission denied, please try again." {
exit
} -re "Connection refused" {
exit
} timeout {
exit
} eof {
exit
}
}
expect eof
exit

collect_log.sh 判断机器和文件名

#!/bin/bash
WEB_REMOTE_DIR=/data/matrixjoyweb/matrixjoy-dragon-web/logs
SERVICE_REMOTE_DIR=/data/matrixjoyservice/matrixjoy-dragon-gameserver/logs/
SCDIR=/data/log-system/
RAWDATADIR=$SCDIR/data/raw/
LOGDATE=$(date  +%Y%m%d --date="-$1 day")

#transport function
function expect_rsync_logs() {
/usr/bin/expect -f $SCDIR/bin/expect_rsync.sh $@
}

#mkdir directory
function ensure_dir() {
if [ ! -d $1 ]
then
mkdir -p $1
fi
}

function  collect() {
server_list=$1
remote_dir=$2
dirtype=$3

for serverip in $server_list
do
store_dir="$RAWDATADIR/$serverip/$dirtype/$LOGDATE"
ensure_dir  $store_dir
for file in $(cat $SCDIR/conf/sync_file)
do
file_name=$file$LOGDATE
#Call the funciton to sync file
expect_rsync_logs $serverip  $remote_dir $file_name  $store_dir

done

done
}

function main() {
source /etc/profile
ensure_dir $RAWDATADIR
IFS="
"
collect  $(cat $SCDIR/conf/service_server) $SERVICE_REMOTE_DIR service
collect  $(cat $SCDIR/conf/web_server) $WEB_REMOTE_DIR web
}

#merge log

function merge() {
TARGET="$SCDIR/data/total/$LOGDATE"
server_ip_list=$1
dir_type=$2
echo $TARGET
ensure_dir $TARGET
for file in $(cat $SCDIR/conf/sync_file)
do
file_name=$file$LOGDATE
for ip in $server_ip_list
do
srcdir="$RAWDATADIR/$ip/$dir_type/$LOGDATE"
cat "$srcdir/$file_name" >> "$TARGET/$file_name"
done
done

}

function merge_result() {
ensure_dir $TARGET
IFS="
"
merge $(cat $SCDIR/conf/service_server) service
merge $(cat $SCDIR/conf/web_server) web
}

main
merge_result

待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐