- Nikhil Bhaskar
- July 15, 2021
How to Install & Configure Prometheus monitoring tool on Ubuntu 20.04.
Prometheus is a free & open-source monitoring tool.It developed by SoundCloud.Prometheus is a metrics based event monitoring and alerting application.It is a web-interface & used for metrics monitoring, event monitoring & alert management.It supports/manage hundreds of services and microservices.
We can Add various type of exporter to the Prometheus system:-
- blackbox_exporter
- consul_exporter
- graphite_exporter
- haproxy_exporter
- memcached_exporter
- mysqld_exporter
- node_exporter
- statsd_exporter.
Node_exporter is used for generate metrics about resources like CPU, memory & disk usage.
Install Prometheus monitoring tool on ubuntu.
Update the system.
apt-get update
Create Users and Directory for Prometheus.
###Create Users
useradd --no-create-home --shell /bin/false prometheus
&
useradd --no-create-home --shell /bin/false node_exporter
## Create Directory
mkdir /etc/prometheus
&
mkdir /var/lib/prometheus
Update the group and user ownership.
chown prometheus:prometheus /etc/prometheus
&
chown prometheus:prometheus /var/lib/prometheus
Download Prometheus monitoring tool
cd /opt
&
wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/
prometheus-2.26.0.linux-amd64.tar.gz
Here is the command output.
https://github.com/prometheus/prometheus/releases/download/v2.26.0/
prometheus-2.26.0.linux-amd64.tar.gz
Resolving github.com (github.com)... 140.82.112.3
Connecting to github.com (github.com)|140.82.112.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://github-releases.githubusercontent.com/6838921/4394b400-922b-
.....
Connecting to github-releases.githubusercontent.com (github-
HTTP request sent, awaiting response... 200 OK
Length: 65155818 (62M) [application/octet-stream]
Saving to: ‘prometheus-2.26.0.linux-amd64.tar.gz’
prometheus-2.26.0.linux-amd64.tar.gz 100%[==========>] 62.14M 20.8MB/s in 3.0s
‘prometheus-2.26.0.linux-amd64.tar.gz’ saved [65155818/65155818]
Create a checksum of the Prometheus downloaded file.
sha256sum prometheus-2.26.0.linux-amd64.tar.gz
Here is the command output.
8dd6786c338dc62728e8891c13b62eda66c7f28a01398869f2b3712895b441b9 prometheus-2.26.0.linux-amd64.tar.gz
Extract the downloaded file.
tar -xvf prometheus-2.26.0.linux-amd64.tar.gz
Open prometheus extracted folder.
cd prometheus-2.26.0.linux-amd64
Copy all Prometheus files to /usr/local/bin directory.We have two libraries Prometheus and promtool in prometheus extracted folder.
cp /opt/prometheus-2.26.0.linux-amd64/prometheus /usr/local/bin/
&
cp /opt/prometheus-2.26.0.linux-amd64/promtool /usr/local/bin/
Provide Prometheus user ownership.
chown prometheus:prometheus /usr/local/bin/prometheus
&
chown prometheus:prometheus /usr/local/bin/promtool
Console and console_libraries directories to /etc/Prometheus/.
cp -r /opt/prometheus-2.26.0.linux-amd64/consoles /etc/prometheus
&
cp -r /opt/prometheus-2.26.0.linux-amd64/console_libraries /etc/prometheus
&
cp -r /opt/prometheus-2.26.0.linux-amd64/prometheus.yml /etc/prometheus
Provide the user and group ownership on the directories to Prometheus user.
chown -R prometheus:prometheus /etc/prometheus/consoles
&
chown -R prometheus:prometheus /etc/prometheus/console_libraries
&
chown -R prometheus:prometheus /etc/prometheus/prometheus.yml
Check Prometheus Version.
prometheus --version
Here is the command output.
prometheus, version 2.26.0 (branch: HEAD, revision: 3cafc58827d1ebd1a6be40bab3d8d)
build user: root@a67cafebe6d0
build date: 20210331-11:56:23
go version: go1.16.2
platform: linux/amd64
Check Promtool Version.
promtool --version
Here is the command output.
promtool, version 2.26.0 (branch: HEAD, revision: 3cafc58827d1ebd1a6be40bab3d8d)
build user: root@a67cafebe6d0
build date: 20210331-11:56:23
go version: go1.16.2
platform: linux/amd64
Configure the Prometheus file.
vim /etc/prometheus/prometheus.yml
or
cat /etc/prometheus/prometheus.yml
Here is the command output.
# my global config
global:
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 1minute
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global
'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
#The job name is added as a label`job=<job_name>`to timeseries scraped from this config
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090'] or targets: ['Server-ip:9090']
Start Prometheus Systemd file.
sudo -u prometheus /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
Here is the command output.
caller=main.go:380 msg="No time or size retention was set so using the
default time retention" duration=15d
caller=main.go:418 msg="Starting Prometheus" version="(version=2.26.0, branch=HEAD)"
..
component=web msg="Start listening for connections"address=0.0.0.0:9090
...
caller=main.go:975 msg="Completed loading of configuration file"
filename=/etc/prometheus/prometheus.yml totalDuration=6.371359ms
remote_storage=2.263µs web_handler=829ns query_engine=1.357µs
scrape=5.972424ms scrape_sd=30.904µs notify=16.945µs notify_sd=13.991µs rules=1.947µs
caller=main.go:767 msg="Server is ready to receive web requests."
....
Create a system service file.
vim /etc/systemd/system/prometheus.service
Add the following lines.
[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
Reload,Start & Enable the prometheus service.
##Reload service
systemctl daemon-reload
##Start Service
systemctl start prometheus
##Enable Service
systemctl enable prometheus
Check prometheus service status.
systemctl status prometheus
Here is the command output.
● prometheus.service - Prometheus
Loaded:loaded(/etc/systemd/system/prometheus.service;enabled;vendor preset:enabled)
Active: active (running) ; 39min ago
Main PID: 1886 (prometheus)
Tasks: 6 (limit: 1160)
Memory: 28.8M
CGroup: /system.slice/prometheus.service
└─1886 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml
Add port 9090 in ufw firewall.
ufw allow 9090/tcp
Access Prometheus web-interface.
http://server-IP:9090
Here is the output.
- Click on Graph option.
- Search process_cpu_seconds_total
- Click on Execute.
Install Node Exporter on client server.
Download node exporter.
cd /tmp
&
curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
Extract the download file.
tar -xvf node_exporter-0.18.1.linux-amd64.tar.gz
Here is the command output.
node_exporter-0.18.1.linux-amd64/
node_exporter-0.18.1.linux-amd64/node_exporter
node_exporter-0.18.1.linux-amd64/NOTICE
node_exporter-0.18.1.linux-amd64/LICENSE
Change the location of node export.
mv node_exporter-0.18.1.linux-amd64/node_exporter /usr/local/bin/
Create a node_exporter service file.
vim /etc/systemd/system/node_exporter.service
Add the following lines.
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Reload,Start & Enable the node exporter service.
##Reload service
systemctl daemon-reload
## start service
systemctl start node_exporter
## Enable service
systemctl enable node_exporter
Check the status of node exporter service.
systemctl status node_exporter
Here is the command output.
● node_exporter.service - Node Exporter
Loaded: loaded (/etc/systemd/system/node_exporter.service; disabled; vendor preset: enabled)
Active: active (running) ; 4s ago
Main PID: 2381 (node_exporter)
Tasks: 3 (limit: 1160)
Memory: 1.5M
CGroup: /system.slice/node_exporter.service
└─2381 /usr/local/bin/node_exporter
Open port number 9100 on uew firewall.
ufw allow 9100/tcp
Show Metric list.
http://client-server-IP:9100/metrics
Here is the output.
#HELP go_gc_duration_seconds A summary of pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 2.2246e-05
go_gc_duration_seconds{quantile="0.25"} 2.7124e-05
go_gc_duration_seconds{quantile="0.5"} 3.1444e-05
go_gc_duration_seconds{quantile="0.75"} 4.6907e-05
go_gc_duration_seconds{quantile="1"} 7.6819e-05
go_gc_duration_seconds_sum 0.000232763
go_gc_duration_seconds_count 6
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 32
# HELP go_info Information about the Go environment.
# TYPE go_info gauge
go_info{version="go1.16.2"} 1
# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
# TYPE go_memstats_alloc_bytes gauge
go_memstats_alloc_bytes 1.9579816e+07
# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
# TYPE go_memstats_alloc_bytes_total counter
go_memstats_alloc_bytes_total 4.9179784e+07
# HELP go_memstats_frees_total Total number of frees.
# TYPE go_memstats_frees_total counter
go_memstats_frees_total 96160
Configure the Target Server on Prometheus Server.
Open/Login to Prometheus server and Open the prometheus.yml file.
vim /etc/prometheus/prometheus.yml
Add the following lines.
- job_name: 'node_exporter_metrics'
scrape_interval: 5s
static_configs:
- targets: ['client-server-ip:9100']
Restart the prometheus service.
systemctl restart prometheus
Open Prometheus Web interface
http://server-IP:9090
Check Targets.(Click on Status–>Targets. or http://server-ip:9090/targets)
Query for node related metrics on Prometheus Server.
We have various option to find the node related metrics.
node_memory_MemFree_bytes
node_cpu_seconds_total
node_filesystem_avail_bytes
rate(node_cpu_seconds_total{mode="system"}[1m])
rate(node_network_receive_bytes_total[1m])
Search node_memory_MemFree_bytes & Click on Execute.