cdef3f6885
the ollect_rabbitmq_stats.sh file correctly creates and uses a tempfile, except it writes the colums headers to DATA_FILE, which is both non-atomic and overwritten a few lines later with a mv. Change-Id: I59a9279e67da26b483a0cac539abc8e40da3622b Closes-Bug: #1806635
57 lines
2.1 KiB
Bash
Executable File
57 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# Copyright (C) 2011, 2014 Canonical
|
|
# All Rights Reserved
|
|
# Author: Liam Young, Jacek Nykis
|
|
|
|
# Produce a queue data for a given vhost. Useful for graphing and Nagios checks
|
|
LOCK=/var/lock/rabbitmq-gather-metrics.lock
|
|
# Check for a lock file and if not, create one
|
|
lockfile-create -r2 --lock-name $LOCK > /dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to create lockfile: $LOCK."
|
|
exit 1
|
|
fi
|
|
trap "rm -f $LOCK > /dev/null 2>&1" exit
|
|
|
|
# Required to fix the bug about start-stop-daemon not being found in
|
|
# rabbitmq-server 2.7.1-0ubuntu4.
|
|
# '/usr/sbin/rabbitmqctl: 33: /usr/sbin/rabbitmqctl: start-stop-daemon: not found'
|
|
export PATH=${PATH}:/sbin/
|
|
|
|
if [ -f /var/lib/rabbitmq/pids ]; then
|
|
RABBIT_PID=$(grep "{rabbit\@${HOSTNAME}," /var/lib/rabbitmq/pids | sed -e 's!^.*,\([0-9]*\).*!\1!')
|
|
elif [ -f /var/run/rabbitmq/pid ]; then
|
|
RABBIT_PID=$(cat /var/run/rabbitmq/pid)
|
|
elif [ -f /var/lib/rabbitmq/mnesia/rabbit\@${HOSTNAME}.pid ]; then
|
|
# Vivid and later
|
|
RABBIT_PID=$(cat /var/lib/rabbitmq/mnesia/rabbit\@${HOSTNAME}.pid)
|
|
else
|
|
echo "No PID file found"
|
|
exit 3
|
|
fi
|
|
DATA_DIR="/var/lib/rabbitmq/data"
|
|
DATA_FILE="${DATA_DIR}/$(hostname -s)_queue_stats.dat"
|
|
LOG_DIR="/var/lib/rabbitmq/logs"
|
|
RABBIT_STATS_DATA_FILE="${DATA_DIR}/$(hostname -s)_general_stats.dat"
|
|
NOW=$(date +'%s')
|
|
HOSTNAME=$(hostname -s)
|
|
MNESIA_DB_SIZE=$(du -sm /var/lib/rabbitmq/mnesia | cut -f1)
|
|
RABBIT_RSS=$(ps -p $RABBIT_PID -o rss=)
|
|
if [ ! -d $DATA_DIR ]; then
|
|
mkdir -p $DATA_DIR
|
|
fi
|
|
if [ ! -d $LOG_DIR ]; then
|
|
mkdir -p $LOG_DIR
|
|
fi
|
|
TMP_DATA_FILE=$(mktemp -p ${DATA_DIR})
|
|
echo "#Vhost Name Messages_ready Messages_unacknowledged Messages Consumers Memory Time" > ${TMP_DATA_FILE}
|
|
/usr/sbin/rabbitmqctl -q list_vhosts | \
|
|
while read VHOST; do
|
|
/usr/sbin/rabbitmqctl -q list_queues -p $VHOST name messages_ready messages_unacknowledged messages consumers memory | \
|
|
awk "{print \"$VHOST \" \$0 \" $(date +'%s') \"}" >> ${TMP_DATA_FILE} 2>${LOG_DIR}/list_queues.log
|
|
done
|
|
mv ${TMP_DATA_FILE} ${DATA_FILE}
|
|
chmod 644 ${DATA_FILE}
|
|
echo "mnesia_size: ${MNESIA_DB_SIZE}@$NOW" > $RABBIT_STATS_DATA_FILE
|
|
echo "rss_size: ${RABBIT_RSS}@$NOW" >> $RABBIT_STATS_DATA_FILE
|