How to Setup Prometheus

Introduction Prometheus is a powerful, open-source monitoring and alerting toolkit widely used in modern cloud-native environments. Designed for reliability and scalability, Prometheus helps developers and IT professionals collect, store, and analyze metrics from various systems and applications. Setting up Prometheus correctly is crucial for gaining real-time insights into system performance, tro

Nov 17, 2025 - 10:43
Nov 17, 2025 - 10:43
 0

Introduction

Prometheus is a powerful, open-source monitoring and alerting toolkit widely used in modern cloud-native environments. Designed for reliability and scalability, Prometheus helps developers and IT professionals collect, store, and analyze metrics from various systems and applications. Setting up Prometheus correctly is crucial for gaining real-time insights into system performance, troubleshooting issues, and maintaining high availability.

This comprehensive tutorial will guide you through the process of setting up Prometheus from scratch. Whether you are a developer, system administrator, or DevOps engineer, this step-by-step guide will equip you with the knowledge and best practices necessary to implement Prometheus effectively.

Step-by-Step Guide

1. Understanding Prometheus Architecture

Before diving into installation, it’s important to understand Prometheus' core components:

  • Prometheus Server: Scrapes and stores time-series data.
  • Exporters: Components that expose metrics from third-party systems.
  • Alertmanager: Handles alert notifications based on Prometheus rules.
  • Pushgateway: Supports short-lived jobs pushing metrics.

2. Prerequisites

Ensure you have the following before installation:

  • A Linux-based server or local machine (Ubuntu, CentOS, Debian, etc.)
  • Root or sudo privileges
  • Basic knowledge of command-line interface (CLI)
  • Network access to systems you want to monitor

3. Installing Prometheus

Follow these steps to install Prometheus on a Linux system:

a. Download Prometheus

Visit the official Prometheus download page and download the latest stable release for your OS.

wget https://github.com/prometheus/prometheus/releases/download/v2.44.0/prometheus-2.44.0.linux-amd64.tar.gz

b. Extract the Archive

tar xvfz prometheus-2.44.0.linux-amd64.tar.gz

cd prometheus-2.44.0.linux-amd64

c. Move Binaries to System Path

sudo mv prometheus /usr/local/bin/

sudo mv promtool /usr/local/bin/

d. Configure Prometheus

The main configuration file is prometheus.yml. By default, it includes a simple scrape configuration:

global:

scrape_interval: 15s

scrape_configs:

- job_name: 'prometheus'

static_configs:

- targets: ['localhost:9090']

This configuration instructs Prometheus to scrape metrics from itself every 15 seconds.

4. Running Prometheus

Start Prometheus with the following command:

prometheus --config.file=prometheus.yml

Prometheus will now run and bind to http://localhost:9090 by default. You can access the web UI to verify it’s working.

5. Adding Targets and Exporters

To monitor other services, you need to add targets and exporters that expose metrics Prometheus can scrape.

a. Node Exporter Installation

Node Exporter collects hardware and OS metrics. Install it as follows:

wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz

tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz

cd node_exporter-1.6.1.linux-amd64

./node_exporter

Node Exporter listens on port 9100 by default.

b. Add Node Exporter to Prometheus Targets

Edit prometheus.yml to include the node exporter target:

scrape_configs:

- job_name: 'node_exporter'

static_configs:

- targets: ['localhost:9100']

Restart Prometheus to apply changes.

6. Setting up Alertmanager

Alertmanager manages alerts generated by Prometheus. To install and configure it:

a. Download and Extract Alertmanager

wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz

tar xvfz alertmanager-0.25.0.linux-amd64.tar.gz

cd alertmanager-0.25.0.linux-amd64

b. Create Alertmanager Configuration

Create alertmanager.yml with basic alerting routes and receivers:

global:

resolve_timeout: 5m

route:

receiver: 'team-email'

receivers:

- name: 'team-email'

email_configs:

- to: 'your-email@example.com'

c. Run Alertmanager

./alertmanager --config.file=alertmanager.yml

d. Connect Prometheus to Alertmanager

Add Alertmanager configuration to prometheus.yml:

alerting:

alertmanagers:

- static_configs:

- targets:

- 'localhost:9093'

Restart Prometheus to enable alert forwarding.

7. Creating Alerts

Define alert rules in a separate YAML file (e.g., alert.rules.yml):

groups:

- name: example

rules:

- alert: InstanceDown

expr: up == 0

for: 5m

labels:

severity: critical

annotations:

summary: "Instance {{ $labels.instance }} down"

description: "{{ $labels.instance }} has been unreachable for more than 5 minutes."

Reference this file in prometheus.yml:

rule_files:

- "alert.rules.yml"

Reload or restart Prometheus to apply alert rules.

Best Practices

1. Use Consistent Naming Conventions

Adopt clear and consistent naming for jobs, metrics, and labels to simplify querying and alerting.

2. Keep Configuration Modular

Split your Prometheus configuration into multiple files for rules, scrape configs, and alerts to improve maintainability.

3. Secure Prometheus Endpoints

Use firewalls, TLS encryption, and authentication proxies to restrict access to Prometheus and exporters.

4. Monitor Prometheus Itself

Set up monitoring on Prometheus server health and resource usage to prevent data loss or downtime.

5. Regularly Update Prometheus and Exporters

Keep Prometheus and exporters updated to leverage new features, security patches, and bug fixes.

6. Optimize Scrape Intervals

Balance scrape frequency with system load. Critical metrics may require shorter intervals, while others can be less frequent.

7. Use Labels Wisely

Labels add dimensionality but can increase storage and query complexity. Avoid high-cardinality labels when possible.

Tools and Resources

Official Prometheus Documentation

The official docs provide extensive information on configuration, query language, and best practices.

Prometheus Exporters

Prometheus Query Language (PromQL) Tutorials

Learning PromQL is essential for leveraging Prometheus effectively. Several online tutorials and cheat sheets are available:

Visualization Tools

  • Grafana: A popular open-source platform to visualize Prometheus metrics.
  • Prometheus Console Templates: Built-in visualization for quick metric inspection.

Real Examples

Example 1: Monitoring a Web Server

To monitor an Nginx web server, install the Nginx exporter:

wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.11.0/nginx-prometheus-exporter-0.11.0-linux-amd64.tar.gz

tar xvfz nginx-prometheus-exporter-0.11.0-linux-amd64.tar.gz

./nginx-prometheus-exporter -nginx.scrape-uri http://localhost/status

Add the exporter to Prometheus targets:

scrape_configs:

- job_name: 'nginx'

static_configs:

- targets: ['localhost:9113']

Example 2: Alerting on High CPU Usage

Create an alert rule to notify when CPU usage exceeds 80% for 5 minutes:

groups:

- name: cpu_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: "High CPU usage detected on {{ $labels.instance }}"

description: "CPU usage is above 80% for more than 5 minutes."

Example 3: Integrating with Grafana

Once Prometheus is set up and collecting metrics, add it as a data source in Grafana and create dashboards for real-time visualization. Use PromQL queries to build panels showing system health, traffic, and latency metrics.

FAQs

What is Prometheus primarily used for?

Prometheus is used for monitoring and alerting, collecting time-series metrics from applications and infrastructure to provide real-time insights into system performance.

Can Prometheus monitor Windows servers?

Yes, but you need to deploy Windows exporters like wmi_exporter that expose Windows metrics to Prometheus.

Is Prometheus suitable for large-scale environments?

Yes, Prometheus scales well for many use cases. For very large environments, it may require federation or remote storage solutions.

How does Prometheus differ from other monitoring tools?

Prometheus uses a pull model for metrics collection, supports a powerful query language (PromQL), and focuses on time-series data, making it ideal for dynamic, cloud-native environments.

Do I need to configure storage for Prometheus?

Prometheus has built-in local storage optimized for time-series data. For long-term storage or high availability, consider integrating remote storage backends.

Conclusion

Setting up Prometheus involves understanding its architecture, installing the server and exporters, configuring scrape targets, and setting up alerting mechanisms. With its robust ecosystem and powerful querying capabilities, Prometheus is an essential tool for monitoring modern infrastructure.

By following this detailed tutorial and adhering to best practices, you can deploy Prometheus effectively to gain valuable insights into your systems, improve reliability, and respond proactively to issues. Coupled with visualization tools like Grafana, Prometheus offers a complete monitoring solution for developers and operations teams alike.