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

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay