使用logback jar包写的一个简单的收集多个服务的shell, 不同的服务使用不同的端口,同一个服务不同实例使用同一个端口,服务名称和端口映射存储在app.list
app.list, 支持 # 注释
# app list
# asset port at 570x
#asset-www 5701
#asset-api 5702
asset-m 5703
#asset-admin 5704
# p2p port at 560x
p2p-core 5600
# ms port at 580x
ms-www 5801
ms-api 5802
app.sh
#!/bin/sh
# auth li_jian@gozap.com
# logbackServer
#the app name in app.list or value 'all'
appname=$1
appListFile=app.list
appLen=0
declare -a an
declare -a ap
if [ "" = "$appname" ];then
cat <<EOF
Usage: $0 [options]
options:
all run all app in $appListFile
{somename} run the specified app in $appListFile
EOF
fi
if [ ! -e $appListFile ];then
echo -e 'app list file $appListFile not exist!\n'
else
while read line
do
if [[ $line && "${line:0:1}" != "#" ]];then
an[$appLen]=`echo ${line} | awk '{print $1}' `;
ap[$appLen]=`echo ${line} | awk '{print $2}' `;
#echo "${line},${an[$appLen]}"
((appLen++));
fi
done < $appListFile
if [ "" = "$appname" ];then
echo -e "Availble APP List :\n"
echo " app name: ${an[*]} all"
echo " app port: ${ap[*]}"
echo ""
else
groupadd logback > /dev/null
useradd logback -g logback > /dev/null
totalRuns=0
for ((i=0; i<${#an[@]}; i++));do
#echo "${an[$i]}, $appname"
if [[ "$appname" = "${an[$i]}" || "$appname" = "all" ]];then
aname=${an[$i]}
aport=${ap[$i]}
cmd="java -cp .:./lib/* ch.qos.logback.classic.net.SimpleSocketServer $aport conf/logback-${aname}.xml"
su logback -c "$cmd > /dev/null 2>&1 &"
echo "$cmd";
((totalRuns++));
fi
done
echo "total runs $totalRuns ";
fi
fi
Usage:
./app.sh all
./app.sh asset-m
lib:
logback-core-1.1.6.jar
logback-classic-1.1.6.jar
slf4j-api-1.7.12.jar
下载地址
http://download.csdn.net/detail/lanmo555/9472772
如果需要高可用收集,建议开发failover-socket-appender或者直接使用log4j2 + kafka + elasticsearch + kibana