Merge "Import copy_logs.sh script from openstack-infra/project-config"
This commit is contained in:
		
							
								
								
									
										204
									
								
								copy_logs.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										204
									
								
								copy_logs.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,204 @@ | ||||
| #!/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 | ||||
|  | ||||
| export SCRIPT_DIR=$(cd `dirname $0` && pwd -P) | ||||
| source $SCRIPT_DIR/functions | ||||
|  | ||||
| print_header 'Copy logs into workspace' | ||||
|  | ||||
| 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 | ||||
|  | ||||
| # 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 | ||||
|  | ||||
| # openvswitch | ||||
| if [ -d /var/log/openvswitch ] ; then | ||||
|     sudo cp -r /var/log/openvswitch $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 {} \+ | ||||
		Reference in New Issue
	
	Block a user
	 Jenkins
					Jenkins