218 lines
6.4 KiB
Bash
218 lines
6.4 KiB
Bash
#!/bin/bash
|
|
|
|
# Default versions
|
|
DEFAULT_PROMETHEUS_VERSION="3.1.0"
|
|
DEFAULT_NODE_EXPORTER_VERSION="1.8.2"
|
|
|
|
# Function to display menu and get user choices
|
|
function show_menu() {
|
|
echo "Please select the software you would like to install (multiple selections allowed):"
|
|
echo "1. Prometheus"
|
|
echo "2. Node Exporter"
|
|
echo "3. Grafana"
|
|
echo "4. Exit"
|
|
read -p "Enter your choice(s) as a comma-separated list (e.g., 1,2,3) [default: 4]: " choice
|
|
}
|
|
|
|
# Function to display progress bar
|
|
function show_progress {
|
|
local total=$1
|
|
local current=$2
|
|
local percent=$((current * 100 / total))
|
|
printf "\r[%-70s] %d%%" "$(printf '#%.0s' $(seq 1 $percent))" "$percent"
|
|
}
|
|
|
|
# Function to download and install Prometheus
|
|
function install_prometheus() {
|
|
read -p "Enter the desired Prometheus version (e.g., v2.41.0) [default: $DEFAULT_PROMETHEUS_VERSION]: " PROMETHEUS_VERSION
|
|
PROMETHEUS_VERSION=${PROMETHEUS_VERSION:-$DEFAULT_PROMETHEUS_VERSION}
|
|
|
|
echo "Chosen Prometheus version: $PROMETHEUS_VERSION"
|
|
DOWNLOAD_DIR="/tmp/prometheus-install"
|
|
PROMETHEUS_USER="prometheus"
|
|
PROMETHEUS_GROUP="prometheus"
|
|
PROMETHEUS_DIR="/usr/local/bin/prometheus"
|
|
CONFIG_DIR="/etc/prometheus"
|
|
DATA_DIR="/var/lib/prometheus"
|
|
|
|
echo "Creating download directory..."
|
|
mkdir -p $DOWNLOAD_DIR
|
|
|
|
echo "Downloading Prometheus binary..."
|
|
cd $DOWNLOAD_DIR
|
|
wget https://github.com/prometheus/prometheus/releases/download/v$PROMETHEUS_VERSION/prometheus-$PROMETHEUS_VERSION.linux-amd64.tar.gz
|
|
|
|
echo "Extracting Prometheus binary..."
|
|
tar xvfz prometheus-$PROMETHEUS_VERSION.linux-amd64.tar.gz
|
|
|
|
echo "Copying Prometheus binary to $PROMETHEUS_DIR..."
|
|
cp prometheus-$PROMETHEUS_VERSION.linux-amd64/prometheus $PROMETHEUS_DIR
|
|
echo "Copying promtool to /usr/local/bin..."
|
|
cp prometheus-$PROMETHEUS_VERSION.linux-amd64/promtool /usr/local/bin/
|
|
|
|
echo "Creating necessary directories for Prometheus data and config..."
|
|
mkdir -p $CONFIG_DIR $DATA_DIR
|
|
|
|
echo "Creating Prometheus configuration file in $CONFIG_DIR..."
|
|
cat <<EOF > $CONFIG_DIR/prometheus.yml
|
|
global:
|
|
scrape_interval: 15s
|
|
|
|
scrape_configs:
|
|
- job_name: 'prometheus'
|
|
static_configs:
|
|
- targets: ['localhost:9090']
|
|
|
|
- job_name: 'node_exporter'
|
|
static_configs:
|
|
- targets: ['localhost:9100']
|
|
EOF
|
|
|
|
echo "Creating $PROMETHEUS_USER user and group..."
|
|
groupadd --system $PROMETHEUS_GROUP
|
|
useradd -s /sbin/nologin --system -g $PROMETHEUS_GROUP $PROMETHEUS_USER
|
|
|
|
echo "Setting ownership of directories and files..."
|
|
chown -R $PROMETHEUS_USER:$PROMETHEUS_GROUP $CONFIG_DIR $DATA_DIR
|
|
chown -R $PROMETHEUS_USER:$PROMETHEUS_GROUP /usr/local/bin/prometheus
|
|
chown -R $PROMETHEUS_USER:$PROMETHEUS_GROUP /usr/local/bin/node_exporter
|
|
|
|
echo "Creating systemd service for Prometheus..."
|
|
cat <<EOF > /etc/systemd/system/prometheus.service
|
|
[Unit]
|
|
Description=Prometheus Time Series Database
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
|
|
[Service]
|
|
User=$PROMETHEUS_USER
|
|
Group=$PROMETHEUS_GROUP
|
|
Type=simple
|
|
ExecStart=/usr/local/bin/prometheus \
|
|
--config.file=$CONFIG_DIR/prometheus.yml \
|
|
--storage.tsdb.path=$DATA_DIR
|
|
|
|
Restart=always
|
|
[Install]
|
|
WantedBy=default.target
|
|
EOF
|
|
|
|
echo "Reloading systemd daemon..."
|
|
systemctl daemon-reload
|
|
echo "Enabling Prometheus service..."
|
|
systemctl enable prometheus.service
|
|
echo "Starting Prometheus service..."
|
|
systemctl start prometheus.service
|
|
echo "Checking status of Prometheus service..."
|
|
systemctl status prometheus.service
|
|
}
|
|
|
|
# Function to download and install Node Exporter
|
|
function install_node_exporter() {
|
|
read -p "Enter the desired Node Exporter version (e.g., v1.6.0) [default: $DEFAULT_NODE_EXPORTER_VERSION]: " NODE_EXPORTER_VERSION
|
|
NODE_EXPORTER_VERSION=${NODE_EXPORTER_VERSION:-$DEFAULT_NODE_EXPORTER_VERSION}
|
|
|
|
echo "Chosen Node Exporter version: $NODE_EXPORTER_VERSION"
|
|
DOWNLOAD_DIR="/tmp/node-exporter-install"
|
|
PROMETHEUS_USER="prometheus"
|
|
PROMETHEUS_GROUP="prometheus"
|
|
BINARY_DIR="/usr/local/bin"
|
|
|
|
echo "Creating download directory..."
|
|
mkdir -p $DOWNLOAD_DIR
|
|
|
|
echo "Downloading Node Exporter binary..."
|
|
cd $DOWNLOAD_DIR
|
|
wget https://github.com/prometheus/node_exporter/releases/download/v$NODE_EXPORTER_VERSION/node_exporter-$NODE_EXPORTER_VERSION.linux-amd64.tar.gz
|
|
|
|
echo "Extracting Node Exporter binary..."
|
|
tar xvfz node_exporter-$NODE_EXPORTER_VERSION.linux-amd64.tar.gz
|
|
|
|
echo "Copying Node Exporter binary to $BINARY_DIR..."
|
|
cp node_exporter-$NODE_EXPORTER_VERSION.linux-amd64/node_exporter $BINARY_DIR
|
|
|
|
echo "Creating systemd service for Node Exporter..."
|
|
cat <<EOF > /etc/systemd/system/node_exporter.service
|
|
[Unit]
|
|
Description=Node Exporter
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
|
|
[Service]
|
|
User=$PROMETHEUS_USER
|
|
Group=$PROMETHEUS_GROUP
|
|
Type=simple
|
|
ExecStart=/usr/local/bin/node_exporter
|
|
|
|
Restart=always
|
|
[Install]
|
|
WantedBy=default.target
|
|
EOF
|
|
|
|
echo "Reloading systemd daemon..."
|
|
systemctl daemon-reload
|
|
echo "Enabling Node Exporter service..."
|
|
systemctl enable node_exporter.service
|
|
echo "Starting Node Exporter service..."
|
|
systemctl start node_exporter.service
|
|
echo "Checking status of Node Exporter service..."
|
|
systemctl status node_exporter.service
|
|
}
|
|
|
|
# Function to install Grafana
|
|
function install_grafana() {
|
|
echo "Installing Grafana using the official PPA..."
|
|
|
|
echo "Importing Grafana repository keyring..."
|
|
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
|
|
|
|
echo "Adding Grafana repository..."
|
|
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
|
|
|
|
echo "Updating package list..."
|
|
sudo apt-get update
|
|
|
|
echo "Installing Grafana..."
|
|
sudo apt-get install -y grafana
|
|
|
|
echo "Enabling Grafana service..."
|
|
sudo systemctl enable grafana-server
|
|
echo "Starting Grafana service..."
|
|
sudo systemctl start grafana-server
|
|
echo "Checking status of Grafana service..."
|
|
sudo systemctl status grafana-server
|
|
}
|
|
|
|
# Main script execution
|
|
show_menu
|
|
|
|
# Convert the input choice to an array
|
|
IFS=',' read -r -a choices <<< "$choice"
|
|
|
|
# Execute selected installations with progress bar
|
|
for i in "${!choices[@]}"; do
|
|
case ${choices[$i]} in
|
|
1)
|
|
echo "Installing Prometheus..."
|
|
install_prometheus
|
|
;;
|
|
2)
|
|
echo "Installing Node Exporter..."
|
|
install_node_exporter
|
|
;;
|
|
3)
|
|
echo "Installing Grafana..."
|
|
install_grafana
|
|
;;
|
|
4)
|
|
echo "Exiting..."
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Invalid choice: ${choices[$i]}. Skipping."
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo "Installation completed successfully!"
|