Skip to content

Instantly share code, notes, and snippets.

@nickpoulos
Last active September 30, 2021 03:21
Show Gist options
  • Save nickpoulos/4d021b18a514b8c20cee5d9b1d693273 to your computer and use it in GitHub Desktop.
Save nickpoulos/4d021b18a514b8c20cee5d9b1d693273 to your computer and use it in GitHub Desktop.
[Install Prometheus Ubuntu] Install Prometheus on a Clean Ubuntu Box #ubuntu #prometheus #bash
#!/bin/bash
# Install Prometheus
#
# Fail fast (set -e will bail at first error)
set -e
if [ "$EUID" -ne 0 ]; then
echo "ERROR: '$0' must be as root."
exit 1
fi
#--------------------------------------------------------------------------------------------------------------
# NGINX
#--------------------------------------------------------------------------------------------------------------
# Install Nginx
sudo apt-get update && apt-get install -y nginx jq
# Adjust Firewall Allow Settings And Enable
sudo ufw allow 'OpenSSH'
sudo ufw allow 'Nginx Full'
sudo ufw enable
#--------------------------------------------------------------------------------------------------------------
# PROMETHEUS
#--------------------------------------------------------------------------------------------------------------
# Setup Prometheus Environment Variables
export PROMETHEUS_VERSION=$(curl --silent "https://api.github.com/repos/prometheus/prometheus/releases/latest" | jq -r .tag_name | sed 's/v//')
export PROMETHEUS_RELEASE="prometheus-${PROMETHEUS_VERSION}.linux-amd64"
export PROMETHEUS_FILENAME="${PROMETHEUS_RELEASE}.tar.gz"
# Create Prometheus Users
sudo useradd --no-create-home --shell /bin/false prometheus
sudo useradd --no-create-home --shell /bin/false node_exporter
# Create Prometheus Folders
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
# Add Prometheus Folders Owners To New Users
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
# Download Latest Prometheus
cd ~
curl -LO https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/${PROMETHEUS_FILENAME}
tar xvf ${PROMETHEUS_FILENAME}
# Copy Files And Adjust Permissions/Ownership
sudo cp ${PROMETHEUS_RELEASE}/prometheus /usr/local/bin/
sudo cp ${PROMETHEUS_RELEASE}/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
sudo cp -r ${PROMETHEUS_RELEASE}/consoles /etc/prometheus
sudo cp -r ${PROMETHEUS_RELEASE}/console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
# Cleanup
rm -rf ${PROMETHEUS_FILENAME} ${PROMETHEUS_RELEASE}
# Configure Default Local Exporter
echo "global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9100']" > /etc/prometheus/prometheus.yml
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml
# Setup Service
echo "[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/prometheus.service
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
#--------------------------------------------------------------------------------------------------------------
# NODE EXPORTER
#--------------------------------------------------------------------------------------------------------------
# Setup Prometheus Node Exporter Environment Variables
export PROMETHEUS_NODE_EXPORTER_VERSION=$(curl --silent "https://api.github.com/repos/prometheus/node_exporter/releases/latest" | jq -r .tag_name | sed 's/v//')
export PROMETHEUS_NODE_EXPORTER_RELEASE="node_exporter-${PROMETHEUS_NODE_EXPORTER_VERSION}.linux-amd64"
export PROMETHEUS_NODE_EXPORTER_FILENAME="${PROMETHEUS_NODE_EXPORTER_RELEASE}.tar.gz"
# Download Latest Prometheus Node Exporter
cd ~
curl -LO https://github.com/prometheus/node_exporter/releases/download/v${PROMETHEUS_NODE_EXPORTER_VERSION}/${PROMETHEUS_NODE_EXPORTER_FILENAME}
tar xvf ${PROMETHEUS_NODE_EXPORTER_FILENAME}
# Copy Files And Adjust Permissions/Ownership
sudo cp ${PROMETHEUS_NODE_EXPORTER_RELEASE}/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
# Cleanup
rm -rf ${PROMETHEUS_NODE_EXPORTER_FILENAME} ${PROMETHEUS_NODE_EXPORTER_RELEASE}
# Configuration
echo "[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/node_exporter.service
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
#
#--------------------------------------------------
# NGINX + PASSWORDS
#--------------------------------------------------
sudo apt-get update
sudo apt-get install apache2-utils
sudo htpasswd -b -c /etc/nginx/.htpasswd admin pr0m3th3u5pa55w0rd
echo "server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
auth_basic \"Prometheus server authentication\";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:9090;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}" > /etc/nginx/sites-available/prometheus
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/prometheus /etc/nginx/sites-enabled/
sudo systemctl nginx start
sudo systemctl nginx enable
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment