Prometheus Monitoring

Prometheus is a time-series metrics database and monitoring system built for cloud-native and microservices environments. It collects metrics by scraping HTTP endpoints (pull model), stores them with labels for multi-dimensional querying, and evaluates alert rules. Paired with Grafana for visualization and Alertmanager for routing alerts, it is the standard monitoring stack for production infrastructure.

Prometheus architecture

Prometheus pull model:
  Prometheus server (every 15 seconds):
    Scrapes: http://server1:9100/metrics  ← Node Exporter
    Scrapes: http://server2:9100/metrics  ← Node Exporter
    Scrapes: http://appserver:8080/metrics ← App metrics endpoint
         ↓
    Stores time-series in TSDB (local)
    Evaluates alert rules
         ↓                     ↓
  Grafana (dashboards)    Alertmanager (routes alerts to Slack/PagerDuty)

Installing Prometheus

# Download Prometheus from GitHub releases:
PROM_VERSION="2.52.0"
wget https://github.com/prometheus/prometheus/releases/download/v${PROM_VERSION}/prometheus-${PROM_VERSION}.linux-amd64.tar.gz
tar xvf prometheus-${PROM_VERSION}.linux-amd64.tar.gz
sudo mv prometheus-${PROM_VERSION}.linux-amd64/prometheus /usr/local/bin/
sudo mv prometheus-${PROM_VERSION}.linux-amd64/promtool /usr/local/bin/

# Create prometheus user and directories:
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus

# Create systemd service:
sudo nano /etc/systemd/system/prometheus.service

/etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus
After=network.target

[Service]
User=prometheus
ExecStart=/usr/local/bin/prometheus   --config.file /etc/prometheus/prometheus.yml   --storage.tsdb.path /var/lib/prometheus   --storage.tsdb.retention.time=30d
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
# Access at http://localhost:9090

Node Exporter for server metrics

# Node Exporter exposes Linux server metrics to Prometheus
# Install on each server to monitor:
NODE_VERSION="1.8.1"
wget https://github.com/prometheus/node_exporter/releases/download/v${NODE_VERSION}/node_exporter-${NODE_VERSION}.linux-amd64.tar.gz
tar xvf node_exporter-${NODE_VERSION}.linux-amd64.tar.gz
sudo mv node_exporter-${NODE_VERSION}.linux-amd64/node_exporter /usr/local/bin/

sudo useradd --no-create-home --shell /bin/false node_exporter
sudo systemctl enable --now node_exporter
# Metrics available at http://localhost:9100/metrics

# Add to prometheus.yml:
# scrape_configs:
#   - job_name: 'linux-servers'
#     static_configs:
#       - targets: ['server1:9100', 'server2:9100']

Alerting rules

# Create alert rules in /etc/prometheus/alerts.yml:
sudo nano /etc/prometheus/alerts.yml

/etc/prometheus/alerts.yml — common server alerts

groups:
- name: server-alerts
  rules:
  - alert: HighCPUUsage
    expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "CPU > 80% on {{ $labels.instance }}"

  - alert: DiskSpaceLow
    expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 < 15
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "Disk < 15% free on {{ $labels.instance }}"

  - alert: MemoryPressure
    expr: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 < 10
    for: 2m
    labels:
      severity: critical

Conclusion

Prometheus is the right choice when you need programmatic alerting on any metric combination (not just preset checks), long-term metric storage for capacity planning, and integration with a wide ecosystem of exporters (MySQL, Redis, Docker, Kubernetes). The learning curve is the PromQL query language — start with the alert rules above and the community-contributed Grafana dashboards (grafana.com/grafana/dashboards) to get value quickly before writing custom queries.

Need help with Ubuntu administration?

Work directly with Muhammad Irfan Aslam for Ubuntu Server, Linux, cloud, Docker, DevOps, CI/CD, or infrastructure troubleshooting support.

Work with Muhammad Irfan Aslam