Last active
September 30, 2021 03:21
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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