From 5901cd38bcfbedb045e7b84e393c67131aca41f3 Mon Sep 17 00:00:00 2001 From: gysar1983 Date: Fri, 17 Feb 2023 02:09:28 +0800 Subject: [PATCH] from 17.02.23 --- get-all-logs.sh | 223 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100755 get-all-logs.sh diff --git a/get-all-logs.sh b/get-all-logs.sh new file mode 100755 index 0000000..cc2486e --- /dev/null +++ b/get-all-logs.sh @@ -0,0 +1,223 @@ +#!/bin/bash + +PRMT="[$(whoami)@$(hostname -s) ]" + +about_platform(){ +for ONE in vm dci; +do + test -d /opt/ispsystem/${ONE} && PLATFORM=${ONE}; + LicenseToken=$(grep -oP '\"LicenseToken\":"[^"]*\"' /opt/ispsystem/${PLATFORM}/config.json | sed -e 's/\"LicenseToken\"://g' -e 's/\"//g') + CurrentVersion=$(grep -oP '\"CurrentVersion\":"[^"]*\"' /opt/ispsystem/${PLATFORM}/config.json | sed -e 's/\"CurrentVersion\"://g' -e 's/\"//g') + Stage=$(grep -oP '\"Stage\":"[^"]*\"' /opt/ispsystem/${PLATFORM}/config.json | sed -e 's/\"Stage\"://g' -e 's/\"//g') + DomainName=$(grep -oP '\"DomainName\":"[^"]*\"' /opt/ispsystem/${PLATFORM}/config.json | sed -e 's/\"DomainName\"://g' -e 's/\"//g') +done + +if [[ -z "${PLATFORM}" ]]; then + echo "No ISPsystem Software found" && exit; +else + + LOGDIR="${HOME}/${PLATFORM}_${type_log}_$(date +"%Y_%m_%d_%H_%M_%S")" && mkdir -p ${LOGDIR} + ARCNAME=$(date +"${HOME}/${PLATFORM}_${type_log}_%Y_%m_%d_%H_%M_%S.tar.gz") + cp /opt/ispsystem/${PLATFORM}/config.json ${LOGDIR} + cp /opt/ispsystem/${PLATFORM}/install.log ${LOGDIR} + cp /opt/ispsystem/${PLATFORM}/docker-compose.yaml ${LOGDIR} + +fi; + +} + +newlog() { + LOGINFO=${LOGDIR}/$1 && date > ${LOGINFO} +} + +cmdlog() { + test -z "${LOGINFO}" && return + local CMD=$*;(echo "${PRMT} ${CMD}";echo;eval ${CMD};echo) >> ${LOGINFO} +} + +about_server() { +newlog hostinfo_$(hostname).log +echo "log $LOGINFO" +cmdlog hostnamectl +cmdlog cat /etc/*release +cmdlog lscpu +cmdlog timedatectl +cmdlog free -m +cmdlog df -h --exclude tmpfs --exclude devtmpfs --exclude squashfs --exclude overlay +cmdlog ip -br a +} + +about_docker(){ +newlog docker_$(hostname).log +cmdlog docker version +cmdlog docker ps +cmdlog "docker inspect --format ' {{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)" +} + +plaform_logs(){ + DOCKER_CONTAINER_NAMES=`docker ps --format '{{.Names}}'` + + SERVICES=($DOCKER_CONTAINER_NAMES) + cd ${LOGDIR} + for service in ${SERVICES[@]} + do + echo -e "----\033[0;31mCopying logs from $service\033[0m----\n" + mkdir -p $service + docker cp $service:/var/log/. $service/. + docker logs $service > $service/${service}_stdout.log 2>&1 + done +} + +about_license(){ + curl -vvv -k "https://license6.ispsystem.com/lic6/check" -H "X-auth-token:$LicenseToken" > ${LOGDIR}/license_${PLATFORM}.log 2>&1 + echo -e "\n${PLATFORM} Version:$CurrentVersion\n" >>${LOGDIR}/license_${PLATFORM}.log; + echo "${PLATFORM} LicenseToken:$LicenseToken" >>${LOGDIR}/license_${PLATFORM}.log; + echo "${PLATFORM} Stage:$Stage" >>${LOGDIR}/license_${PLATFORM}.log; + echo "${PLATFORM} DomainName:$DomainName" >>${LOGDIR}/license_${PLATFORM}.log; + + auth_back_dir="${LOGDIR}/${PLATFORM}_auth_back_1" && mkdir -p ${auth_back_dir} + input_dir="${LOGDIR}/${PLATFORM}_input_1" && mkdir -p ${input_dir} + docker cp ${PLATFORM}_auth_back_1:/var/log/. ${auth_back_dir} + docker cp ${PLATFORM}_input_1:/var/log/nginx/. ${input_dir} +} + +finish() { + tar -cvzf ${ARCNAME} -C ${LOGDIR} . + echo -e "\nISPsystem Software found:\n"; + echo "${PLATFORM} DomainName:$DomainName"; + echo "${PLATFORM} LicenseToken=$LicenseToken" + echo "${PLATFORM} CurrentVersion=$CurrentVersion" + echo "${PLATFORM} Stage=$Stage" + + echo -e "\ndirectory with logs $LOGDIR\n" + echo -e "Please send this logs archive to ISP system support\n" + du -h ${ARCNAME} +} + +node_connect() { + ip_addr=$1; + ssh_port=$2; + cmd=$4; + logfile=$3; + fullcmd="docker exec --tty --interactive vm_box ssh -o \"StrictHostKeyChecking no\" -i /opt/ispsystem/vm/etc/.ssh/vmmgr.1 $ip_addr -p $ssh_port $cmd >> ${LOGDIR}/$logfile"; + echo $fullcmd; + echo -e "\n $cmd \n">> ${LOGDIR}/$logfile; + eval $fullcmd; +} + +_help(){ + cat <<- EOF +============================================ + Usage : get-all-logs -type + + available types: + + -logs or 1 + -short-logs or 2 + -lic or 3 + -node or 4 + +============================================= + EOF +} + +_logs() { + about_server; + about_docker; + about_license; + plaform_logs; + finish; +} + +_short_logs() { + about_server; + about_docker; + about_license; + plaform_logs; + find ${LOGDIR} -type f -mtime +7 -delete; + finish; +} + +_lic() { + about_server; + about_docker; + about_license; + finish; +} + +_vm_host() { + echo $type_log; + echo "it's coming soon!"; +} + +_node() { + node_ip=$1; + node_port=$2; + node_connect $node_ip $node_port "${node_ip}_hostnamectl.log" "hostnamectl"; + node_connect $node_ip $node_port "${node_ip}_release.log" "\"cat /etc/*release\""; + node_connect $node_ip $node_port "${node_ip}_dmesg.log" "\"dmesg | grep -i -E 'error|failed|critical|bug|panic'\""; + node_connect $node_ip $node_port "${node_ip}_services.log" "\"journalctl | grep -i -E 'error|failed|critical|bug|panic'\""; + node_connect $node_ip $node_port "${node_ip}_services.log" "\"systemctl status libvirtd -l\""; + node_connect $node_ip $node_port "${node_ip}_services.log" "\"systemctl show libvirtd\""; + node_connect $node_ip $node_port "${node_ip}_sshd_config" "\"cat /etc/ssh/sshd_config\""; + + node_connect $node_ip $node_port "${node_ip}_hwinfo.log" "lscpu"; + node_connect $node_ip $node_port "${node_ip}_hwinfo.log" "lscpu | grep -i -E 'socket|core|thread'"; + node_connect $node_ip $node_port "${node_ip}_hwinfo.log" "dmidecode"; + node_connect $node_ip $node_port "${node_ip}_time.log" "timedatectl"; + node_connect $node_ip $node_port "${node_ip}_time.log" "uptime"; + node_connect $node_ip $node_port "${node_ip}_time.log" "\"last reboot | head -10\""; + node_connect $node_ip $node_port "${node_ip}_virsh.log" "\"virsh list --all\""; + node_connect $node_ip $node_port "${node_ip}_virsh.log" "\"virsh pool-list --all\""; + node_connect $node_ip $node_port "${node_ip}_virsh.log" "\"virt-host-validate\""; + node_connect $node_ip $node_port "${node_ip}_mem.log" "\"free -m\""; + node_connect $node_ip $node_port "${node_ip}_network.log" "\"ip -br a\""; + node_connect $node_ip $node_port "${node_ip}_network.log" "\"brctl show\""; + node_connect $node_ip $node_port "${node_ip}_network.log" "\"curl -v download.ispsystem.com\""; + + node_connect $node_ip $node_port "${node_ip}_firewall.log" "\"systemctl status nftables\""; + node_connect $node_ip $node_port "${node_ip}_firewall.log" "\"systemctl status firewalld\""; + node_connect $node_ip $node_port "${node_ip}_firewall.log" "\"firewall-cmd --list-ports\""; + node_connect $node_ip $node_port "${node_ip}_firewall.log" "\"nft list ruleset\""; + + node_connect $node_ip $node_port "${node_ip}_firewall.log" "\"ss -tulpn | grep 16514\""; + node_connect $node_ip $node_port "${node_ip}_firewall.log" "\"ss -tulpn '( sport >= 49152 and sport <= 49215 )'\""; + node_connect $node_ip $node_port "${node_ip}_firewall.log" "\"ss -tulpn '( sport >= 5900 and sport <= 6900 )'\""; + node_connect $node_ip $node_port "${node_ip}_firewall.log" "\"ss -tulpn '( sport = 179 or sport = 4789 )'\""; + node_connect $node_ip $node_port "${node_ip}_firewall.log" "\"ss -tulpn | grep 16514\""; + node_connect $node_ip $node_port "${node_ip}_firewall.log" "\"ss -tulpn | grep -E ':179|:4789'\""; + node_connect $node_ip $node_port "${node_ip}_disks.log" "\"df -h --exclude tmpfs --exclude devtmpfs --exclude squashfs --exclude overlay\""; + node_connect $node_ip $node_port "${node_ip}_disks.log" "\"df -i\""; + node_connect $node_ip $node_port "${node_ip}_disks.log" "lsblk"; + finish; +} + +if [[ "$1" == "-logs" || "$1" == "1" ]]; then + type_log="logs"; + about_platform; + _logs; +elif [[ "$1" == "-short-logs" || "$1" == "2" ]]; then + type_log="short-logs"; + about_platform; + _short_logs; +elif [[ "$1" == "-lic" || "$1" == "3" ]]; then + type_log="lic"; + about_platform; + _lic; +elif [[ "$1" == "-node" || "$1" == "4" ]]; then + type_log="node"; + about_platform; + if [[ -z $2 || -z $3 ]]; then + echo "please set IP address and port of node!"; + exit; + else + _node $2 $3; + fi +elif [[ "$1" == "-vm-host" || "$1" == "5" ]]; then + type_log="vm-host"; + about_platform; + _vm_host; + +else + _help; +fi \ No newline at end of file