Prometheus is an open source monitoring, querying and alerting tool. Originally built by Soundcloud in 2012, the feature-rich tool has been adopted by several companies to monitor their IT infrastructure and ensure all systems are running smoothly. Prometheus allows you to query and pull time-series metrics such as CPU & memory utilization over HTTP protocol and visualize them on real-time graphs. You can also configure Prometheus to push alerts in the event of a node or service downtime and integrate it with other third-party monitoring tools such as Grafana for enhanced data visualization. In this guide, we will look at the installation of Prometheus on the CentOS 8 /RHEL 8 system.

Step:1) Creating a Prometheus user and group

To start off, we are going to create a system user for Prometheus. Execute the command below to achieve this.

[[email protected] ~]# useradd -m -s /bin/false prometheus
[[email protected] ~]# id prometheus
uid=1002(prometheus) gid=1002(prometheus) groups=1002(prometheus)
[[email protected] ~]#

As you may have noted, the system user has no login permissions as specified in the /bin/false option

Step 2) Creating configuration directories for Prometheus

Once the user for Prometheus has been created, we are then going to create configuration directories in the /etc and /var directories which will store Prometheus configuration files and data. So run the commands below:

[[email protected] ~]# mkdir /etc/prometheus
[[email protected] ~]# mkdir /var/lib/prometheus

Set the ownership on /var/lib/prometheus

[[email protected] ~]# chown prometheus /var/lib/prometheus/

Step 3) Downloading Prometheus tar file

With the directories in place, we can now download the Prometheus. To get the latest version, head out to the Download page to obtain the latest version for your environment. At the time of penning down this article, the latest version was v 2.14.0. Alternatively, just run the command below

[[email protected] ~]# dnf install wget -y
[[email protected] ~]# wget -P /tmp

Once the download is complete, extract the tarball file as shown

[[email protected] tmp]# tar -zxpvf prometheus-2.14.0.linux-amd64.tar.gz

This will leave you with a directory called prometheus-2.14.0.linux-amd64

Use tree command to view directory structure,


The extracted directory contains 2 binary files  prometheus & promtool and that we need to copy to the /usr/local/bin path.

So, navigate to the extracted directory and copy them using the command:

[[email protected] ~]# cd /tmp/prometheus-2.14.0.linux-amd64
[[email protected] prometheus-2.14.0.linux-amd64]# cp prometheus  /usr/local/bin

Do likewise to the other binary file

[[email protected] prometheus-2.14.0.linux-amd64]# cp promtool  /usr/local/bin

Step 4) Creating a configuration file for Prometheus

To start off with the configuration, create a file /etc/prometheus/prometheus.yml and paste the configuration in the file

[[email protected] ~]# vi /etc/prometheus/prometheus.yml
# Global config
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. 
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. 
  scrape_timeout: 15s  # scrape_timeout is set to the global default (10s).
# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    - targets: ['localhost:9090']

This will only monitor your local system only ( Prometheus Server).

Next, adjust the firewall as follows to allow external connections to the server via port 9090

[[email protected] ~]# firewall-cmd --add-port=9090/tcp --permanent
[[email protected] ~]# firewall-cmd --reload
[[email protected] ~]#

Step 5) Creating a Systemd service file for Prometheus Server

For us to manage Prometheus as a service using systemd, we need to create a system file for it. So, create the file as shown and paste the content,

[[email protected] ~]# vi /etc/systemd/system/prometheus.service
Description=Prometheus Time Series Collection and Processing Server

ExecStart=/usr/local/bin/prometheus \
    --config.file /etc/prometheus/prometheus.yml \
    --storage.tsdb.path /var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \


For the changes to take effect, reload the systemctl,

[[email protected] ~]# systemctl daemon-reload

Now start and enable Prometheus to run on boot

[[email protected] ~]# systemctl start prometheus
[[email protected] ~]# systemctl enable prometheus

Just to be certain that Prometheus is running, run the command:

[[email protected] ~]# systemctl status prometheus


From the output displayed, we can clearly see that Prometheus is running as expected with no errors. Also, you can use the netstat utility to check is the service is listening on port 9090.

[[email protected] ~]# netstat -tunlp


That’s great! Prometheus is running on port 9090 as expected. Now head to your browser as browse your server’s IP as shown



Click on the ‘Status’ tab and then click on ‘Targets


Your system will be displayed as shown


Step 5) Install & configure node_exporter

Node exporter is a utility that collects and ships a vast array of Linux system metrics such as CPU, memory usage, filesystems and network statistics. In this section, we are going to install node_exporter on the Prometheus server and on a remote CentOS 8 Linux host and monitor system metrics on the two hosts.

On the Prometheus node, we are going to create a system user for node_exporter.

[[email protected] ~]# useradd -m -s /bin/false node_exporter

Next, head out to the downloads Page of Prometheus and download the node_exporter tarball or use below wget to command to downlond it from command line,

[[email protected] ~]# wget

Upon downloading the node_exporter file, proceed and extract it as shown

[[email protected] ~]# tar -zxpvf node_exporter-0.18.1.linux-amd64.tar.gz

You can check the contents of the extracted folder using the tree command as shown

[[email protected] ~]# tree node_exporter-0.18.1.linux-amd64


Next, copy the binary file called node_exporter to /usr/local/bin path

[[email protected] ~]# cp node_exporter-0.18.1.linux-amd64/node_exporter /usr/local/bin

Next, set the file permissions of the node_exporter file which has been copied as shown

[[email protected] ~]# chown node_exporter:node_exporter /usr/local/bin/node_exporter

Next, we need to configure node_exporter to run as a service. So, proceed and create a systemd service file as shown

[[email protected] ~]# vi /etc/systemd/system/node_exporter.service

Then paste the configuration shown below and save the file

Description=Prometheus Node Exporter



For the changes to take effect, reload systemd manager with the command:

[[email protected] ~]# systemctl daemon-reload

Next, start and enable node_exporter service

[[email protected] ~]# systemctl start node_exporter
[[email protected] ~]# systemctl enable node_exporter

Just to be sure that the service is running, execute:

[[email protected] ~]# systemctl status node_exporter


Just to be sure that the service is running, use the netstat utility to check if it’s listening on port 9100 as is expected by default.

[[email protected] ~]# netstat -pnltu | grep 9100
tcp6       0      0 :::9100       :::*          LISTEN      3472/node_exporter
[[email protected] ~]#

Perfect! Node_exporter service is running as expected.

Next, open port 9100 in firewall as shown

[[email protected] ~]# firewall-cmd --add-port=9100/tcp  --permanent
[[email protected] ~]# firewall-cmd --reload
[[email protected] ~]#

Repeat the steps outlined for the remote CentOS 8 Linux system as well.

Finally, you need to add the node_exporter target to the prometheus.yml file. Append the lines below to define node_exporter for the Prometheus server

[[email protected] ~]# vi /etc/prometheus/prometheus.yml
 - job_name: 'node_exporter'
   - targets: ['localhost:9100']


Restart Prometheus service

[[email protected] ~]# systemctl restart prometheus

Once again,  head out to your browser, click on the ‘Status’ tab and click on ‘Targets

Be sure to observe a new endpoint on the browser called node_exporter  for the Prometheus server


To add an endpoint for the remote Linux system head back to the prometheus.yml file and append the line below

– targets: [‘’]

The node_exporter section should now look like this

 - job_name: 'node_exporter'
   - targets: ['localhost:9100']
   - targets: ['']

Save the changes and restart Prometheus service

[[email protected] ~]# systemctl restart prometheus

Refresh the browser and notice the second endpoint that has been added for the remote CentOS Linux system


To ensure that you are receiving metrics, from your configured nodes. simply use the curl command as follows:

# curl http://node-ip:9100/metrics

For example, to display metrics from the Prometheus server run:

[[email protected] ~]# curl http://localhost:9100/metrics


For the remote CentOS 8 host, I executed the command:

[[email protected] ~]# curl


This can also be achieved by opening a browser and browsing the URL


You can also choose to graph the metrics that you want. Simply go to the home page pf the Prometheus server, and click on the drop-down menu labeled ‘insert metric at cursor’.


Select the metric you want to graph,


Click on the ‘Execute’ button and click on the ‘graph’ tab just below to reveal the graph


And this brings us to the end of this topic. You have successfully installed and configured Prometheus to monitor system metrics on both your server and remote host. In our next guide, we will integrate Prometheus with Grafana for better visualization and analysis of metrics. Feel free to share your feedback with us and share the article with a friend.

from Linuxtechi