最近開始學習 server 管理,嘗試學習各種跟 server 有關的工具跟 knowhow,有個網站的簡易 shell script 語法可以快速做一些事情,把他寫成一個小工具來使用
apache_logger.sh
#!/bin/bash
command=$1
log=$2
commands=(
ip
access
loading
long
flow
404
)
commands_description=(
'ip 取得前十名 access 最多的 IP 位址'
'access 取得前十名 access 最多的網頁'
'loading 取得前十名 Loading 最大的頁面'
'long 取得前十名 User access 最久的頁面'
'flow 取得 access log 平均流量 (GB)'
'404 取得所有 404 Link'
)
function show_commands() {
printf "用法 - sh loger.sh 命令 log位置\n\n"
for (( i = 0; i < ${#commands_description[@]}; i++ )); do
echo ${commands_description[$i]}
done
exit
}
if [[ -z $command && -z $log ]]; then
show_commands
fi
if [[ -z $command ]]; then
echo "Please input command"
exit
fi
if [[ -z $log ]]; then
echo "Please input log path"
exit
fi
if [[ ! -f $log ]]; then
echo "Log file is not exist"
exit
fi
in_command=false
for (( i = 0; i < ${#commands[@]}; i++ )); do
if [[ $command == ${commands[$i]} ]]; then
in_command=true
fi
done
if [[ $in_command = false ]]; then
printf "Invalid command\n\n"
show_commands
fi
case $command in
'ip')
cat $log |awk '{print $1}'|sort|uniq -c|sort -nr|head -10
;;
'access')
cat $log |awk '{print $11}'|sort|uniq -c|sort -nr|head -10
;;
'loading')
cat $log |awk '($NF > 60 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -10
;;
'long')
cat $log |awk '($7~/\.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -10
;;
'flow')
cat $log |awk '{sum+=$10} END {print sum/1024/1024/1024}'
;;
'404')
awk '($9 ~/404/)' $log | awk '{print $9,$7}' | sort
;;
esac
沒有留言:
張貼留言