This repository has been archived on 2024-12-17. You can view files and clone it, but cannot push or open issues or pull requests.
get-all-logs/get-all-logs.sh

327 lines
11 KiB
Bash
Raw Normal View History

2023-02-17 02:09:28 +08:00
#!/bin/bash
2023-04-13 00:25:12 +08:00
version="23/02/23"
2023-02-23 13:59:45 +08:00
2023-02-17 02:09:28 +08:00
PRMT="[$(whoami)@$(hostname -s) ]"
2023-04-13 00:25:12 +08:00
for ONE in vm dci;
do
test -d /opt/ispsystem/${ONE} && PLATFORM=${ONE};
done
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')
2023-02-17 02:09:28 +08:00
about_platform(){
2023-03-15 18:23:16 +08:00
# информация о платформе
#
2023-02-23 23:32:00 +08:00
if [[ -z $logtype ]];then
logtype=$1;
fi;
2023-02-23 13:59:45 +08:00
2023-02-17 02:09:28 +08:00
if [[ -z "${PLATFORM}" ]]; then
echo "No ISPsystem Software found" && exit;
else
2023-02-23 23:32:00 +08:00
LOGDIR="${HOME}/${PLATFORM}_${logtype}_$(date +"%Y_%m_%d_%H_%M_%S")" && mkdir -p ${LOGDIR}
ARCNAME=$(date +"${HOME}/${PLATFORM}_${logtype}_%Y_%m_%d_%H_%M_%S.tar.gz")
2023-02-17 02:09:28 +08:00
cp /opt/ispsystem/${PLATFORM}/config.json ${LOGDIR}
cp /opt/ispsystem/${PLATFORM}/install.log ${LOGDIR}
cp /opt/ispsystem/${PLATFORM}/docker-compose.yaml ${LOGDIR}
fi;
}
newlog() {
2023-03-15 18:23:16 +08:00
#делаем файл лога
2023-02-17 02:09:28 +08:00
LOGINFO=${LOGDIR}/$1 && date > ${LOGINFO}
}
cmdlog() {
2023-03-15 18:23:16 +08:00
# выводим в stdout и выполняем команду
2023-02-17 02:09:28 +08:00
test -z "${LOGINFO}" && return
local CMD=$*;(echo "${PRMT} ${CMD}";echo;eval ${CMD};echo) >> ${LOGINFO}
}
about_server() {
2023-03-15 18:23:16 +08:00
#информация о сервере
2023-02-17 02:09:28 +08:00
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(){
2023-03-15 18:23:16 +08:00
#информация о docker
2023-02-17 02:09:28 +08:00
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(){
2023-03-15 18:23:16 +08:00
# логи из docker контейнеров
2023-02-17 02:09:28 +08:00
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(){
2023-03-15 18:23:16 +08:00
# информация о лицензии
2023-03-20 17:32:28 +08:00
curl -m 180 -vvv -k "https://license6.ispsystem.com/lic6/check" -H "X-auth-token:$LicenseToken" > ${LOGDIR}/license_${PLATFORM}.log 2>&1
2023-02-17 02:09:28 +08:00
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() {
2023-03-15 18:23:16 +08:00
# пакуем логи и выводим общую информацию о платформе в конце сбора
2023-02-17 02:09:28 +08:00
tar -cvzf ${ARCNAME} -C ${LOGDIR} .
echo -e "\nISPsystem Software found:\n";
echo "${PLATFORM} DomainName:$DomainName";
2023-03-15 18:23:16 +08:00
echo "${PLATFORM} LicenseToken:$LicenseToken"
dist_type=$(curl -s -m 120 -k "https://license6.ispsystem.com/lic6/check" -H "X-auth-token:5a99a084a0334c808143708cfbc24ec7:iWuiY_A5q02jwZlKcFV0Yw" | grep -Po '"dist_type":.*?[^\\]"' | sed -e 's/\"dist_type\"://g' -e 's/\"//g')
echo "${PLATFORM} CurrentVersion:$CurrentVersion $dist_type"
echo "${PLATFORM} Stage:$Stage"
2023-02-17 02:09:28 +08:00
echo -e "\ndirectory with logs $LOGDIR\n"
echo -e "Please send this logs archive to ISP system support\n"
du -h ${ARCNAME}
}
2023-03-15 18:23:16 +08:00
mysql_collect(){
# выполнение запросов к БД
2023-02-17 03:41:05 +08:00
logfile=$1;
query=$2;
fullcmd="docker exec -it mysql bash -c \"mysql isp -p\\\$MYSQL_ROOT_PASSWORD -e "$query"\" >> ${LOGDIR}/$logfile";
echo $fullcmd;
2023-02-23 23:32:00 +08:00
echo -e "\n exec $query \n">> ${LOGDIR}/$logfile;
2023-02-17 03:41:05 +08:00
eval $fullcmd;
}
2023-02-23 13:59:45 +08:00
2023-03-15 18:23:16 +08:00
node_collect() {
# выполнение команды на узле
2023-02-17 02:09:28 +08:00
ip_addr=$1;
ssh_port=$2;
cmd=$4;
logfile=$3;
2023-03-15 18:23:16 +08:00
docker exec --tty --interactive vm_box ssh -o BatchMode=yes -o ConnectTimeout=5 -o "StrictHostKeyChecking no" -q -i /opt/ispsystem/vm/etc/.ssh/vmmgr.1 $ip_addr -p $ssh_port 'exit 0';
_RCODE=$?
if [ $_RCODE -ne 0 ]
then
# echo "unable to ssh, host is not accessible";
# connected=0;
echo "node $ip_addr on $node_port not connected!";
echo "node $ip_addr on $node_port not connected!">> ${LOGDIR}/$logfile;
echo -e "\n not executed $cmd \n">> ${LOGDIR}/$logfile;
else
# echo "connected $ip_addr $ssh_port";
# connected=1;
2023-02-23 23:32:00 +08:00
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;
2023-03-15 18:23:16 +08:00
fi
2023-02-17 02:09:28 +08:00
}
_help(){
2023-03-15 18:23:16 +08:00
# справка о скрипте
2023-02-23 23:32:00 +08:00
2023-03-20 18:09:02 +08:00
echo -e "git.isptech.ru:ISPsystem/get-all-logs.git \n Log's script ver.: $version Usage : $0 [arguments]";
2023-02-23 23:32:00 +08:00
echo -e "\n arguments:\n";
echo -e " -logs or 1";
echo -e " -short-logs or 2";
echo -e " -lic or 3";
echo -e " -node or 4 <IP-address> <SSH-port>\n";
2023-02-23 13:59:45 +08:00
PS3='Please enter your choice(enter number): '
2023-03-15 18:23:16 +08:00
# интерактивное меню
2023-02-23 23:32:00 +08:00
options=("Full logs" "Short logs" "License's logs" "Node's logs" "Quit")
2023-02-23 13:59:45 +08:00
select opt in "${options[@]}"
do
case $opt in
"Full logs")
2023-02-23 23:32:00 +08:00
logtype="logs";
about_platform;
2023-02-23 13:59:45 +08:00
_logs;
break;
;;
"Short logs")
2023-02-23 23:32:00 +08:00
logtype="short-logs";
about_platform;
2023-02-23 13:59:45 +08:00
_short_logs;
break;
;;
2023-02-23 23:32:00 +08:00
"License's logs")
logtype="lic";
about_platform;
2023-02-23 13:59:45 +08:00
_lic;
break;
;;
2023-02-23 23:32:00 +08:00
"Node's logs")
logtype="node";
2023-02-23 13:59:45 +08:00
read -p "Enter IP address: " node_ip
read -p "Enter port: " node_port
2023-02-23 23:32:00 +08:00
about_platform;
2023-02-23 13:59:45 +08:00
_node $node_ip $node_port;
break;
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done
2023-02-17 02:09:28 +08:00
}
2023-04-13 00:25:12 +08:00
_gen_key() {
}
2023-02-17 02:09:28 +08:00
_logs() {
2023-03-15 18:23:16 +08:00
# общая функция сбора полных логов
2023-02-17 02:09:28 +08:00
about_server;
about_docker;
about_license;
plaform_logs;
finish;
}
_short_logs() {
2023-03-15 18:23:16 +08:00
# общая функция сбора сокращенных логов
2023-02-17 02:09:28 +08:00
about_server;
about_docker;
about_license;
plaform_logs;
find ${LOGDIR} -type f -mtime +7 -delete;
finish;
}
_lic() {
2023-03-15 18:23:16 +08:00
# общая функция сбора информации о лицензии
2023-02-17 02:09:28 +08:00
about_server;
about_docker;
about_license;
finish;
}
_vm_host() {
2023-03-15 18:23:16 +08:00
# планируется сбор логов о виртуальной машине
2023-03-20 17:32:28 +08:00
# так можно сделать проверку переданного параметра, либо id либо имя ВМ,если начинается с символа решетки значит id
# echo '#12444' | grep -Pq '^#[0-9]+$' && echo by-id || echo by-name
2023-02-17 02:09:28 +08:00
echo "it's coming soon!";
2023-02-22 01:58:55 +08:00
vm_name=$1;
vm_id=$2;
2023-02-17 02:09:28 +08:00
}
_node() {
2023-03-15 18:23:16 +08:00
# общая функция сбор логов об узле
2023-02-17 02:09:28 +08:00
node_ip=$1;
node_port=$2;
2023-03-15 18:23:16 +08:00
mysql_collect "${node_ip}_db.log" "'select id,name,comment,cluster,ram_mib,max_vcpu_number,cpu_number,ip_addr,ssh_port,host_max_num,state,connection_error,libvirt_error,gray_ips,disk_params,property,host_creation_blocked,mon_installed,mon_install_date,metrics_timestamp,os_version,kernel_version,uptime,libvirt_version,qemu_version,overselling,hostname,vnc_addr,selinux_enforcing,problems,hdd_overselling,ip_addr_v6,bird_error,lxd_error,lxd_version,host_limit,socket_number,ha_state,ha_disable_failed,ha_error,update_dc_networks_failed,network_settings_lock,network_error,frr_error,host_filter,vm5_data,additional_data,vcpu_limit,spice_error from vm_node where ip_addr=\\\"$node_ip\\\"\\G;'"
2023-03-20 17:32:28 +08:00
declare -A cmd
cmd["0 hostnamectl"]="hostnamectl";
cmd["1 release"]="\"cat /etc/*release\"";
cmd["2 dmesg"]="\"dmesg | grep -i -E 'error|failed|critical|bug|panic'\"";
cmd["3 services"]="\"journalctl | grep -i -E 'error|failed|critical|bug|panic'\"";
cmd["4 services"]="\"systemctl status libvirtd -l\"";
cmd["5 services"]="\"systemctl status gomon -l\"";
cmd["6 services"]="\"systemctl show libvirtd\"";
cmd["7 sshd_config"]="\"cat /etc/ssh/sshd_config\"";
cmd["8 hwinfo"]="lscpu";
cmd["9 hwinfo"]="lscpu | grep -i -E 'socket|core|thread'";
cmd["10 hwinfo"]="dmidecode";
cmd["11 time"]="timedatectl";
cmd["12 time"]="uptime";
cmd["13 time"]="\"last reboot | head -10\"";
cmd["14 virsh"]="\"virsh list --all\"";
cmd["15 virsh"]="\"virsh pool-list --all\"";
cmd["16 virsh"]="\"virt-host-validate\"";
cmd["17 mem"]="\"free -m\"";
cmd["18 network"]="\"ip -br a\"";
cmd["19 network"]="\"brctl show\"";
cmd["20 network"]="\"curl -v download.ispsystem.com\"";
cmd["21 firewall"]="\"systemctl status nftables\"";
cmd["22 firewall"]="\"systemctl status firewalld\"";
cmd["23 firewall"]="\"firewall-cmd --list-ports\"";
cmd["24 firewall"]="\"nft list ruleset\"";
cmd["25 firewall"]="\"ss -tulpn | grep 16514\"";
cmd["26 firewall"]="\"ss -tulpn '( sport >= 49152 and sport <= 49215 )'\"";
cmd["27 firewall"]="\"ss -tulpn '( sport >= 5900 and sport <= 6900 )'\"";
cmd["28 firewall"]="\"ss -tulpn '( sport = 179 or sport = 4789 )'\"";
cmd["29 firewall"]="\"ss -tulpn | grep 16514\"";
cmd["30 firewall"]="\"ss -tulpn | grep -E ':179|:4789'\"";
cmd["31 disks"]="\"df -h --exclude tmpfs --exclude devtmpfs --exclude squashfs --exclude overlay\"";
cmd["32 disks"]="\"df -i\"";
cmd["33 disks"]="lsblk";
cmd["34 virsh"]="\"lvdisplay\"";
cmd["35 virsh"]="\"pvdisplay\"";
cmd["36 virsh"]="\"vgdisplay\"";
cmd["37 packages"]="\"yum repolist\"";
cmd["38 packages"]="\"yum history list\"";
for k in "${!cmd[@]}";do
typelog=$(echo $k | cut -d ' ' -f2);
#echo $typelog;
#echo -e "$k=${cmd[$k]}";
node_collect $node_ip $node_port "${node_ip}_${typelog}.log" "${cmd[$k]}";
done
2023-02-23 23:32:00 +08:00
echo "collected logs about node $node_ip $node_port";
2023-02-17 02:09:28 +08:00
finish;
}
2023-03-20 17:32:28 +08:00
2023-03-15 18:23:16 +08:00
# обработка аргументов
2023-02-17 02:09:28 +08:00
if [[ "$1" == "-logs" || "$1" == "1" ]]; then
2023-02-23 23:32:00 +08:00
logtype="logs";
about_platform;
2023-02-17 02:09:28 +08:00
_logs;
elif [[ "$1" == "-short-logs" || "$1" == "2" ]]; then
2023-02-23 23:32:00 +08:00
logtype="short-logs";
about_platform;
2023-02-17 02:09:28 +08:00
_short_logs;
elif [[ "$1" == "-lic" || "$1" == "3" ]]; then
2023-02-23 23:32:00 +08:00
logtype="lic";
about_platform;
2023-02-17 02:09:28 +08:00
_lic;
elif [[ "$1" == "-node" || "$1" == "4" ]]; then
2023-02-23 23:32:00 +08:00
logtype="node";
2023-02-17 02:09:28 +08:00
if [[ -z $2 || -z $3 ]]; then
echo "please set IP address and port of node!";
2023-02-23 23:32:00 +08:00
read -p "Enter IP address: " node_ip
read -p "Enter port: " node_port
about_platform;
_node $node_ip $node_port;
2023-02-17 02:09:28 +08:00
exit;
else
2023-02-23 23:32:00 +08:00
about_platform;
2023-02-17 02:09:28 +08:00
_node $2 $3;
fi
2023-02-23 13:59:45 +08:00
#elif [[ "$1" == "-vm-host" || "$1" == "5" ]]; then
# _vm_host;
2023-02-17 02:09:28 +08:00
else
_help;
fi