b1b9e3253d
/var/log/audit/audit.log contains SElinux logs that we sometimes need for debug, since Puppet OpenStack CI is running SElinux in enforced mode. This file will be useful for us so we would like to copy it from nodes. Change-Id: Ic554dcad8d28b9cbc612019002b19982c53e74f7
207 lines
6.1 KiB
Bash
Executable File
207 lines
6.1 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
# implied.
|
|
#
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
# This script takes bits from devstack-gate/functions/cleanup_host in a
|
|
# more generic approach, so we don't need to actually run devstack on the node
|
|
# to cleanup an host.
|
|
|
|
set -o xtrace
|
|
set -o errexit
|
|
|
|
LOG_DIR=$WORKSPACE/logs
|
|
|
|
mkdir $WORKSPACE/logs
|
|
|
|
# PROJECTS
|
|
# - for each entry, we will probe /etc/${project} and /var/log/${project}
|
|
# and copy out files
|
|
#
|
|
# For right now, we populate our projects with a guess from those that
|
|
# have puppet modules installed. revisit this if needs change
|
|
for project in /etc/puppet/modules/*; do
|
|
# find Puppet OpenStack modules
|
|
if [ -f $project/metadata.json ]; then
|
|
if egrep -q "github.com/(stackforge|openstack)/puppet" $project/metadata.json; then
|
|
PROJECTS+="$(basename $project) "
|
|
fi
|
|
fi
|
|
done
|
|
|
|
function is_fedora {
|
|
# note we consider CentOS 7 as fedora for now
|
|
lsb_release -i 2>/dev/null | grep -iq "fedora" || \
|
|
lsb_release -i 2>/dev/null | grep -iq "CentOS"
|
|
}
|
|
|
|
function uses_debs {
|
|
# check if apt-get is installed, valid for debian based
|
|
type "apt-get" 2>/dev/null
|
|
}
|
|
|
|
# Archive the project config & logs
|
|
mkdir $LOG_DIR/etc/
|
|
for p in $PROJECTS; do
|
|
if [ -d /etc/$p ]; then
|
|
sudo cp -r /etc/$p $LOG_DIR/etc/
|
|
fi
|
|
if [ -d /var/log/$p ]; then
|
|
sudo cp -r /var/log/$p $LOG_DIR
|
|
fi
|
|
done
|
|
|
|
#
|
|
# Extra bits and pieces follow
|
|
#
|
|
|
|
# system logs
|
|
if uses_debs; then
|
|
sudo cp /var/log/syslog $LOG_DIR/syslog.txt
|
|
sudo cp /var/log/kern.log $LOG_DIR/kern_log.txt
|
|
elif is_fedora; then
|
|
sudo journalctl --no-pager > $LOG_DIR/syslog.txt
|
|
fi
|
|
|
|
# rabbitmq logs
|
|
if [ -d /var/log/rabbitmq ]; then
|
|
sudo cp -r /var/log/rabbitmq $LOG_DIR
|
|
fi
|
|
|
|
# db logs
|
|
if [ -d /var/log/postgresql ] ; then
|
|
# Rename log so it doesn't have an additional '.' so it won't get
|
|
# deleted
|
|
sudo cp /var/log/postgresql/*log $LOG_DIR/postgres.log
|
|
fi
|
|
if [ -f /var/log/mysql.err ] ; then
|
|
sudo cp /var/log/mysql.err $LOG_DIR/mysql_err.log
|
|
fi
|
|
if [ -f /var/log/mysql.log ] ; then
|
|
sudo cp /var/log/mysql.log $LOG_DIR/
|
|
fi
|
|
|
|
# tempest logs
|
|
if [ -f /tmp/openstack/tempest/tempest.log ] ; then
|
|
sudo cp /tmp/openstack/tempest/tempest.log $LOG_DIR/
|
|
fi
|
|
|
|
# Tempest subunit results
|
|
if [ -f /tmp/openstack/tempest/testrepository.subunit ] ; then
|
|
sudo cp /tmp/openstack/tempest/testrepository.subunit $LOG_DIR/testrepository.subunit
|
|
fi
|
|
|
|
# dstat logs
|
|
if [ -f /var/log/dstat.log ] ; then
|
|
sudo cp /var/log/dstat.log $LOG_DIR/
|
|
fi
|
|
|
|
# libvirt
|
|
if [ -d /var/log/libvirt ] ; then
|
|
sudo cp -r /var/log/libvirt $LOG_DIR/
|
|
fi
|
|
|
|
# sudo config
|
|
sudo cp -r /etc/sudoers.d $LOG_DIR/
|
|
sudo cp /etc/sudoers $LOG_DIR/sudoers.txt
|
|
|
|
# apache logs; including wsgi stuff like horizon, keystone, etc.
|
|
if uses_debs; then
|
|
apache_logs=/var/log/apache2
|
|
if [ -d /etc/apache2/sites-enabled ]; then
|
|
mkdir $LOG_DIR/apache_config
|
|
sudo cp /etc/apache2/sites-enabled/* $LOG_DIR/apache_config
|
|
for f in `ls $LOG_DIR/apache_config`; do
|
|
mv $LOG_DIR/apache_config/${f} $LOG_DIR/apache_config/${f}.txt
|
|
done
|
|
fi
|
|
elif is_fedora; then
|
|
apache_logs=/var/log/httpd
|
|
if [ -d /etc/httpd/conf.d ]; then
|
|
mkdir $LOG_DIR/apache_config
|
|
sudo cp /etc/httpd/conf.d/* $LOG_DIR/apache_config
|
|
for f in `ls $LOG_DIR/apache_config`; do
|
|
mv $LOG_DIR/apache_config/${f} $LOG_DIR/apache_config/${f}.txt
|
|
done
|
|
fi
|
|
fi
|
|
if [ -d ${apache_logs} ]; then
|
|
sudo cp -r ${apache_logs} $LOG_DIR/apache
|
|
fi
|
|
|
|
if [ -f /var/log/audit/audit.log ]; then
|
|
sudo cp /var/log/audit/audit.log $LOG_DIR/audit.log.txt
|
|
fi
|
|
|
|
if [ -d /tmp/openstack/tempest ]; then
|
|
sudo cp /tmp/openstack/tempest/etc/tempest.conf $LOG_DIR/tempest.conf.txt
|
|
fi
|
|
|
|
if [ -d /etc/openstack-dashboard ]; then
|
|
sudo cp -r /etc/openstack-dashboard $LOG_DIR/etc/openstack-dashboard
|
|
for f in `ls $LOG_DIR/etc/openstack-dashboard`; do
|
|
sudo mv $LOG_DIR/etc/openstack-dashboard/${f} $LOG_DIR/etc/openstack-dashboard/${f}.txt
|
|
done
|
|
fi
|
|
|
|
# package status
|
|
if [ `command -v dpkg` ]; then
|
|
dpkg -l> $LOG_DIR/dpkg-l.txt
|
|
fi
|
|
if [ `command -v rpm` ]; then
|
|
rpm -qa > $LOG_DIR/rpm-qa.txt
|
|
fi
|
|
|
|
# system status & informations
|
|
df -h > $LOG_DIR/df.txt
|
|
free -m > $LOG_DIR/free.txt
|
|
cat /proc/cpuinfo > $LOG_DIR/cpuinfo.txt
|
|
ps -eo user,pid,ppid,lwp,%cpu,%mem,size,rss,cmd > $LOG_DIR/ps.txt
|
|
|
|
# Make sure jenkins can read all the logs and configs
|
|
sudo find $LOG_DIR -type d -execdir sudo chmod 755 '{}' \;
|
|
sudo find $LOG_DIR -type f -execdir sudo chmod 644 '{}' \;
|
|
|
|
# do not try to save symlinks because source files might not have
|
|
# the right permissions to let jenkins user to upload them on log servers.
|
|
sudo find $LOG_DIR -type l -execdir sudo rm -f '{}' \;
|
|
|
|
# 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.
|
|
|
|
# firstly, rename all .log files to .txt files
|
|
for f in $(find $LOG_DIR -name "*.log"); do
|
|
sudo mv $f ${f/.log/.txt}
|
|
done
|
|
|
|
# append .txt to all config files
|
|
# (there are some /etc/swift .builder and .ring files that get
|
|
# caught up which aren't really text, don't worry about that)
|
|
find $LOG_DIR/sudoers.d $LOG_DIR/etc -type f -exec sudo mv '{}' '{}'.txt \;
|
|
|
|
# rabbitmq
|
|
if [ -f $LOG_DIR/rabbitmq ]; then
|
|
find $LOG_DIR/rabbitmq -type f -exec sudo mv '{}' '{}'.txt \;
|
|
for X in `find $LOG_DIR/rabbitmq -type f` ; do
|
|
sudo mv "$X" "${X/@/_at_}"
|
|
done
|
|
fi
|
|
|
|
|
|
# Compress all text logs
|
|
sudo find $LOG_DIR -iname '*.txt' -type f -execdir gzip -9 {} \+
|
|
sudo find $LOG_DIR -iname '*.dat' -type f -execdir gzip -9 {} \+
|
|
sudo find $LOG_DIR -iname '*.conf' -type f -execdir gzip -9 {} \+
|