#!/bin/bash
INSTALL_DIR="$HOME/JotunMonitoring"
PROMETHEUS_VERSION="3.0.1"
SNMP_EXPORTER_VERSION="0.26.0"
ARCH="linux-arm64" # Adjust if running on another architecture
echo "๐ Starting installation of Esports Monitoring System..."
# Update system packages
echo "๐ฆ Updating package lists..."
sudo apt update && sudo apt upgrade -y
# Install required packages
echo "๐ฅ Installing dependencies..."
sudo apt-get install -y apt-transport-https software-properties-common wget python3 python3-venv python3-pip tar arp-scan
# โ
Install Grafana from the official APT repository
echo "๐ Installing Grafana..."
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install -y grafana
# Enable and start Grafana service
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
echo "โ
Grafana installed and running!"
# Create necessary directories inside JotunMonitoring
mkdir -p "$INSTALL_DIR/prometheus" "$INSTALL_DIR/snmp_exporter" "$INSTALL_DIR/PcMonitor"
# Download and install Prometheus (if not already installed)
cd "$INSTALL_DIR/prometheus"
if [ ! -f "prometheus-${PROMETHEUS_VERSION}.${ARCH}.tar.gz" ]; then
echo "๐ฅ Downloading Prometheus v$PROMETHEUS_VERSION..."
wget https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.${ARCH}.tar.gz
tar -xzf prometheus-${PROMETHEUS_VERSION}.${ARCH}.tar.gz --strip-components=1
chmod +x prometheus promtool
echo "โ
Prometheus installed successfully!"
else
echo "โก Prometheus v$PROMETHEUS_VERSION already exists."
fi
# Download and install SNMP Exporter (if not already installed)
cd "$INSTALL_DIR/snmp_exporter"
if [ ! -f "snmp_exporter-${SNMP_EXPORTER_VERSION}.${ARCH}.tar.gz" ]; then
echo "๐ฅ Downloading SNMP Exporter v$SNMP_EXPORTER_VERSION..."
wget https://github.com/prometheus/snmp_exporter/releases/download/v${SNMP_EXPORTER_VERSION}/snmp_exporter-${SNMP_EXPORTER_VERSION}.${ARCH}.tar.gz
tar -xzf snmp_exporter-${SNMP_EXPORTER_VERSION}.${ARCH}.tar.gz --strip-components=1
chmod +x snmp_exporter
echo "โ
SNMP Exporter installed successfully!"
else
echo "โก SNMP Exporter v$SNMP_EXPORTER_VERSION already exists."
fi
# โ
Setting up Python environment for PcMonitor in the same folder
echo "๐ Setting up Python environment..."
cd "$INSTALL_DIR/PcMonitor"
python3 -m venv venv
source venv/bin/activate
pip install prometheus_client ping3 scapy
# Create requirements.txt if it doesn't exist
if [ ! -f "requirements.txt" ]; then
echo "prometheus_client" > requirements.txt
echo "ping3" >> requirements.txt
echo "scapy" >> requirements.txt
fi
pip install -r requirements.txt || echo "โ ๏ธ Some Python dependencies failed to install!"
deactivate
# โ
Copy Prometheus configuration
echo "โ๏ธ Configuring Prometheus..."
if [ ! -f "$INSTALL_DIR/prometheus/prometheus.yml" ]; then
cp "$INSTALL_DIR/prometheus/prometheus.yml" "$INSTALL_DIR/prometheus/"
fi
# โ
Copy SNMP Exporter configuration
echo "๐ก Configuring SNMP Exporter..."
if [ ! -f "$INSTALL_DIR/snmp_exporter/snmp.yml" ]; then
cp "$INSTALL_DIR/snmp_exporter/snmp.yml" "$INSTALL_DIR/snmp_exporter/"
fi
# โ
Create systemd services for Prometheus and SNMP Exporter
echo "๐ Setting up Prometheus and SNMP Exporter as systemd services..."
# Prometheus Service
PROMETHEUS_SERVICE="/etc/systemd/system/prometheus.service"
echo "[Unit]
Description=Prometheus Service
After=network.target
[Service]
ExecStart=$INSTALL_DIR/prometheus/prometheus --config.file=$INSTALL_DIR/prometheus/prometheus.yml --storage.tsdb.path=$INSTALL_DIR/prometheus/data
WorkingDirectory=$INSTALL_DIR/prometheus
Restart=always
User=$USER
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target" | sudo tee $PROMETHEUS_SERVICE
# SNMP Exporter Service
SNMP_EXPORTER_SERVICE="/etc/systemd/system/snmp_exporter.service"
echo "[Unit]
Description=SNMP Exporter Service
After=network.target
[Service]
ExecStart=$INSTALL_DIR/snmp_exporter/snmp_exporter --config.file=$INSTALL_DIR/snmp_exporter/snmp.yml
WorkingDirectory=$INSTALL_DIR/snmp_exporter
Restart=always
User=$USER
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target" | sudo tee $SNMP_EXPORTER_SERVICE
# โ
Create systemd service file for PcMonitor
PC_MONITOR_SERVICE="/etc/systemd/system/pc_monitor.service"
echo "๐ง Creating pc_monitor.service..."
echo "[Unit]
Description=PcMonitor Service
After=network.target
[Service]
ExecStart=$INSTALL_DIR/PcMonitor/venv/bin/python3 $INSTALL_DIR/PcMonitor/PcMonitorV2.py
WorkingDirectory=$INSTALL_DIR/PcMonitor
Restart=always
User=root
# Add a reasonable restart delay to prevent rapid restart loops
RestartSec=10
# Add environment variables
Environment=\"PATH=$INSTALL_DIR/PcMonitor/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"
# Capture stdout and stderr to system journal
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target" | sudo tee $PC_MONITOR_SERVICE
echo "๐ง Configuring PcMonitor as a systemd service..."
sudo systemctl daemon-reload
sudo systemctl enable pc_monitor
# โ
Enable services on boot
echo "โณ Enabling services on boot..."
sudo systemctl enable prometheus
sudo systemctl enable snmp_exporter
sudo systemctl enable pc_monitor
sudo systemctl enable grafana-server
# โ
Restart services to apply changes
echo "๐ Restarting services..."
sudo systemctl restart prometheus
sudo systemctl restart snmp_exporter
sudo systemctl restart pc_monitor
sudo systemctl restart grafana-server
echo "โ
Installation completed successfully! ๐"
echo "๐ฅ๏ธ Access Grafana at: http://<raspberrypi-ip>:3000"
echo "๐ Access Prometheus at: http://<raspberrypi-ip>:9090"
echo "๐ Monitoring metrics: http://<raspberrypi-ip>:8003/metrics"
echo "๐ก Access SNMP Exporter: http://<raspberrypi-ip>:9116/snmp?target=<fortigate-switch-ip>"