由于工作中,有时候资源不足,不能安装日志收集工具,需要自己手动打开每个文件查看日志,和经常输入k8s,docker命令(命令太长了)
所以编写了一个脚本,来简化这些操作
#!/bin/bash
namespace="uat-poc-be"
pod_id=""
deployment_id=""
be_deploy_script_dir="/home/qwmp/poc_k8s_deploy/be_deploy/be_deploy_scripts"
fe_deploy_script_dir="/home/qwmp/poc_k8s_deploy/fe_deploy_old/fe_deploy_script"
#WORK_DIR=$(pwd)
SCRIPT_PATH=$(readlink -f "$0")
WORK_DIR=$(dirname $SCRIPT_PATH)
readonly ARTHAS_ZIP="/root/Downloads/arthas-bin.zip"
function get_namespace(){
pod_id="$1"
namespace=`kubectl get pods -A | grep $pod_id | awk '{print $1}'`
}
function jvm(){
jcmd 16 GC.heap_info
jcmd 16 VM.command_line
}
function is_running(){
service_name="$1";
count=$(kubectl get pods -A | grep -E "$service_name-\w+-\w+\s+" | grep "Running" | awk '{print $2}' | wc -l)
if [ $count -gt 0 ];
then
echo "$service_name is ok:$count"
else
echo -e "\e[38;5;200m$service_name is not running:$count\e[38;5;255m"
fi
}
function check(){
echo "checking....."
while read -r line; do
is_running $line
done < $WORK_DIR/pod_list
}
function get_pod_id(){
service_name="$1"
pods=($(kubectl get pods -A | grep $service_name | awk '{print $2}'))
select pid in ${pods[*]}
do
echo "selected $pid"
break
done
pod_id=$pid
get_namespace $pod_id
echo "now pod_id is : $pid"
echo "now namespace is : $namespace"
}
function ps_h() {
RAWIN=$(ps -o pid,user,%mem,command ax | grep -v PID | awk '/[0-9]*/{print $1 ":" $2 ":" $4}')
for i in $RAWIN
do
PID=$(echo $i | cut -d: -f1)
OWNER=$(echo $i | cut -d: -f2)
COMMAND=$(echo $i | cut -d: -f3)
MEMORY=$(pmap $PID | tail -n 1 | awk '/[0-9]K/{print $2}')
printf "%-10s%-15s%-15s%s\n" "$PID" "$OWNER" "$MEMORY" "$COMMAND"
done
}
function choose_deployment(){
service_name="$1"
readarray -t pods< <(ps -ef)
# for(( i=1; i<${#pods}; i++ ));
# do
# echo ${pods[i]}
# done
# for one in "${pods[@]}"
# do
# echo $one
# done
readarray -t pods< <(kubectl get deployments -A | grep $service_name)
select one_pod in "${pods[@]}"
do
echo "selected $one_pod"
break
done
did=$(echo $one_pod | awk '{print $2}')
nid=$(echo $one_pod | awk '{print $1}')
deployment_id=$did
namespace=$nid
echo "now deployment_id is : $deployment_id"
echo "now namespace is : $namespace"
}
function docker_repackage(){
docker commit -m "update for spring datasource.xml" -a "xiongyuguang" 92e356ef72ee harbor.szzbmy.com/rabbit_backend/rabbit-channel:v2.3.0_20220429
docker save harbor.szzbmy.com/rabbit_backend/rabbit-channel:v2.3.0_20220429 --output rabbit-channel-v2.3.0_20220429.tar
dccker exec -it 92e356ef72ee /bin/sh
docker login --username admin harbor.szzbmy.com ### pwd Harbor12345
docker push harbor.szzbmy.com/rabbit_backend/rabbit-channel:v2.3.0_20220429
}
function get_pod_id_old(){
service_name="$1"
echo "$service_name"
pod_id=`kubectl get pods -A | grep $service_name | awk '{print $2}'`
echo "pod_id:$pod_id"
}
function login(){
service_name="$1"
echo "login $service_name"
get_pod_id $service_name
kubectl exec -it $pod_id -n $namespace -- /bin/sh
}
function pod_yaml(){
service_name="$1"
echo "pod_yaml $service_name"
get_pod_id $service_name
kubectl get pod $pod_id -n $namespace -o yaml
}
function top_mem_docker(){
docker stats --no-stream --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | sort -rk 4 -h
}
function top_mem(){
ps -ef | sort -rnk 4 | cut -c 1-300 | head -n 20
}
function status(){
service_name="$1"
get_pod_id $service_name
echo "status : $service_name"
kubectl get pods $pod_id -n $namespace -o wide
}
function info(){
service_name="$1"
get_pod_id $service_name
echo "info : $service_name"
kubectl describe pods $pod_id -n $namespace
}
function logs(){
service_name="$1"
choose_deployment "$1"
echo "logs in $deployment_id"
logdir="/data/download/*be-logs-pvc*/${deployment_id}"
logdir2="/data/download/*be-logs-pvc*/${deployment_id}-server"
error_file1="$logdir/info.log"
error_file2="$logdir/$(date '+%Y-%m-%d')_info.log"
error_file3="$logdir2/info.log"
error_file4="$logdir2/$(date '+%Y-%m-%d')_info.log"
error_file5="$logdir2/info_$(date '+%Y-%m-%d').log"
error_file6="$logdir2/info_$(date '+%Y-%m-%d').log"
shift
tailArgs="$@"
echo $tailArgs
[ -f $error_file1 ] && read -p $error_file1 && tail $error_file1 -f $tailArgs
[ -f $error_file2 ] && read -p $error_file2 && tail $error_file2 -f $tailArgs
[ -f $error_file3 ] && read -p $error_file3 && tail $error_file3 -f $tailArgs
[ -f $error_file4 ] && read -p $error_file4 && tail $error_file4 -f $tailArgs
[ -f $error_file5 ] && read -p $error_file5 && tail $error_file5 -f $tailArgs
[ -f $error_file6 ] && read -p $error_file6 && tail $error_file6 -f $tailArgs
}
function find_logs(){
service_name="$1"
choose_deployment "$1"
echo "logs in $deployment_id"
logdir="/data/download/*be-logs-pvc*/${deployment_id}"
logdir2="/data/download/*be-logs-pvc*/${deployment_id}-server"
error_file1="$logdir/info.log"
error_file2="$logdir/$(date '+%Y-%m-%d')_info.log"
error_file3="$logdir2/info.log"
error_file4="$logdir2/$(date '+%Y-%m-%d')_info.log"
error_file5="$logdir2/info_$(date '+%Y-%m-%d').log"
error_file6="$logdir2/info_$(date '+%Y-%m-%d').log"
shift
tailArgs="$@"
echo $tailArgs
echo "aaaaaa"
[ -f $error_file1 ] && echo $error_file1 | xargs -n 1 -I {} grep -i $tailArgs "{}"
[ -f $error_file2 ] && echo $error_file2 | xargs -n 1 -I {} grep -i $tailArgs "{}"
[ -f $error_file3 ] && echo $error_file3 | xargs -n 1 -I {} grep -i $tailArgs "{}"
[ -f $error_file4 ] && echo $error_file4 | xargs -n 1 -I {} grep -i $tailArgs "{}"
[ -f $error_file5 ] && echo $error_file5 | xargs -n 1 -I {} grep -i $tailArgs "{}"
[ -f $error_file6 ] && echo $error_file6 | xargs -n 1 -I {} grep -i $tailArgs "{}"
}
function error_logs(){
service_name="$1"
choose_deployment "$1"
echo "logs in $deployment_id"
logdir="/data/download/*be-logs-pvc*/${deployment_id}"
logdir2="/data/download/*be-logs-pvc*/${deployment_id}-server"
error_file1="$logdir/error.log"
error_file2="$logdir/$(date '+%Y-%m-%d')_error.log"
error_file3="$logdir2/error.log"
error_file4="$logdir2/$(date '+%Y-%m-%d')_error.log"
error_file5="$logdir2/info_$(date '+%Y-%m-%d').log"
error_file6="$logdir2/info_$(date '+%Y-%m-%d').log"
shift
tailArgs="$@"
echo $tailArgs
[ -f $error_file1 ] && read -p $error_file1 && tail $error_file1 -f $tailArgs
[ -f $error_file2 ] && read -p $error_file2 && tail $error_file2 -f $tailArgs
[ -f $error_file3 ] && read -p $error_file3 && tail $error_file3 -f $tailArgs
[ -f $error_file4 ] && read -p $error_file4 && tail $error_file4 -f $tailArgs
[ -f $error_file5 ] && read -p $error_file5 && tail $error_file5 -f $tailArgs
[ -f $error_file6 ] && read -p $error_file6 && tail $error_file6 -f $tailArgs
}
function cd_logs(){
sservice_name="$1"
choose_deployment "$1"
echo "logs in $deployment_id"
logdir="/data/download/*be-logs-pvc*/${deployment_id}"
logdir2="/data/download/*be-logs-pvc*/${deployment_id}-server"
logdir1_link="$(readlink -f $logdir)"
logdir2_link="$(readlink -f $logdir2)"
[ -d $logdir1_link ] && echo "${logdir1_link}" && cd ${logdir1_link}
[ -d $logdir2_link ] && echo "${logdir2_link}" && cd ${logdir2_link}
}
function stop(){
service_name="$1"
choose_deployment $service_name
command="kubectl scale deployment $deployment_id --replicas=0 -n $namespace"
echo $command
$command
}
function all_logs(){
service_name="$1"
choose_deployment $service_name
command="kubectl scale deployment $deployment_id --replicas=0 -n $namespace"
echo $command
$command
}
function start(){
service_name="$1"
choose_deployment $service_name
command="kubectl scale deployment $deployment_id --replicas=1 -n $namespace"
echo $command
$command
}
function restart(){
service_name="$1"
choose_deployment $service_name
command="kubectl rollout restart deployments $deployment_id -n $namespace"
echo $command
$command
}
function restart_one(){
deployment_id="$1"
command="kubectl rollout restart deployments $deployment_id -n $namespace"
echo $command
#@$command
}
function restart_all(){
echo "checking....."
while read -r line; do
restart_one $line
done < $WORK_DIR/pod_list
}
function install(){
service_name="$1"
version="$2"
echo "aaa $3"
if [ "$3" == 'be' ];
then
command="sh $be_deploy_script_dir/deploy.sh $service_name $version"
echo $command
$command
else
command="sh $fe_deploy_script_dir/deploy.sh $service_name $version"
echo $command
$command
fi
}
function install_be(){
service_name="$1"
version="$2"
install "$1" "$2" "be"
}
function install_fe(){
service_name="$1"
version="$2"
install "$1" "$2" 'fe'
}
function uninstall(){
service_name="$1"
choose_deployment $service_name
helm uninstall $deployment_id -n $namespace
}
function upload(){
service_name="$1"
source_file_name=$(readlink -f $2)
dest_dir="/data/download"
dest_file_name="${dest_dir}/$(basename ${source_file_name})"
get_pod_id $service_name
kubectl exec -n $namespace $pod_id -- /bin/sh -c "mkdir -p $dest_dir"
kubectl cp $source_file_name $namespace/$pod_id:$dest_dir
echo "$source_file_name uploaded to $dest_file_name"
return 0
}
function download(){
service_name="$1"
source_file_name="$2"
dest_dir=$(readlink -f $3)/$(basename $source_file_name)
echo $dest_dir
get_pod_id $service_name
kubectl cp $namespace/$pod_id:$source_file_name $dest_dir
echo "$source_file_name downloaded in $dest_dir"
return 0
}
function debug(){
service_name="$1"
source_file_name="${ARTHAS_ZIP}"
get_pod_id $service_name
if [ -z $pod_id ];
then
echo "you have not select one pod!"
exit
else
echo "you're debuging pod_id:$pod_id"
fi
kubectl exec -it $pod_id -n $namespace -- [ -f /data/download/arthas-bin/arthas-boot.jar ]
if [ $? == 1 ]
then
upload $service_name $source_file_name
else
echo "arthas exits in /data/download/arthas-bin/arthas-boot.jar"
fi
kubectl exec -it $pod_id -n $namespace -- java -Xms64m -Xmx128m -jar /data/download/arthas-bin/arthas-boot.jar
}
function help(){
cat << EOF
ms install rabbit-web v2.3.0 be
ms install_be rabbit-web v2.3.0
ms install_fe rabbit-web v2.3.0
ms uninstall rabbit-web
ms login rabbit-web
ms stop rabbit-web
ms status rabbit-web
ms logs rabbit-web -n -f
ms error_logs rabbit-web
ms cd_logs rabbit-web
ms debug rabbit-web
ms start rabbit-web
ms restart rabbit-web
ms restart_all
ms info rabbit-web
ms download rabbit-web /data/server/rabbit-web/conf ./
ms upload rabbit-web ./conf
ms pod_yaml rabbit_web
ms check
EOF
}
case $1 in
top_mem)
top_mem
;;
top_mem_docker)
top_mem_docker
;;
login)
login "$2"
;;
pod_yaml)
pod_yaml "$2"
;;
logs)
shift
logs "$@"
;;
error_logs)
shift
error_logs "$@"
;;
cd_logs)
cd_logs "$2"
;;
stop)
stop "$2"
;;
status)
status "$2"
;;
start)
start "$2"
;;
install)
install "$2" "$3" "$4"
;;
install_be)
install_be "$2" "$3"
;;
install_fe)
install_fe "$2" "$3"
;;
uninstall)
uninstall "$2"
;;
upload)
upload "$2" "$3"
;;
debug)
debug "$2"
;;
info)
info "$2"
;;
--help)
help
;;
restart)
restart "$2"
;;
restart_all)
restart_all
;;
grep)
shift
find_logs "$@"
;;
choose)
choose "$2"
;;
check)
check
;;
tst)
ps_h | sort -bnr -k3
;;
download)
download "$2" "$3" "$4"
esac
exit 0
4"
esac
exit 0