DEV Community

Cover image for Installing Elasticsearch exporter Bash Script
tj_27
tj_27

Posted on

Installing Elasticsearch exporter Bash Script

Here we go again! Down is a script for installing elasticsearch exporter

#!/bin/bash
# Installing Elasticsearch 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 elasticsearch_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 "Elasticsearch exporter installation confirmed.\n\n"
    $NORMAL
else
    printf "Elasticsearch exporter installation cancelled.\n\n"
    exit
fi

# Specify the name of the systemd service
SERVICE_NAME="elasticsearch_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 elasticsearch_exporter
        elasticsearch_exporter_PATH="/usr/local/$SERVICE_NAME/$SERVICE_NAME"
        VERSION_INFO="$($elasticsearch_exporter_PATH --version 2>&1 | awk '/elasticsearch_exporter/ {print $3}')"
        $GREEN
        printf "Active Node 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 elasticsearch_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 elasticsearch_exporter files... \n\n"
            # Remove elasticsearch_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/elasticsearch_exporter*
            $YELLOW
            printf "Related files removed.\n\n"
            $NORMAL
            printf "Installation will continue...\n\n"
        elif [ "$ACTION" -eq 1 ]; then
            printf "Removing all elasticsearch_exporter files... \n\n"
            # Remove elasticsearch_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/elasticsearch_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/elasticsearch_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.3.0 ] : "
$BOLD
$BLUE
read VERSION
$NORMAL
VERSION=${VERSION:-1.3.0}
$DOWN
$NORMAL
# Download the file
wget https://github.com/prometheus-community/elasticsearch_exporter/releases/download/v$VERSION/elasticsearch_exporter-$VERSION.linux-amd64.tar.gz -O /usr/local/elasticsearch_exporter.tgz
# Extract the downloaded tarball in user directory with a new name
tar -xzvf /usr/local/elasticsearch_exporter.tgz -C /usr/local && mv /usr/local/elasticsearch_exporter-$VERSION.linux-amd64 /usr/local/elasticsearch_exporter

# Create a systemd service file for Node Exporter
cat >/usr/lib/systemd/system/elasticsearch_exporter.service<<EOF
[Unit]
Description= Elasticsearch Exporter
Documentation= https://prometheus.io/
After=network.target

[Service]
Type=simple
PIDFile=/usr/local/elasticsearch_exporter/elasticsearch_exporter.pid
ExecStart=/usr/local/elasticsearch_exporter/elasticsearch_exporter --es.all --es.clusterinfo.interval=15m --es.uri=http://elastic:xxpasswordxx@xxipxx:9200 --es.timeout 30s
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

# IP
ip=$(hostname -I |awk '{print $1}')
$DOWN
$YELLOW 
# Password
echo -n "Please insert the password of your elastic : "
$NORMAL
$DOWN
read password
$DOWN

# Edit the service file in-place
sed -i "s#xxpasswordxx#$password#g" /usr/lib/systemd/system/elasticsearch.service
sed -i "s#xxipxx#$ip#g" /usr/lib/systemd/system/elasticsearch.service

# Reload systemd and start Elasticsearch Exporter
sudo systemctl daemon-reload
sudo systemctl start elasticsearch_exporter.service
sudo systemctl status elasticsearch_exporter.service

# Cleanup downloaded file
rm -f /usr/local/$SERVICE_NAME.tgz

$DOWN
if sudo systemctl is-active --quiet "$SERVICE_NAME"; then
    $DOWN
    $BOLD
    $YELLOW
    printf "======================================\n"
    $GREEN
    printf "Elasticsearch Exporter installed successfully!\n"
    $NORMAL
    $BOLD
    printf "Version: $VERSION\n"
    $YELLOW
    printf "======================================\n"
    $NORMAL
    $DOWN
else
    $DOWN
    $RED
    printf "Elasticsearch Exporter installation failed.\n\n"
    $NORMAL
    $DOWN
fi

Enter fullscreen mode Exit fullscreen mode

Top comments (0)