96 lines
2.9 KiB
Bash
96 lines
2.9 KiB
Bash
#!/bin/bash
|
|
|
|
set +o errexit
|
|
|
|
check_failure() {
|
|
# All docker container's status are created, restarting, running, removing,
|
|
# paused, exited and dead. Containers without running status are treated as
|
|
# failure. removing is added in docker 1.13, just ignore it now.
|
|
failed_containers=$(docker ps -a --format "{{.Names}}" \
|
|
--filter status=created \
|
|
--filter status=restarting \
|
|
--filter status=paused \
|
|
--filter status=exited \
|
|
--filter status=dead)
|
|
|
|
if [[ -n "$failed_containers" ]]; then
|
|
exit 1;
|
|
fi
|
|
}
|
|
|
|
copy_logs() {
|
|
LOG_DIR=/tmp/logs
|
|
SYSTEM_LOGS=$LOG_DIR/logs/
|
|
|
|
if [[ -d "$HOME/.ansible" ]]; then
|
|
cp -rvnL $HOME/.ansible/* ${LOG_DIR}/ansible/
|
|
fi
|
|
|
|
# Backup etc
|
|
cp -rvnL /etc ${LOG_DIR}/
|
|
cp /etc/sudoers ${LOG_DIR}/etc/sudoers.txt
|
|
|
|
cp -rvnL /var/log/* ${SYSTEM_LOGS}
|
|
cp -rvnL /tmp/kubespray ${LOG_DIR}/
|
|
|
|
|
|
if [[ -x "$(command -v journalctl)" ]]; then
|
|
journalctl --no-pager > ${SYSTEM_LOGS}/syslog.txt
|
|
journalctl --no-pager -u docker.service > ${SYSTEM_LOGS}/docker.log
|
|
else
|
|
cp /var/log/upstart/docker.log ${SYSTEM_LOGS}/docker.log
|
|
fi
|
|
|
|
df -h > ${SYSTEM_LOGS}/df.txt
|
|
free > ${SYSTEM_LOGS}/free.txt
|
|
parted -l > ${SYSTEM_LOGS}/parted-l.txt
|
|
mount > ${SYSTEM_LOGS}/mount.txt
|
|
env > ${SYSTEM_LOGS}/env.txt
|
|
|
|
if [ `command -v dpkg` ]; then
|
|
dpkg -l > ${SYSTEM_LOGS}/dpkg-l.txt
|
|
fi
|
|
if [ `command -v rpm` ]; then
|
|
rpm -qa > ${SYSTEM_LOGS}/rpm-qa.txt
|
|
fi
|
|
|
|
# final memory usage and process list
|
|
ps -eo user,pid,ppid,lwp,%cpu,%mem,size,rss,cmd > ${SYSTEM_LOGS}/ps.txt
|
|
|
|
if [ `command -v docker` ]; then
|
|
# docker related information
|
|
(docker info && docker images && docker ps -a) > ${SYSTEM_LOGS}/docker-info.txt
|
|
|
|
for container in $(docker ps -a --format "{{.Names}}"); do
|
|
docker logs --tail all ${container} > ${SYSTEM_LOGS}/containers/${container}.txt
|
|
done
|
|
fi
|
|
|
|
|
|
if [ `command -v kubectl` ]; then
|
|
if [ `command -v oc` ]; then
|
|
oc login -u system:admin
|
|
fi
|
|
|
|
(kubectl version && kubectl cluster-info dump && kubectl config view) > ${SYSTEM_LOGS}/k8s-info.txt 2>&1
|
|
(kubectl get pods --all-namespaces && kubectl describe all --all-namespaces) > ${SYSTEM_LOGS}/k8s-describe-all.txt 2>&1
|
|
fi
|
|
|
|
# Rename files to .txt; this is so that when displayed via
|
|
# logs.openstack.org clicking results in the browser shows the
|
|
# files, rather than trying to send it to another app or make you
|
|
# download it, etc.
|
|
|
|
# Rename all .log files to .txt files
|
|
for f in $(find ${SYSTEM_LOGS} -name "*.log"); do
|
|
mv $f ${f/.log/.txt}
|
|
done
|
|
|
|
chmod -R 777 ${LOG_DIR}
|
|
find $SYSTEM_LOGS -iname '*.txt' -execdir gzip -f -9 {} \+
|
|
find $SYSTEM_LOGS -iname '*.json' -execdir gzip -f -9 {} \+
|
|
}
|
|
|
|
copy_logs
|
|
check_failure
|