tj_27
Posted on June 29, 2024
Here's my version of writing redis_exporter installtion script.
I just found writing script fun not until my back aches, lol
#!/bin/bash
# Installing Redis Exporter
# tput commands
CLEAR="tput clear"
DOWN="tput cud1"
BOLD="tput bold"
NORMAL="tput sgr0"
BLACK="tput setaf 0"
RED="tput setaf 1"
GREEN="tput setaf 2"
YELLOW="tput setaf 3"
BLUE="tput setaf 4"
$CLEAR
$DOWN
# Installation confirmation
printf "You have selected to install redis_exporter.\n\n"
read -p "Do you want to continue? [ yes / no ] : " USER_INPUT
USER_INPUT=${USER_INPUT:-yes}
$DOWN
# Convert user's choice to lowercase for case-sensitive comparison
USER_INPUT_LOWER=$(echo "$USER_INPUT" | tr '[:upper:]' '[:lower:]')
# Check the user's input
if [ "$USER_INPUT_LOWER" == "yes" ]; then
$YELLOW
printf "Redis exporter installation confirmed.\n\n"
$NORMAL
else
printf "Redis exporter installation cancelled.\n\n"
exit
fi
# Specify the name of the systemd service
SERVICE_NAME="redis_exporter"
# Check if the service file exists
if [ -e "/usr/lib/systemd/system/$SERVICE_NAME.service" ]; then
# Check if the service is active
if sudo systemctl is-active --quiet "$SERVICE_NAME"; then
$BOLD
printf "There is an active $SERVICE_NAME. \n\n"
$NORMAL
# Check the version of the active redis_exporter
REDIS_EXPORTER_PATH="/usr/local/$SERVICE_NAME/$SERVICE_NAME"
VERSION_INFO="$($REDIS_EXPORTER_PATH --version 2>&1 | awk '{print $6}')"
$GREEN
printf "Active Redis ExporterVersion: $VERSION_INFO \n\n"
$NORMAL
printf "Do you want to remove it and replace with a new one? [ 1 / 2 ]\n\n"
printf " 1: Remove the active redis_exporter and replace it with a new one. \n\n"
printf " 2: Don't do anything and exit.\n\n"
read -rp "> " ACTION
# Check the action to do
if [ -z "$ACTION" ]; then
printf "Removing all redis_exporter files... \n\n"
# Remove redis_exporter related files
sudo systemctl stop $SERVICE_NAME
sudo systemctl disable $SERVICE_NAME
sudo rm /usr/lib/systemd/system/$SERVICE_NAME.service
sudo rm -rf /usr/local/redis_exporter*
$YELLOW
printf "Related files removed.\n\n"
$NORMAL
printf "Installation will continue...\n\n"
elif [ "$ACTION" -eq 1 ]; then
printf "Removing all redis_exporter files... \n\n"
# Remove redis_exporter related files
sudo systemctl stop $SERVICE_NAME
sudo systemctl disable $SERVICE_NAME
sudo rm /usr/lib/systemd/system/$SERVICE_NAME.service
sudo rm -rf /usr/local/redis_exporter*
$YELLOW
printf "Related files removed.\n\n"
$NORMAL
printf "Installation will continue...\n\n"
elif [ "$ACTION" -eq 2 ]; then
$DOWN
printf "No action done.\n\n"
exit
else
printf "Invalid input. Please enter 1 or 2.\n\n"
exit 1
fi
else
printf "There's a $SERVICE_NAME service that is not active. Removing related files...\n\n"
sudo systemctl stop $SERVICE_NAME
sudo systemctl disable $SERVICE_NAME
sudo rm /usr/lib/systemd/system/$SERVICE_NAME.service
sudo rm -rf /usr/local/redis_exporter*
$YELLOW
printf "Related files removed.\n\n"
$NORMAL
printf "Installation will continue...\n\n"
fi
else
printf "No $SERVICE_NAME service file found.\n\n"
fi
# Curling Google to check if connected to a network
printf "Looking for a network...\n\n"
if curl google.com > /dev/null; then
$DOWN
$YELLOW
printf "Network connected.\n\n"
$NORMAL
else
$DOWN
printf "The server is not connected to the network. Please connect and try again.\n\n";
exit 1
fi
echo -n "Insert the version you would like to be installed, default is [ 1.29.0 ] : "
$BOLD
$BLUE
read VERSION
$NORMAL
VERSION=${VERSION:-1.29.0}
$DOWN
$NORMAL
# Download the file
wget https://github.com/oliver006/redis_exporter/releases/download/v$VERSION/redis_exporter-v$VERSION.linux-amd64.tar.gz -P /opt
# Extract the downloaded tarball in the user directory with new name
tar -xzvf /opt/redis_exporter-v$VERSION.linux-amd64.tar.gz -C /usr/local && mv /usr/local/redis_exporter-v$VERSION.linux-amd64 /usr/local/redis_exporter
# Create a systemd service file for redis exporter
sudo cat >/usr/lib/systemd/system/redis_exporter.service<<EOF
[Unit]
Descrition=redis_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/redis_exporter/redis_exporter.pid
ExecStart=/usr/local/redis_exporter/redis_exporter -redis.password=xxPASSWORDxx -redis.addr=xxIPxx:xxPORTxx
ExecReload=/bin/kill -s HUP
ExecStop=/bin/kill -s QUIT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
# Provide the redis information
$DOWN
$YELLOW
printf "Please enter the Redis information (e.g, 10.10.10.10:6379 MyPasswd123) : \n"
$NORMAL
read -r REDIS_INFO
$DOWN
IP=$(echo "$REDIS_INFOR" | awk '{print $1}' FS=":")
PORT=$(echo "$REDIS_INFO" | awk '{print $1}' | awk '{print $2}' FS=":")
PASSWORD=$(echo "$REDIS_INFO" |awk '{print $2}')
sed -i "s#xxPORTxx#$PORT#g" /usr/lib/systemd/system/redis_exporter.service
sed -i "s#xxIPxx#$IP#g" /usr/lib/systemd/system/redis_exporter.service
sed -i "s#xxPASSWORDxx#$PASSWORD#g" /usr/lib/systemd/system/redis_exporter.service
# Reload systemd and start redis exporter
sudo systemctl daemon-reload
sudo systemctl start redis_exporter.service
sudo systemctl enable redis_exporter.service
sudo systemctl status redis_exporter.service
# Cleanup downloaded file
rm -f /opt/redis_exporter*
$DOWN
if sudo systemctl is-active --quiet "$SERVICE_NAME"; then
$DOWN
$BOLD
$YELLOW
printf "======================================\n"
$GREEN
printf "Redis Exporter installed successfully!\n"
$NORMAL
$BOLD
printf "Version: $VERSION_INFO\n"
$YELLOW
printf "======================================\n"
$NORMAL
$DOWN
else
$DOWN
$RED
printf "Redis Exporter installation failed.\n\n"
$NORMAL
$DOWN
fi
💖 💪 🙅 🚩
tj_27
Posted on June 29, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.