Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 59 additions & 2 deletions src/core/mysql
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@

# Print the output of "mysqladmin status" to the mysql file
print_mysql() {
log INFO "Starting 'mysql status' report - ${LOGFILE##*/}"
local LOGFILE="$1"
local MYCNF="$2"
local PLESK_FILE="/etc/psa/.psa.shadow"
log INFO "Starting 'mysql status' report - ${LOGFILE##*/}"
if [[ -r "${PLESK_FILE}" ]]; then
echo "MySQL (plesk) status" >> "${LOGFILE}"
mysqladmin \
Expand All @@ -44,10 +44,10 @@ print_mysql() {

# Print the non-truncated innodb status to the mysql file
print_mysql_innodb_status() {
log INFO "Starting 'mysql innodb' report - ${LOGFILE##*/}"
local LOGFILE="$1"
local MYCNF="$2"
local mysql_cmd=''
log INFO "Starting 'mysql innodb' report - ${LOGFILE##*/}"

unset MYVALS PID_FILE TMPDIR
if [[ -r "${PLESK_FILE}" ]]; then
Expand Down Expand Up @@ -91,10 +91,55 @@ print_mysql_innodb_status() {

# Print the output of "mysqladmin processlist" to the mysql file
print_mysql_procs() {
local LOGFILE="$1"
local MYCNF="$2"
local PLESK_FILE="/etc/psa/.psa.shadow"
log INFO "Starting 'mysql processlist' report - ${LOGFILE##*/}"
if [[ -r "${PLESK_FILE}" ]]; then
echo "MySQL (plesk) processes" >> "${LOGFILE}"
if [[ ${MYSQL_PROCESS_LIST,,} == "table" ]]; then
mysqladmin \
-uadmin \
-p$( cat "${PLESK_FILE}" ) \
-v processlist \
--connect-timeout=5 \
>> "${LOGFILE}"
fi
if [[ ${MYSQL_PROCESS_LIST,,} == "vertical" ]]; then
mysql \
-uadmin \
-p$( cat "${PLESK_FILE}" ) \
--connect-timeout=5 \
-e "show full processlist\G" \
>> "${LOGFILE}"
fi
else
echo "MySQL (${MYCNF}) processes" >> "${LOGFILE}"
if [[ ${MYSQL_PROCESS_LIST} == "table" ]]; then
mysqladmin \
--defaults-file="${MYCNF}" \
-v processlist \
--connect-timeout=5 \
>> "${LOGFILE}"
elif [[ ${MYSQL_PROCESS_LIST,,} == "vertical" ]]; then
mysql \
--defaults-file="${MYCNF}" \
--connect-timeout=5 \
-e "show full processlist\G" \
>> "${LOGFILE}"
fi
fi
print_blankline "${LOGFILE}"
log INFO "Ended 'mysql processlist' report"
}

# Pipe the output of "mysqladmin processlist" through head and append to the mysql file
print_mysql_procs_max_bytes() {
local LOGFILE="$1"
local MYCNF="$2"
local MYSQL_PROCESS_LIST_MAX_BYTES="$3"
local PLESK_FILE="/etc/psa/.psa.shadow"
log INFO "Starting 'mysql processlist' report with max bytes ${MYSQL_PROCESS_LIST_MAX_BYTES} - ${LOGFILE##*/}"
if [[ -r "${PLESK_FILE}" ]]; then
echo "MySQL (plesk) processes" >> "${LOGFILE}"
if [[ ${MYSQL_PROCESS_LIST,,} == "table" ]]; then
Expand All @@ -103,15 +148,21 @@ print_mysql_procs() {
-p$( cat "${PLESK_FILE}" ) \
-v processlist \
--connect-timeout=5 \
| stdbuf -oL head -c ${MYSQL_PROCESS_LIST_MAX_BYTES} \
>> "${LOGFILE}"
print_blankline "${LOGFILE}"
echo "-- WARNING POTENTIALLY TRUCATED PROCESSLIST OUTPUT" >> "${LOGFILE}"
fi
if [[ ${MYSQL_PROCESS_LIST,,} == "vertical" ]]; then
mysql \
-uadmin \
-p$( cat "${PLESK_FILE}" ) \
--connect-timeout=5 \
-e "show full processlist\G" \
| stdbuf -oL head -c ${MYSQL_PROCESS_LIST_MAX_BYTES} \
>> "${LOGFILE}"
print_blankline "${LOGFILE}"
echo "-- WARNING POTENTIALLY TRUCATED PROCESSLIST OUTPUT" >> "${LOGFILE}"
fi
else
echo "MySQL (${MYCNF}) processes" >> "${LOGFILE}"
Expand All @@ -120,13 +171,19 @@ print_mysql_procs() {
--defaults-file="${MYCNF}" \
-v processlist \
--connect-timeout=5 \
| stdbuf -oL head -c ${MYSQL_PROCESS_LIST_MAX_BYTES} \
>> "${LOGFILE}"
print_blankline "${LOGFILE}"
echo "-- WARNING POTENTIALLY TRUCATED PROCESSLIST OUTPUT" >> "${LOGFILE}"
elif [[ ${MYSQL_PROCESS_LIST,,} == "vertical" ]]; then
mysql \
--defaults-file="${MYCNF}" \
--connect-timeout=5 \
-e "show full processlist\G" \
| stdbuf -oL head -c ${MYSQL_PROCESS_LIST_MAX_BYTES} \
>> "${LOGFILE}"
print_blankline "${LOGFILE}"
echo "-- WARNING POTENTIALLY TRUCATED PROCESSLIST OUTPUT" >> "${LOGFILE}"
fi
fi
print_blankline "${LOGFILE}"
Expand Down
15 changes: 11 additions & 4 deletions src/recap
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/bash
#
# Copyright (C) 2017 Rackspace, Inc.
#
Expand Down Expand Up @@ -32,7 +32,7 @@ declare -r _VERSION='2.1.0'
declare -r DATE=$( date +%F_%T )
declare -r LOCKFILE="/var/lock/recap.lock"
declare -r LOG_SUFFIX=$( date +%Y%m%d-%H%M%S )
declare -r LIBDIR="/usr/local/lib/recap"
declare -r LIBDIR="/usr/lib/recap"
declare -r COREDIR="${LIBDIR}/core"
declare -r PLUGIN_A_DIR="${LIBDIR}/plugins-available"
declare -r PLUGIN_E_DIR="${LIBDIR}/plugins-enabled"
Expand Down Expand Up @@ -91,10 +91,12 @@ USEMYSQL="${default_USEMYSQL}"
# These depend on USEMYSQL to be enabled("yes")
declare -r default_DOTMYDOTCNF="/root/.my.cnf"
declare -r default_MYSQL_PROCESS_LIST="table"
declare -r default_MYSQL_PROCESS_LIST_MAX_BYTES=0
declare -r default_USEINNODB="no"
declare -r default_USEMYSQLPROCESSLIST="no"
DOTMYDOTCNF="${default_DOTMYDOTCNF}"
MYSQL_PROCESS_LIST="${default_MYSQL_PROCESS_LIST}"
MYSQL_PROCESS_LIST_MAX_BYTES="${default_MYSQL_PROCESS_LIST_MAX_BYTES}"
USEINNODB="${default_USEINNODB}"
USEMYSQLPROCESSLIST="${default_USEMYSQLPROCESSLIST}"

Expand Down Expand Up @@ -395,8 +397,13 @@ run_mysql_report() {

# check to see if the optional mysql process list should be generated
if [[ "${USEMYSQLPROCESSLIST,,}" == "yes" ]]; then
print_blankline "${ITEM_FILE}"
print_mysql_procs "${ITEM_FILE}" "${MYCNF}"
if [[ "${MYSQL_PROCESS_LIST_MAX_BYTES}" -gt 0 ]]; then
print_blankline "${ITEM_FILE}"
print_mysql_procs_max_bytes "${ITEM_FILE}" "${MYCNF}" "${MYSQL_PROCESS_LIST_MAX_BYTES}"
else
print_blankline "${ITEM_FILE}"
print_mysql_procs "${ITEM_FILE}" "${MYCNF}"
fi
fi
if [[ "${USEINNODB,,}" == "yes" ]]; then
# send df -h output to output file
Expand Down
6 changes: 6 additions & 0 deletions src/recap.conf
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,12 @@
# Example, to enable: USEMYSQLPROCESSLIST="yes"
#USEMYSQLPROCESSLIST="no"

# MYSQL_PROCESS_LIST_MAX_BYTES - Limit byte length of logs from "mysqladmin processlist"
# Makes use of DOTMYDOTCNF and MYSQL_PROCESS_LIST
# requires: USEMYSQL
# Example, set larger than 0 to enable: MYSQL_PROCESS_LIST_MAX_BYTES=104857600
#MYSQL_PROCESS_LIST_MAX_BYTES=0

# USEINNODB - Generates logs from "mysql show engine innodb status"
# Makes use of DOTMYDOTCNF
# requires: USEMYSQL
Expand Down